bfg-common 1.3.230 → 1.3.232

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 (58) 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/assets/scss/common/normalize.scss +4 -0
  8. package/components/atoms/alert/Alert.vue +95 -95
  9. package/components/atoms/alert/Notification.vue +170 -170
  10. package/components/atoms/switch/Switch.vue +111 -111
  11. package/components/atoms/table/compact/Compact.vue +526 -526
  12. package/components/atoms/tooltip/Signpost.vue +225 -225
  13. package/components/common/diagramMain/lib/config/index.ts +24 -0
  14. package/components/common/diagramMain/lib/models/interfaces.ts +5 -5
  15. package/components/common/diagramMain/lib/models/types.ts +9 -1
  16. package/components/common/diagramMain/port/Port.vue +1 -1
  17. package/components/common/pages/Tasks.vue +120 -120
  18. package/components/common/recursionTree/RecursionTree.vue +203 -203
  19. package/components/common/vm/actions/add/Add.vue +575 -575
  20. package/components/common/vm/actions/clone/Clone.vue +518 -518
  21. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +269 -269
  22. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +693 -693
  23. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -220
  24. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +59 -59
  25. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +294 -294
  26. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  27. package/components/common/vm/actions/common/select/storage/lib/config/config.ts +166 -166
  28. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  29. package/components/common/weekSelect/WeekSelect.vue +112 -112
  30. package/components/common/weekSelect/lib/config/options.ts +10 -10
  31. package/components/common/wizards/vm/migrate/Migrate.vue +9 -1
  32. package/components/common/wizards/vm/migrate/lib/models/interfaces.ts +4 -0
  33. package/components/common/wizards/vm/migrate/select/network/Network.vue +79 -6
  34. package/components/common/wizards/vm/migrate/select/network/table/{disk/Disk.vue → network/Network.vue} +19 -12
  35. package/components/common/wizards/vm/migrate/select/network/table/{disk → network}/lib/config/advancedTable.ts +6 -3
  36. package/components/common/wizards/vm/migrate/select/network/table/{disk → network}/lib/config/basicTable.ts +10 -7
  37. package/components/common/wizards/vm/migrate/select/network/table/{disk → network}/lib/config/tableKeys.ts +1 -1
  38. package/components/common/wizards/vm/migrate/select/network/table/{disk → network}/lib/models/types.ts +1 -1
  39. package/components/common/wizards/vm/migrate/select/network/table/useAt/UseAt.vue +53 -0
  40. package/components/common/wizards/vm/migrate/select/network/table/useAt/lib/config/tableKeys.ts +7 -0
  41. package/components/common/wizards/vm/migrate/select/network/table/useAt/lib/config/useAtTable.ts +47 -0
  42. package/components/common/wizards/vm/migrate/select/network/table/useAt/lib/models/interfaces.ts +1 -0
  43. package/components/common/wizards/vm/migrate/select/network/table/useAt/lib/models/types.ts +5 -0
  44. package/composables/useAppVersion.ts +21 -21
  45. package/composables/useEnvLanguage.ts +20 -20
  46. package/lib/utils/sendTask.ts +72 -72
  47. package/minify.js +146 -146
  48. package/package.json +1 -1
  49. package/public/spice-console/application/codec.js +257 -257
  50. package/public/spice-console/lib/rasterEngine.js +907 -907
  51. package/public/spice-console/network/spicechannel.js +369 -369
  52. package/store/main/lib/interfaces.ts +9 -9
  53. package/store/tasks/actions.ts +133 -133
  54. package/store/tasks/getters.ts +25 -25
  55. package/store/tasks/lib/models/interfaces.ts +18 -18
  56. package/store/tasks/mutations.ts +58 -58
  57. package/store/tasks/state.ts +16 -16
  58. /package/components/common/wizards/vm/migrate/select/network/table/{disk → network}/lib/models/interfaces.ts +0 -0
