bfg-common 1.5.520 → 1.5.521

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,497 +1,497 @@
1
- <template>
2
- <g data-title="network-contents">
3
- <foreignObject
4
- data-title="network-icon"
5
- :width="positions.networkIconSize"
6
- :height="positions.networkIconSize"
7
- :x="positions.networkIconX"
8
- :y="positions.networkIconY"
9
- >
10
- <div :class="networkIcon" :title="errorText"></div>
11
- </foreignObject>
12
-
13
- <a
14
- :id="`network-${props.network.id}`"
15
- :data-id="`${props.network.testId}-link`"
16
- style="text-decoration: none"
17
- cursor="pointer"
18
- data-title="network-name-link"
19
- class="network-title-link"
20
- @click="onSelectNetwork(props.network.id)"
21
- >
22
- <foreignObject
23
- data-title="network-name-text"
24
- height="22"
25
- width="206"
26
- :x="positions.networkTitleX"
27
- :title="props.network.title"
28
- :y="networkTitlePosition"
29
- class="diagram__heading"
30
- >
31
- <span
32
- :class="[
33
- 'network-title text-ellipsis',
34
- {
35
- 'is-selected': props.isSelected,
36
- },
37
- ]"
38
- :title="props.network.title"
39
- :id="`network_${props.network.id}`"
40
- >
41
- {{ props.network.title }}
42
- </span>
43
- </foreignObject>
44
- </a>
45
-
46
- <foreignObject
47
- v-if="isNotShowNetworkActions"
48
- data-title="network-actions"
49
- width="18"
50
- height="18"
51
- :x="positions.actionX"
52
- :y="positions.actionY"
53
- cursor="pointer"
54
- >
55
- <div v-if="isNewView" class="dropdown-actions-container">
56
- <button
57
- :id="`dropdown-${props.network.id}`"
58
- :class="[
59
- 'action-button',
60
- { 'action-button-selected': isShowDropdown },
61
- ]"
62
- @click="isShowDropdown = !isShowDropdown"
63
- >
64
- <ui-icon name="horizontal-dotes" width="16" height="16" />
65
- </button>
66
- <Teleport to="body">
67
- <ui-dropdown
68
- :test-id="props.network.testId"
69
- :show="isShowDropdown"
70
- :items="networkPopupFields"
71
- :elem-id="`dropdown-${props.network.id}`"
72
- width="max-content"
73
- show-from-left
74
- :margin-between-trigger="0"
75
- @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
76
- @hide="onHide"
77
- ></ui-dropdown>
78
- </Teleport>
79
- </div>
80
- <div v-else class="diagram-actions">
81
- <atoms-collapse-nav
82
- class="diagram-actions__icon"
83
- value="-1"
84
- popup-class="diagram-actions__popup"
85
- :close-after-click="true"
86
- :items="networkPopupFields"
87
- :test-id="props.network.testId"
88
- @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
89
- />
90
- </div>
91
- </foreignObject>
92
-
93
- <text
94
- data-title="network-vlan-text"
95
- dy="11px"
96
- font-size="13"
97
- font-weight="400"
98
- :x="positions.contentX"
99
- :y="props.network.vlanPosition"
100
- class="vlan-id"
101
- >
102
- {{ localization.common.vlanId }}: {{ props.network.vlanId }}
103
- </text>
104
-
105
- <common-diagram-main-highlights
106
- data-title="ports-closed"
107
- type="main-orange"
108
- width="276"
109
- height="18"
110
- :x="positions.blockX"
111
- :y="closedPortsHighlightPosition"
112
- :hide="!props.isNetworkSelectedWithClosedPorts"
113
- />
114
-
115
- <foreignObject
116
- data-title="ports-toggle-icon"
117
- :width="positions.arrowSize"
118
- :height="positions.arrowSize"
119
- :x="positions.arrowX"
120
- :y="positions.portsArrowPosition"
121
- cursor="pointer"
122
- :data-id="`${props.network.testId}-toggle-ports`"
123
- :class="{
124
- disabled: !hasPorts && isNewView,
125
- hide: !hasPorts && !isNewView,
126
- }"
127
- @click="
128
- onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
129
- "
130
- >
131
- <div class="diagram-block__toggle">
132
- <ui-icon
133
- v-if="isNewView"
134
- name="arrow"
135
- width="16"
136
- height="16"
137
- :class="[
138
- 'virtual-switch__arrow-icon',
139
- {
140
- open: hasPorts ? props.network.toggle : false,
141
- },
142
- ]"
143
- />
144
- <atoms-the-icon
145
- v-else
146
- name="angle"
147
- :class="[
148
- 'virtual-switch__arrow-icon',
149
- {
150
- open: hasPorts ? props.network.toggle : false,
151
- },
152
- ]"
153
- />
154
- </div>
155
- </foreignObject>
156
-
157
- <text
158
- v-if="props.network.state.state !== 3"
159
- data-title="ports-main-text"
160
- dy="11px"
161
- font-size="13"
162
- font-weight="400"
163
- :x="positions.portX"
164
- :y="positions.portsY"
165
- class="port-group-header"
166
- >
167
- {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
168
- </text>
169
- <foreignObject
170
- v-else
171
- dy="11px"
172
- font-size="13"
173
- font-weight="400"
174
- x="26"
175
- height="20"
176
- width="246"
177
- :y="props.network.portsPosition - 5"
178
- class="port-group-header"
179
- >
180
- <span class="error-text text-ellipsis" :title="errorText">
181
- {{ errorText }}
182
- </span>
183
- </foreignObject>
184
-
185
- <common-diagram-main-highlights
186
- data-title="ports-closed"
187
- type="line-orange"
188
- :x="positions.x1"
189
- :y="closedPortsLinePosition"
190
- :x2="positions.x2"
191
- :y2="closedPortsLinePosition"
192
- :hide="!props.isNetworkSelectedWithClosedPorts"
193
- />
194
- </g>
195
- </template>
196
-
197
- <script setup lang="ts">
198
- import type {
199
- UI_I_ModalsInitialData,
200
- UI_I_NetworkFullWithPositions,
201
- } from '~/components/common/diagramMain/lib/models/interfaces'
202
- import type {
203
- UI_I_Localization,
204
- UI_I_ArbitraryObject,
205
- } from '~/lib/models/interfaces'
206
- import {
207
- networkPopupFieldsFunc,
208
- networkPopupFieldsNewFunc,
209
- } from '~/components/common/diagramMain/modals/lib/config'
210
- import {
211
- dataForSelectedNetworkFunc,
212
- networkContentPositionsFunc,
213
- } from '~/components/common/diagramMain/lib/config'
214
-
215
- const props = withDefaults(
216
- defineProps<{
217
- network: UI_I_NetworkFullWithPositions
218
- inPortlet: boolean
219
- isNetworkSelectedWithClosedPorts: boolean
220
- diagramId: string
221
- isSelected: boolean
222
- testId?: string
223
- }>(),
224
- {
225
- testId: '',
226
- }
227
- )
228
-
229
- const emits = defineEmits<{
230
- (event: 'select-network', networkId: string): void
231
- (
232
- event: 'show-modal',
233
- value: string,
234
- properties?: UI_I_ModalsInitialData
235
- ): void
236
- (
237
- event: 'toggle-ports',
238
- id: string,
239
- newState: boolean,
240
- diagramId: string
241
- ): void
242
- }>()
243
-
244
- const { $store }: any = useNuxtApp()
245
-
246
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
247
-
248
- const positions = computed<UI_I_ArbitraryObject<number>>(() =>
249
- networkContentPositionsFunc(
250
- isNewView.value,
251
- props.network.portsPosition,
252
- props.network.titlePosition
253
- )
254
- )
255
-
256
- const isShowDropdown = ref<boolean>(false)
257
- const onHide = (): void => {
258
- isShowDropdown.value = false
259
- }
260
-
261
- const localization = computed<UI_I_Localization>(() => useLocal())
262
-
263
- const networkIcon = computed<string>(() => {
264
- switch (props.network.state.state) {
265
- case 0:
266
- return 'vsphere-icon-network-error network-icon'
267
- case 3:
268
- return 'vsphere-icon-network-error network-icon'
269
- case 2:
270
- return 'vsphere-icon-network-warning network-icon'
271
- default:
272
- return 'vsphere-icon-network network-icon'
273
- }
274
- })
275
-
276
- const errorText = computed<string>(() =>
277
- props.network.state?.errors?.length > 0
278
- ? props.network.state?.errors.join(', ') ||
279
- localization.value.common.somethingWentWrong
280
- : ''
281
- )
282
-
283
- const networkPopupFields = computed(() =>
284
- isNewView.value
285
- ? networkPopupFieldsNewFunc(
286
- localization.value,
287
- props.network.networkType,
288
- props.network.testId,
289
- props.network.state.state,
290
- props.inPortlet
291
- )
292
- : networkPopupFieldsFunc(
293
- localization.value,
294
- props.network.networkType,
295
- props.network.testId,
296
- props.network.state.state,
297
- props.inPortlet
298
- )
299
- )
300
-
301
- const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
302
- dataForSelectedNetworkFunc(props.network)
303
- )
304
-
305
- const closedPortsHighlightPosition = computed<number>(
306
- () => props.network.portsPosition - 1.5
307
- )
308
-
309
- const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
310
-
311
- const closedPortsLinePosition = computed<number>(
312
- () => props.network.portsPosition + 7.5
313
- )
314
-
315
- const networkTitlePosition = computed<number>(
316
- () => props.network.titlePosition - 5
317
- )
318
-
319
- const isNotShowNetworkActions = computed<boolean>(
320
- () => !(props.inPortlet && props.network.state.state === 3)
321
- )
322
-
323
- const onSelectNetwork = (networkId: string): void => {
324
- emits('select-network', networkId)
325
- }
326
- const onShowModal = (
327
- value: string,
328
- properties?: UI_I_ModalsInitialData
329
- ): void => {
330
- emits('show-modal', value, properties)
331
- }
332
- const onTogglePorts = (
333
- id: string,
334
- isToggle: boolean,
335
- diagramId: string
336
- ): void => {
337
- emits('toggle-ports', id, isToggle, diagramId)
338
- }
339
- </script>
340
-
341
- <style scoped lang="scss">
342
- @import '@/assets/scss/common/mixins.scss';
343
-
344
- :root.dark-theme {
345
- .diagram__heading,
346
- .vlan-id,
347
- .port-group-header {
348
- fill: #c1cdd4;
349
- }
350
-
351
- .text-ellipsis {
352
- color: #c1cdd4;
353
-
354
- &:hover {
355
- color: #c1cdd4;
356
- text-decoration: solid underline #c1cdd4 2px;
357
- }
358
- }
359
-
360
- .error-text {
361
- color: #e02200;
362
-
363
- &:hover {
364
- color: #e02200;
365
- text-decoration: unset;
366
- }
367
- }
368
- }
369
-
370
- .diagram {
371
- &__heading {
372
- @include text($fs: 14px, $fw: 500);
373
- fill: #565656;
374
- letter-spacing: normal;
375
- line-height: 1.2rem;
376
- }
377
-
378
- &__values {
379
- @include text($fs: 12px, $fw: 400);
380
- }
381
- &-actions {
382
- :deep(.diagram-actions__icon) {
383
- &.tabs-overflow {
384
- top: -12px;
385
- right: -13px;
386
- }
387
- .navbar-dropdown-menu {
388
- .navbar-dropdown-menu-item {
389
- background: red;
390
- }
391
- }
392
- }
393
- }
394
- }
395
-
396
- .virtual-switch__arrow-icon {
397
- width: 16px;
398
- height: 16px;
399
- margin-right: 4px;
400
- transform: rotate(90deg);
401
- align-self: center;
402
- fill: var(--triger-icon-color);
403
- cursor: pointer;
404
- &.open {
405
- transform: rotate(180deg);
406
- }
407
- }
408
-
409
- .text-ellipsis {
410
- display: block;
411
- max-width: 206px;
412
- text-overflow: ellipsis;
413
- overflow: hidden;
414
- white-space: nowrap;
415
- font-weight: 500;
416
- font-size: 14px;
417
- color: #565656;
418
- }
419
- .network-title {
420
- &:hover {
421
- color: #565656;
422
- text-decoration: solid underline #565656 2px;
423
- }
424
- }
425
-
426
- .error-text {
427
- font-weight: 400;
428
- font-size: 12px;
429
- max-width: 246px;
430
- color: #e02200;
431
-
432
- &:hover {
433
- color: #e02200;
434
- text-decoration: unset;
435
- }
436
- }
437
-
438
- :root.is-new-view {
439
- .network-title {
440
- user-select: none;
441
- -webkit-user-select: none;
442
- line-height: 26px;
443
- color: var(--diagram-content-text);
444
-
445
- &:hover {
446
- color: var(--diagram-content-text-hover);
447
- text-decoration: unset;
448
- }
449
- &.is-selected {
450
- color: var(--diagram-content-text-selected);
451
- &:hover {
452
- color: var(--diagram-content-text-selected-hover);
453
- text-decoration: unset;
454
- }
455
- }
456
- }
457
- .disabled {
458
- pointer-events: none;
459
- .virtual-switch__arrow-icon {
460
- fill: none;
461
- color: var(--diagram-content-second-disabled-text);
462
- }
463
- }
464
- .virtual-switch__arrow-icon {
465
- fill: none;
466
- color: var(--diagram-content-second-text);
467
- }
468
- .port-group-header {
469
- fill: var(--diagram-content-second-text);
470
- }
471
- .network-icon {
472
- color: var(--diagram-content-text);
473
- width: 20px;
474
- height: 20px;
475
- }
476
- .vlan-id {
477
- fill: var(--diagram-content-third-text);
478
- }
479
-
480
- .action-button {
481
- border: none;
482
- margin: 0;
483
- padding: 0;
484
- background: transparent;
485
- cursor: pointer;
486
- color: var(--diagram-content-text);
487
-
488
- &:hover {
489
- color: var(--diagram-content-text-hover);
490
- }
491
-
492
- &.action-button-selected {
493
- color: var(--diagram-content-text-selected);
494
- }
495
- }
496
- }
497
- </style>
1
+ <template>
2
+ <g data-title="network-contents">
3
+ <foreignObject
4
+ data-title="network-icon"
5
+ :width="positions.networkIconSize"
6
+ :height="positions.networkIconSize"
7
+ :x="positions.networkIconX"
8
+ :y="positions.networkIconY"
9
+ >
10
+ <div :class="networkIcon" :title="errorText"></div>
11
+ </foreignObject>
12
+
13
+ <a
14
+ :id="`network-${props.network.id}`"
15
+ :data-id="`${props.network.testId}-link`"
16
+ style="text-decoration: none"
17
+ cursor="pointer"
18
+ data-title="network-name-link"
19
+ class="network-title-link"
20
+ @click="onSelectNetwork(props.network.id)"
21
+ >
22
+ <foreignObject
23
+ data-title="network-name-text"
24
+ height="22"
25
+ width="206"
26
+ :x="positions.networkTitleX"
27
+ :title="props.network.title"
28
+ :y="networkTitlePosition"
29
+ class="diagram__heading"
30
+ >
31
+ <span
32
+ :class="[
33
+ 'network-title text-ellipsis',
34
+ {
35
+ 'is-selected': props.isSelected,
36
+ },
37
+ ]"
38
+ :title="props.network.title"
39
+ :id="`network_${props.network.id}`"
40
+ >
41
+ {{ props.network.title }}
42
+ </span>
43
+ </foreignObject>
44
+ </a>
45
+
46
+ <foreignObject
47
+ v-if="isNotShowNetworkActions"
48
+ data-title="network-actions"
49
+ width="18"
50
+ height="18"
51
+ :x="positions.actionX"
52
+ :y="positions.actionY"
53
+ cursor="pointer"
54
+ >
55
+ <div v-if="isNewView" class="dropdown-actions-container">
56
+ <button
57
+ :id="`dropdown-${props.network.id}`"
58
+ :class="[
59
+ 'action-button',
60
+ { 'action-button-selected': isShowDropdown },
61
+ ]"
62
+ @click="isShowDropdown = !isShowDropdown"
63
+ >
64
+ <ui-icon name="horizontal-dotes" width="16" height="16" />
65
+ </button>
66
+ <Teleport to="body">
67
+ <ui-dropdown
68
+ :test-id="props.network.testId"
69
+ :show="isShowDropdown"
70
+ :items="networkPopupFields"
71
+ :elem-id="`dropdown-${props.network.id}`"
72
+ width="max-content"
73
+ show-from-left
74
+ :margin-between-trigger="0"
75
+ @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
76
+ @hide="onHide"
77
+ ></ui-dropdown>
78
+ </Teleport>
79
+ </div>
80
+ <div v-else class="diagram-actions">
81
+ <atoms-collapse-nav
82
+ class="diagram-actions__icon"
83
+ value="-1"
84
+ popup-class="diagram-actions__popup"
85
+ :close-after-click="true"
86
+ :items="networkPopupFields"
87
+ :test-id="props.network.testId"
88
+ @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
89
+ />
90
+ </div>
91
+ </foreignObject>
92
+
93
+ <text
94
+ data-title="network-vlan-text"
95
+ dy="11px"
96
+ font-size="13"
97
+ font-weight="400"
98
+ :x="positions.contentX"
99
+ :y="props.network.vlanPosition"
100
+ class="vlan-id"
101
+ >
102
+ {{ localization.common.vlanId }}: {{ props.network.vlanId }}
103
+ </text>
104
+
105
+ <common-diagram-main-highlights
106
+ data-title="ports-closed"
107
+ type="main-orange"
108
+ width="276"
109
+ height="18"
110
+ :x="positions.blockX"
111
+ :y="closedPortsHighlightPosition"
112
+ :hide="!props.isNetworkSelectedWithClosedPorts"
113
+ />
114
+
115
+ <foreignObject
116
+ data-title="ports-toggle-icon"
117
+ :width="positions.arrowSize"
118
+ :height="positions.arrowSize"
119
+ :x="positions.arrowX"
120
+ :y="positions.portsArrowPosition"
121
+ cursor="pointer"
122
+ :data-id="`${props.network.testId}-toggle-ports`"
123
+ :class="{
124
+ disabled: !hasPorts && isNewView,
125
+ hide: !hasPorts && !isNewView,
126
+ }"
127
+ @click="
128
+ onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
129
+ "
130
+ >
131
+ <div class="diagram-block__toggle">
132
+ <ui-icon
133
+ v-if="isNewView"
134
+ name="arrow"
135
+ width="16"
136
+ height="16"
137
+ :class="[
138
+ 'virtual-switch__arrow-icon',
139
+ {
140
+ open: hasPorts ? props.network.toggle : false,
141
+ },
142
+ ]"
143
+ />
144
+ <atoms-the-icon
145
+ v-else
146
+ name="angle"
147
+ :class="[
148
+ 'virtual-switch__arrow-icon',
149
+ {
150
+ open: hasPorts ? props.network.toggle : false,
151
+ },
152
+ ]"
153
+ />
154
+ </div>
155
+ </foreignObject>
156
+
157
+ <text
158
+ v-if="props.network.state.state !== 3"
159
+ data-title="ports-main-text"
160
+ dy="11px"
161
+ font-size="13"
162
+ font-weight="400"
163
+ :x="positions.portX"
164
+ :y="positions.portsY"
165
+ class="port-group-header"
166
+ >
167
+ {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
168
+ </text>
169
+ <foreignObject
170
+ v-else
171
+ dy="11px"
172
+ font-size="13"
173
+ font-weight="400"
174
+ x="26"
175
+ height="20"
176
+ width="246"
177
+ :y="props.network.portsPosition - 5"
178
+ class="port-group-header"
179
+ >
180
+ <span class="error-text text-ellipsis" :title="errorText">
181
+ {{ errorText }}
182
+ </span>
183
+ </foreignObject>
184
+
185
+ <common-diagram-main-highlights
186
+ data-title="ports-closed"
187
+ type="line-orange"
188
+ :x="positions.x1"
189
+ :y="closedPortsLinePosition"
190
+ :x2="positions.x2"
191
+ :y2="closedPortsLinePosition"
192
+ :hide="!props.isNetworkSelectedWithClosedPorts"
193
+ />
194
+ </g>
195
+ </template>
196
+
197
+ <script setup lang="ts">
198
+ import type {
199
+ UI_I_ModalsInitialData,
200
+ UI_I_NetworkFullWithPositions,
201
+ } from '~/components/common/diagramMain/lib/models/interfaces'
202
+ import type {
203
+ UI_I_Localization,
204
+ UI_I_ArbitraryObject,
205
+ } from '~/lib/models/interfaces'
206
+ import {
207
+ networkPopupFieldsFunc,
208
+ networkPopupFieldsNewFunc,
209
+ } from '~/components/common/diagramMain/modals/lib/config'
210
+ import {
211
+ dataForSelectedNetworkFunc,
212
+ networkContentPositionsFunc,
213
+ } from '~/components/common/diagramMain/lib/config'
214
+
215
+ const props = withDefaults(
216
+ defineProps<{
217
+ network: UI_I_NetworkFullWithPositions
218
+ inPortlet: boolean
219
+ isNetworkSelectedWithClosedPorts: boolean
220
+ diagramId: string
221
+ isSelected: boolean
222
+ testId?: string
223
+ }>(),
224
+ {
225
+ testId: '',
226
+ }
227
+ )
228
+
229
+ const emits = defineEmits<{
230
+ (event: 'select-network', networkId: string): void
231
+ (
232
+ event: 'show-modal',
233
+ value: string,
234
+ properties?: UI_I_ModalsInitialData
235
+ ): void
236
+ (
237
+ event: 'toggle-ports',
238
+ id: string,
239
+ newState: boolean,
240
+ diagramId: string
241
+ ): void
242
+ }>()
243
+
244
+ const { $store }: any = useNuxtApp()
245
+
246
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
247
+
248
+ const positions = computed<UI_I_ArbitraryObject<number>>(() =>
249
+ networkContentPositionsFunc(
250
+ isNewView.value,
251
+ props.network.portsPosition,
252
+ props.network.titlePosition
253
+ )
254
+ )
255
+
256
+ const isShowDropdown = ref<boolean>(false)
257
+ const onHide = (): void => {
258
+ isShowDropdown.value = false
259
+ }
260
+
261
+ const localization = computed<UI_I_Localization>(() => useLocal())
262
+
263
+ const networkIcon = computed<string>(() => {
264
+ switch (props.network.state.state) {
265
+ case 0:
266
+ return 'vsphere-icon-network-error network-icon'
267
+ case 3:
268
+ return 'vsphere-icon-network-error network-icon'
269
+ case 2:
270
+ return 'vsphere-icon-network-warning network-icon'
271
+ default:
272
+ return 'vsphere-icon-network network-icon'
273
+ }
274
+ })
275
+
276
+ const errorText = computed<string>(() =>
277
+ props.network.state?.errors?.length > 0
278
+ ? props.network.state?.errors.join(', ') ||
279
+ localization.value.common.somethingWentWrong
280
+ : ''
281
+ )
282
+
283
+ const networkPopupFields = computed(() =>
284
+ isNewView.value
285
+ ? networkPopupFieldsNewFunc(
286
+ localization.value,
287
+ props.network.networkType,
288
+ props.network.testId,
289
+ props.network.state.state,
290
+ props.inPortlet
291
+ )
292
+ : networkPopupFieldsFunc(
293
+ localization.value,
294
+ props.network.networkType,
295
+ props.network.testId,
296
+ props.network.state.state,
297
+ props.inPortlet
298
+ )
299
+ )
300
+
301
+ const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
302
+ dataForSelectedNetworkFunc(props.network)
303
+ )
304
+
305
+ const closedPortsHighlightPosition = computed<number>(
306
+ () => props.network.portsPosition - 1.5
307
+ )
308
+
309
+ const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
310
+
311
+ const closedPortsLinePosition = computed<number>(
312
+ () => props.network.portsPosition + 7.5
313
+ )
314
+
315
+ const networkTitlePosition = computed<number>(
316
+ () => props.network.titlePosition - 5
317
+ )
318
+
319
+ const isNotShowNetworkActions = computed<boolean>(
320
+ () => !(props.inPortlet && props.network.state.state === 3)
321
+ )
322
+
323
+ const onSelectNetwork = (networkId: string): void => {
324
+ emits('select-network', networkId)
325
+ }
326
+ const onShowModal = (
327
+ value: string,
328
+ properties?: UI_I_ModalsInitialData
329
+ ): void => {
330
+ emits('show-modal', value, properties)
331
+ }
332
+ const onTogglePorts = (
333
+ id: string,
334
+ isToggle: boolean,
335
+ diagramId: string
336
+ ): void => {
337
+ emits('toggle-ports', id, isToggle, diagramId)
338
+ }
339
+ </script>
340
+
341
+ <style scoped lang="scss">
342
+ @import '@/assets/scss/common/mixins.scss';
343
+
344
+ :root.dark-theme {
345
+ .diagram__heading,
346
+ .vlan-id,
347
+ .port-group-header {
348
+ fill: #c1cdd4;
349
+ }
350
+
351
+ .text-ellipsis {
352
+ color: #c1cdd4;
353
+
354
+ &:hover {
355
+ color: #c1cdd4;
356
+ text-decoration: solid underline #c1cdd4 2px;
357
+ }
358
+ }
359
+
360
+ .error-text {
361
+ color: #e02200;
362
+
363
+ &:hover {
364
+ color: #e02200;
365
+ text-decoration: unset;
366
+ }
367
+ }
368
+ }
369
+
370
+ .diagram {
371
+ &__heading {
372
+ @include text($fs: 14px, $fw: 500);
373
+ fill: #565656;
374
+ letter-spacing: normal;
375
+ line-height: 1.2rem;
376
+ }
377
+
378
+ &__values {
379
+ @include text($fs: 12px, $fw: 400);
380
+ }
381
+ &-actions {
382
+ :deep(.diagram-actions__icon) {
383
+ &.tabs-overflow {
384
+ top: -12px;
385
+ right: -13px;
386
+ }
387
+ .navbar-dropdown-menu {
388
+ .navbar-dropdown-menu-item {
389
+ background: red;
390
+ }
391
+ }
392
+ }
393
+ }
394
+ }
395
+
396
+ .virtual-switch__arrow-icon {
397
+ width: 16px;
398
+ height: 16px;
399
+ margin-right: 4px;
400
+ transform: rotate(90deg);
401
+ align-self: center;
402
+ fill: var(--triger-icon-color);
403
+ cursor: pointer;
404
+ &.open {
405
+ transform: rotate(180deg);
406
+ }
407
+ }
408
+
409
+ .text-ellipsis {
410
+ display: block;
411
+ max-width: 206px;
412
+ text-overflow: ellipsis;
413
+ overflow: hidden;
414
+ white-space: nowrap;
415
+ font-weight: 500;
416
+ font-size: 14px;
417
+ color: #565656;
418
+ }
419
+ .network-title {
420
+ &:hover {
421
+ color: #565656;
422
+ text-decoration: solid underline #565656 2px;
423
+ }
424
+ }
425
+
426
+ .error-text {
427
+ font-weight: 400;
428
+ font-size: 12px;
429
+ max-width: 246px;
430
+ color: #e02200;
431
+
432
+ &:hover {
433
+ color: #e02200;
434
+ text-decoration: unset;
435
+ }
436
+ }
437
+
438
+ :root.is-new-view {
439
+ .network-title {
440
+ user-select: none;
441
+ -webkit-user-select: none;
442
+ line-height: 26px;
443
+ color: var(--diagram-content-text);
444
+
445
+ &:hover {
446
+ color: var(--diagram-content-text-hover);
447
+ text-decoration: unset;
448
+ }
449
+ &.is-selected {
450
+ color: var(--diagram-content-text-selected);
451
+ &:hover {
452
+ color: var(--diagram-content-text-selected-hover);
453
+ text-decoration: unset;
454
+ }
455
+ }
456
+ }
457
+ .disabled {
458
+ pointer-events: none;
459
+ .virtual-switch__arrow-icon {
460
+ fill: none;
461
+ color: var(--diagram-content-second-disabled-text);
462
+ }
463
+ }
464
+ .virtual-switch__arrow-icon {
465
+ fill: none;
466
+ color: var(--diagram-content-second-text);
467
+ }
468
+ .port-group-header {
469
+ fill: var(--diagram-content-second-text);
470
+ }
471
+ .network-icon {
472
+ color: var(--diagram-content-text);
473
+ width: 20px;
474
+ height: 20px;
475
+ }
476
+ .vlan-id {
477
+ fill: var(--diagram-content-third-text);
478
+ }
479
+
480
+ .action-button {
481
+ border: none;
482
+ margin: 0;
483
+ padding: 0;
484
+ background: transparent;
485
+ cursor: pointer;
486
+ color: var(--diagram-content-text);
487
+
488
+ &:hover {
489
+ color: var(--diagram-content-text-hover);
490
+ }
491
+
492
+ &.action-button-selected {
493
+ color: var(--diagram-content-text-selected);
494
+ }
495
+ }
496
+ }
497
+ </style>