@@ -1,225 +1,225 @@
1
- <template>
2
- <div
3
- id="signpost"
4
- :class="['signpost', signpostClass]"
5
- :style="signpostStyles"
6
- @click.stop
7
- @mouseenter="hovered = true"
8
- @mouseleave="hovered = false"
9
- >
10
- <div class="signpost-wrap">
11
- <div class="popover-pointer" />
12
- <div class="signpost-content-header">
13
- <button
14
- :id="`${props.testId}-close-icon`"
15
- class="signpost-action close"
16
- @click="hide"
17
- >
18
- <atoms-the-icon class="close-icon" name="close" />
19
- </button>
20
- </div>
21
- <div class="signpost-content-body">
22
- <slot />
23
- </div>
24
- </div>
25
- </div>
26
- </template>
27
-
28
- <script setup lang="ts">
29
- import { UI_I_ElPosition } from '~/components/atoms/tooltip/lib/models/interfaces'
30
- const props = withDefaults(
31
- defineProps<{
32
- elemId: string
33
- testId?: string
34
- }>(),
35
- { testId: 'ui-signpost' }
36
- )
37
- const emits = defineEmits<{
38
- (event: 'hide'): void
39
- }>()
40
- const hide = (): void => {
41
- emits('hide')
42
- }
43
-
44
- const signpostStyles = ref<UI_I_ElPosition | null>(null)
45
- watch(
46
- () => props.elemId,
47
- (newValue: string) => {
48
- const element =
49
- (document.getElementById(newValue) as HTMLDivElement) || null
50
- const { width, x, y } = element.getBoundingClientRect()
51
-
52
- signpostStyles.value = {
53
- top: `${y}px`,
54
- left: `${x + width / 2}px`,
55
- }
56
- setTimeout(() => {
57
- setSignpostPosition()
58
- }, 0)
59
- },
60
- { immediate: true }
61
- )
62
- const signpostClass = ref<string[]>([])
63
- const setSignpostPosition = (): void => {
64
- const signpost =
65
- (document.getElementById('signpost') as HTMLDivElement) || null
66
- const signpostRect = (signpost?.getBoundingClientRect() as DOMRect) || null
67
-
68
- type PositionX = 'right' | 'left'
69
- let positionX: PositionX = 'right'
70
-
71
- type PositionY = 'top' | 'middle'
72
- let positionY: PositionY = 'middle'
73
-
74
- const isOutRight = signpostRect.left + signpostRect.width > window.innerWidth
75
- const isOutTop = signpostRect.top < 0
76
-
77
- if (isOutTop) {
78
- positionY = 'top'
79
- }
80
- if (isOutRight) {
81
- positionX = 'left'
82
- }
83
-
84
- signpostClass.value.push(positionY)
85
- signpostClass.value.push(positionX)
86
- signpostClass.value.push('show')
87
- }
88
-
89
- const hovered = ref<boolean>(false)
90
- const windowClick = (): void => {
91
- hide()
92
- }
93
- const windowScroll = (): void => {
94
- if (hovered.value) {
95
- return
96
- }
97
- hide()
98
- }
99
- onMounted(() => {
100
- setTimeout(() => {
101
- window.addEventListener('click', windowClick)
102
- window.addEventListener('scroll', windowScroll, true)
103
- })
104
- })
105
- onUnmounted(() => {
106
- window.removeEventListener('click', windowClick)
107
- window.removeEventListener('scroll', windowScroll, true)
108
- })
109
- </script>
110
-
111
- <style scoped lang="scss">
112
- .signpost {
113
- opacity: 0;
114
- position: fixed;
115
- cursor: default;
116
- transform: translateY(calc(-50% + 14px)) translateX(20px);
117
- z-index: 1000000000;
118
-
119
- &.show {
120
- opacity: 1;
121
- }
122
- &.left {
123
- transform: translateY(calc(-50% + 14px)) translateX(calc(-100% - 20px));
124
-
125
- .signpost-wrap {
126
- .popover-pointer {
127
- left: 100%;
128
- border-right: unset;
129
- border-left: 12px solid var(--signpost-border-color);
130
-
131
- &::before {
132
- border-right: unset;
133
- border-left: 12px solid var(--signpost-bgcolor);
134
- left: unset;
135
- right: 2px;
136
- }
137
- }
138
- }
139
- }
140
- &.top {
141
- transform: translateY(calc(0% + 10px)) translateX(20px);
142
-
143
- &.left {
144
- transform: translateY(calc(0% + 10px)) translateX(calc(-100% - 20px));
145
-
146
- .popover-pointer {
147
- top: 5px;
148
- }
149
- }
150
-
151
- .signpost-wrap {
152
- .popover-pointer {
153
- top: 5px;
154
- }
155
- }
156
- }
157
-
158
- .signpost-wrap {
159
- border-radius: 3px;
160
- border: 1px solid var(--signpost-border-color);
161
- background-color: var(--signpost-bgcolor);
162
- position: relative;
163
-
164
- .popover-pointer {
165
- border-bottom: 12px solid transparent;
166
- top: 50%;
167
- transform: translateY(-50%);
168
- border-right: 12px solid var(--signpost-border-color);
169
- left: -12px;
170
- height: 0;
171
- width: 0;
172
- position: absolute;
173
-
174
- &::before {
175
- border-bottom: 12px solid transparent;
176
- top: 1px;
177
- border-right: 12px solid var(--signpost-bgcolor);
178
- left: 2px;
179
- content: '';
180
- height: 0;
181
- width: 0;
182
- position: absolute;
183
- }
184
- }
185
-
186
- .signpost-content-header {
187
- display: flex;
188
- justify-content: flex-end;
189
- position: absolute;
190
- width: 100%;
191
- background-color: inherit;
192
- top: 0;
193
-
194
- button {
195
- line-height: 24px;
196
-
197
- .close-icon {
198
- width: 16px;
199
- height: 16px;
200
- }
201
- }
202
- }
203
-
204
- .signpost-content-body {
205
- padding: 24px;
206
- max-height: 480px;
207
- overflow-y: auto;
208
- text-transform: none;
209
- }
210
- }
211
- }
212
- </style>
213
-
214
- <style>
215
- :root {
216
- --signpost-bgcolor: #fff;
217
- --signpost-border-color: #b3b3b3;
218
- --signpost-color: #acbac3;
219
- }
220
- :root.dark-theme {
221
- --signpost-bgcolor: #21333b;
222
- --signpost-border-color: #000;
223
- --signpost-color: #acbac3;
224
- }
225
- </style>
1
+ <template>
2
+ <div
3
+ id="signpost"
4
+ :class="['signpost', signpostClass]"
5
+ :style="signpostStyles"
6
+ @click.stop
7
+ @mouseenter="hovered = true"
8
+ @mouseleave="hovered = false"
9
+ >
10
+ <div class="signpost-wrap">
11
+ <div class="popover-pointer" />
12
+ <div class="signpost-content-header">
13
+ <button
14
+ :id="`${props.testId}-close-icon`"
15
+ class="signpost-action close"
16
+ @click="hide"
17
+ >
18
+ <atoms-the-icon class="close-icon" name="close" />
19
+ </button>
20
+ </div>
21
+ <div class="signpost-content-body">
22
+ <slot />
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import { UI_I_ElPosition } from '~/components/atoms/tooltip/lib/models/interfaces'
30
+ const props = withDefaults(
31
+ defineProps<{
32
+ elemId: string
33
+ testId?: string
34
+ }>(),
35
+ { testId: 'ui-signpost' }
36
+ )
37
+ const emits = defineEmits<{
38
+ (event: 'hide'): void
39
+ }>()
40
+ const hide = (): void => {
41
+ emits('hide')
42
+ }
43
+
44
+ const signpostStyles = ref<UI_I_ElPosition | null>(null)
45
+ watch(
46
+ () => props.elemId,
47
+ (newValue: string) => {
48
+ const element =
49
+ (document.getElementById(newValue) as HTMLDivElement) || null
50
+ const { width, x, y } = element.getBoundingClientRect()
51
+
52
+ signpostStyles.value = {
53
+ top: `${y}px`,
54
+ left: `${x + width / 2}px`,
55
+ }
56
+ setTimeout(() => {
57
+ setSignpostPosition()
58
+ }, 0)
59
+ },
60
+ { immediate: true }
61
+ )
62
+ const signpostClass = ref<string[]>([])
63
+ const setSignpostPosition = (): void => {
64
+ const signpost =
65
+ (document.getElementById('signpost') as HTMLDivElement) || null
66
+ const signpostRect = (signpost?.getBoundingClientRect() as DOMRect) || null
67
+
68
+ type PositionX = 'right' | 'left'
69
+ let positionX: PositionX = 'right'
70
+
71
+ type PositionY = 'top' | 'middle'
72
+ let positionY: PositionY = 'middle'
73
+
74
+ const isOutRight = signpostRect.left + signpostRect.width > window.innerWidth
75
+ const isOutTop = signpostRect.top < 0
76
+
77
+ if (isOutTop) {
78
+ positionY = 'top'
79
+ }
80
+ if (isOutRight) {
81
+ positionX = 'left'
82
+ }
83
+
84
+ signpostClass.value.push(positionY)
85
+ signpostClass.value.push(positionX)
86
+ signpostClass.value.push('show')
87
+ }
88
+
89
+ const hovered = ref<boolean>(false)
90
+ const windowClick = (): void => {
91
+ hide()
92
+ }
93
+ const windowScroll = (): void => {
94
+ if (hovered.value) {
95
+ return
96
+ }
97
+ hide()
98
+ }
99
+ onMounted(() => {
100
+ setTimeout(() => {
101
+ window.addEventListener('click', windowClick)
102
+ window.addEventListener('scroll', windowScroll, true)
103
+ })
104
+ })
105
+ onUnmounted(() => {
106
+ window.removeEventListener('click', windowClick)
107
+ window.removeEventListener('scroll', windowScroll, true)
108
+ })
109
+ </script>
110
+
111
+ <style scoped lang="scss">
112
+ .signpost {
113
+ opacity: 0;
114
+ position: fixed;
115
+ cursor: default;
116
+ transform: translateY(calc(-50% + 14px)) translateX(20px);
117
+ z-index: 1000000000;
118
+
119
+ &.show {
120
+ opacity: 1;
121
+ }
122
+ &.left {
123
+ transform: translateY(calc(-50% + 14px)) translateX(calc(-100% - 20px));
124
+
125
+ .signpost-wrap {
126
+ .popover-pointer {
127
+ left: 100%;
128
+ border-right: unset;
129
+ border-left: 12px solid var(--signpost-border-color);
130
+
131
+ &::before {
132
+ border-right: unset;
133
+ border-left: 12px solid var(--signpost-bgcolor);
134
+ left: unset;
135
+ right: 2px;
136
+ }
137
+ }
138
+ }
139
+ }
140
+ &.top {
141
+ transform: translateY(calc(0% + 10px)) translateX(20px);
142
+
143
+ &.left {
144
+ transform: translateY(calc(0% + 10px)) translateX(calc(-100% - 20px));
145
+
146
+ .popover-pointer {
147
+ top: 5px;
148
+ }
149
+ }
150
+
151
+ .signpost-wrap {
152
+ .popover-pointer {
153
+ top: 5px;
154
+ }
155
+ }
156
+ }
157
+
158
+ .signpost-wrap {
159
+ border-radius: 3px;
160
+ border: 1px solid var(--signpost-border-color);
161
+ background-color: var(--signpost-bgcolor);
162
+ position: relative;
163
+
164
+ .popover-pointer {
165
+ border-bottom: 12px solid transparent;
166
+ top: 50%;
167
+ transform: translateY(-50%);
168
+ border-right: 12px solid var(--signpost-border-color);
169
+ left: -12px;
170
+ height: 0;
171
+ width: 0;
172
+ position: absolute;
173
+
174
+ &::before {
175
+ border-bottom: 12px solid transparent;
176
+ top: 1px;
177
+ border-right: 12px solid var(--signpost-bgcolor);
178
+ left: 2px;
179
+ content: '';
180
+ height: 0;
181
+ width: 0;
182
+ position: absolute;
183
+ }
184
+ }
185
+
186
+ .signpost-content-header {
187
+ display: flex;
188
+ justify-content: flex-end;
189
+ position: absolute;
190
+ width: 100%;
191
+ background-color: inherit;
192
+ top: 0;
193
+
194
+ button {
195
+ line-height: 24px;
196
+
197
+ .close-icon {
198
+ width: 16px;
199
+ height: 16px;
200
+ }
201
+ }
202
+ }
203
+
204
+ .signpost-content-body {
205
+ padding: 24px;
206
+ max-height: 480px;
207
+ overflow-y: auto;
208
+ text-transform: none;
209
+ }
210
+ }
211
+ }
212
+ </style>
213
+
214
+ <style>
215
+ :root {
216
+ --signpost-bgcolor: #fff;
217
+ --signpost-border-color: #b3b3b3;
218
+ --signpost-color: #acbac3;
219
+ }
220
+ :root.dark-theme {
221
+ --signpost-bgcolor: #21333b;
222
+ --signpost-border-color: #000;
223
+ --signpost-color: #acbac3;
224
+ }
225
+ </style>
@@ -3,6 +3,11 @@ import {
3
3
  UI_I_ModalsInitialData,
4
4
  UI_I_Network,
5
5
  } from '~/components/common/diagramMain/lib/models/interfaces'
6
+ import {
7
+ UI_T_LoadBalancingMode,
8
+ UI_T_IYN,
9
+ UI_T_Carier,
10
+ } from '~/components/common/diagramMain/lib/models/types'
6
11
  import * as initial from '~/components/common/diagramMain/lib/config/initial'
7
12
 
8
13
  export const dataForSelectedNetworkFunc = (
@@ -43,6 +48,25 @@ export const dataForSelectedAdapterFunc = (
43
48
  lldp: adapter.lldp,
44
49
  }
45
50
 
51
+ export const mode: UI_T_LoadBalancingMode[] = [
52
+ 'inherit',
53
+ 'active-backup',
54
+ 'balance-slb',
55
+ 'balance-tcp',
56
+ ]
57
+
58
+ export const iyn: UI_T_IYN[] = [
59
+ 'inherit',
60
+ 'yes',
61
+ 'no',
62
+ ]
63
+
64
+ export const carier: UI_T_Carier[] = [
65
+ 'inherit',
66
+ 'carier',
67
+ 'beakon',
68
+ ]
69
+
46
70
  export const {
47
71
  managePhysicalAdapterStatusInitial,
48
72
  mainRectHeightsInitial,
@@ -134,17 +134,17 @@ export interface UI_I_NetworkSummaryPortletListItem<
134
134
  label: string
135
135
  value: T
136
136
  id: string
137
- initialValue: UI_I_OverrideValue<T>
137
+ initialValue?: UI_I_OverrideValue<T>
138
138
  }
139
139
 
140
- export interface UI_I_NetworkInfo {
140
+ export interface UI_I_NetworkInfo<T = string | number | boolean> {
141
141
  average_bw: number
142
142
  burst_size: number
143
- nicTeamingPolicy: UI_I_NetworkSummaryPortletListItem[]
143
+ nicTeamingPolicy: UI_I_NetworkSummaryPortletListItem<T>[]
144
144
  nics_override: boolean
145
145
  peak_bw: number
146
- securityPolicy: UI_I_NetworkSummaryPortletListItem[]
147
- shapingPolicy: UI_I_NetworkSummaryPortletListItem[]
146
+ securityPolicy: UI_I_NetworkSummaryPortletListItem<T>[]
147
+ shapingPolicy: UI_I_NetworkSummaryPortletListItem<T>[]
148
148
  }
149
149
 
150
150
  export interface UI_I_Network extends UI_I_NetworkInfo {
@@ -5,4 +5,12 @@ export type UI_T_PropertiesFieldName = 'vlanId' | 'networkLabel'
5
5
  export type UI_T_TrafficShapingFieldName = 'average' | 'peak' | 'burstSize'
6
6
  export type UI_T_PortPropertiesFieldName = 'mtu'
7
7
 
8
- export type UI_T_Adapters = UI_I_Adapter & { adapterPosition: number }
8
+ export type UI_T_LoadBalancingMode =
9
+ | 'inherit'
10
+ | 'active-backup'
11
+ | 'balance-slb'
12
+ | 'balance-tcp'
13
+ export type UI_T_IYN = 'inherit' | 'yes' | 'no'
14
+ export type UI_T_Carier = 'inherit' | 'carier' | 'beakon'
15
+
16
+ export type UI_T_Adapters = UI_I_Adapter & { adapterPosition: number }
@@ -271,7 +271,7 @@ const onShowModalWithTypeCheck = (value: string) => {
271
271
  tcpConfig: {
272
272
  ipv4Settings: props.network.sysx?.ipv4_settings.auto ? '0' : '1',
273
273
  ipv4Address: props.network.sysx?.ipv4_settings.ipv4,
274
- subnetMask: props.network.sysx?.ipv4_settings.net_mask,
274
+ subnetMask: props.network.sysx?.ipv4_settings.mask,
275
275
  defaultGateway: {
276
276
  checked: props.network.sysx?.ipv4_settings.gateway_override,
277
277
  value: props.network.sysx?.ipv4_settings.gateway,