bfg-common 1.3.467 → 1.3.468

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 (109) hide show
  1. package/assets/scss/common/normalize.scss +340 -340
  2. package/components/atoms/TheIcon2.vue +1353 -1353
  3. package/components/atoms/loader/Loader.vue +30 -30
  4. package/components/atoms/loader/PreLoader.vue +38 -38
  5. package/components/atoms/switch/Switch.vue +111 -111
  6. package/components/atoms/table/compact/Compact.vue +526 -526
  7. package/components/common/adapterManager/ui/table/Header.vue +93 -93
  8. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  9. package/components/common/context/Context.vue +99 -99
  10. package/components/common/layout/theHeader/LanguageSwitch.vue +102 -0
  11. package/components/common/layout/theHeader/TheHeader.vue +91 -0
  12. package/components/common/layout/theHeader/TheHeaderNew.vue +229 -0
  13. package/components/common/layout/theHeader/TheHeaderOld.vue +241 -0
  14. package/components/common/layout/theHeader/feedback/Feedback.vue +104 -0
  15. package/components/common/layout/theHeader/feedback/FeedbackNew.vue +63 -0
  16. package/components/common/layout/theHeader/feedback/FeedbackOld.vue +73 -0
  17. package/components/common/layout/theHeader/helpMenu/About.vue +110 -0
  18. package/components/common/layout/theHeader/helpMenu/HelpMenu.vue +45 -0
  19. package/components/common/layout/theHeader/helpMenu/helpMenuNew/HelpMenuNew.vue +112 -0
  20. package/components/common/layout/theHeader/helpMenu/helpMenuNew/lib/config/dropMenu.ts +25 -0
  21. package/components/common/layout/theHeader/helpMenu/helpMenuOld/HelpMenuOld.vue +69 -0
  22. package/components/common/layout/theHeader/helpMenu/helpMenuOld/lib/config/dropMenu.ts +22 -0
  23. package/components/common/layout/theHeader/helpMenu/helpMenuOld/lib/models/types.ts +1 -0
  24. package/components/common/layout/theHeader/lib/models/types.ts +5 -0
  25. package/components/common/layout/theHeader/modals/Reconnect.vue +98 -0
  26. package/components/common/layout/theHeader/modals/RedirectLogin.vue +60 -0
  27. package/components/common/layout/theHeader/userMenu/UserMenu.vue +95 -0
  28. package/components/common/layout/theHeader/userMenu/lib/models/interfaces.ts +32 -0
  29. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +210 -0
  30. package/components/common/layout/theHeader/userMenu/modals/changePassword/lib/config/form.ts +31 -0
  31. package/components/common/layout/theHeader/userMenu/modals/changePassword/lib/models/interfaces.ts +12 -0
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/Inventory.vue +43 -0
  33. package/components/common/layout/theHeader/userMenu/modals/preferences/Preferences.vue +119 -0
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/View.vue +113 -0
  35. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +148 -0
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/lib/config/lang.ts +10 -0
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/lib/config/radioOptions.ts +22 -0
  38. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/lib/models/enums.ts +9 -0
  39. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/lib/models/interfaces.ts +11 -0
  40. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/lib/models/types.ts +1 -0
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +66 -0
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/lib/config/consoleOptions.ts +30 -0
  43. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/lib/models/interfaces.ts +5 -0
  44. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/config/preferencesTabs.ts +68 -0
  45. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +1 -0
  46. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +67 -0
  47. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/config/formatOptions.ts +27 -0
  48. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types.ts +1 -0
  49. package/components/common/layout/theHeader/userMenu/userMenuNew/UserMenuNew.vue +114 -0
  50. package/components/common/layout/theHeader/userMenu/userMenuNew/lib/config/dropMenu.ts +28 -0
  51. package/components/common/layout/theHeader/userMenu/userMenuOld/UserMenuOld.vue +36 -0
  52. package/components/common/layout/theHeader/userMenu/userMenuOld/lib/config/dropMenu.ts +36 -0
  53. package/components/common/layout/theHeader/userMenu/userMenuOld/lib/models/types.ts +5 -0
  54. package/components/common/lib/config/states.ts +160 -160
  55. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +142 -142
  56. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +248 -248
  57. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +288 -288
  58. package/components/common/readyToComplete/ReadyToComplete.vue +15 -15
  59. package/components/common/resource/progressBlock/ProgressBlock.vue +142 -142
  60. package/components/common/split/horizontal/Horizontal.vue +70 -70
  61. package/components/common/vm/actions/clone/Clone.vue +511 -511
  62. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +273 -273
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +697 -697
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +400 -400
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +329 -329
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +305 -305
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +168 -168
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +82 -82
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +32 -32
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +182 -182
  71. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +114 -114
  72. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +192 -192
  73. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +72 -72
  74. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +164 -164
  75. package/components/common/vm/actions/common/select/name/Name.vue +235 -235
  76. package/components/common/vm/actions/common/select/storage/Storage.vue +198 -198
  77. package/components/common/vm/actions/editSettings/EditSettings.vue +316 -316
  78. package/components/common/weekSelect/lib/config/options.ts +10 -10
  79. package/components/common/wizards/datastore/add/Add.vue +436 -436
  80. package/components/common/wizards/datastore/add/lib/config/stepItems.ts +191 -191
  81. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +38 -38
  82. package/components/common/wizards/datastore/add/lib/utils.ts +70 -70
  83. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +160 -160
  84. package/components/common/wizards/datastore/add/nfs/Nfs.vue +112 -112
  85. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +104 -104
  86. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -62
  87. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -53
  88. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +86 -86
  89. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +184 -184
  90. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +459 -459
  91. package/components/common/wizards/datastore/add/types/Types.vue +80 -80
  92. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +49 -49
  93. package/composables/useAppVersion.ts +22 -22
  94. package/composables/useEnvLanguage.ts +20 -20
  95. package/lib/utils/sendTask.ts +73 -73
  96. package/minify.js +146 -146
  97. package/package.json +2 -1
  98. package/plugins/spice-console/spice.console.ts +147 -147
  99. package/public/spice-console/application/codec.js +263 -263
  100. package/public/spice-console/lib/rasterEngine.js +907 -907
  101. package/public/spice-console/network/spicechannel.js +375 -375
  102. package/store/main/lib/interfaces.ts +9 -9
  103. package/store/tasks/actions.ts +133 -133
  104. package/store/tasks/getters.ts +25 -25
  105. package/store/tasks/lib/models/interfaces.ts +18 -18
  106. package/store/tasks/mutations.ts +58 -58
  107. package/store/tasks/state.ts +16 -16
  108. /package/components/{layout → common/layout}/theHeader/lib/models/enums.ts +0 -0
  109. /package/components/{layout → common/layout}/theHeader/lib/utils/localization.ts +0 -0
@@ -0,0 +1,241 @@
1
+ <template>
2
+ <div class="main-nav">
3
+ <header class="header header-7">
4
+ <div class="header-nav">
5
+ <div class="nav-link">
6
+ <button
7
+ id="inventory-menu-trigger"
8
+ data-id="inventory-menu-toggle-button"
9
+ class="inventory-menu-trigger"
10
+ @click="emits('toggle-main-menu')"
11
+ >
12
+ <span class="inventory-menu-link">
13
+ <span class="nav-icon">
14
+ <atoms-the-icon class="menu-icon" name="menu" />
15
+ </span>
16
+ </span>
17
+ </button>
18
+ </div>
19
+ </div>
20
+ <div class="branding">
21
+ <nuxt-link
22
+ id="header-shortcuts-link"
23
+ data-id="header-shortcuts-link"
24
+ to="/shortcuts"
25
+ >
26
+ <span class="title pointer"
27
+ >{{ props.companyName }}<sup><b>®</b></sup>
28
+ {{ props.projectName }}</span
29
+ >
30
+ <span v-if="props.isBeta" class="beta-version badge badge-info">{{
31
+ props.betaText
32
+ }}</span>
33
+ <span v-else-if="props.isDev" class="beta-version badge badge-info"
34
+ >Dev</span
35
+ >
36
+ </nuxt-link>
37
+ </div>
38
+ <form>
39
+ <atoms-input-search />
40
+ </form>
41
+
42
+ <div class="settings header-actions">
43
+ <div class="divider" />
44
+ <a
45
+ id="global-refresh-button"
46
+ data-id="global-refresh-button"
47
+ class="nav-link tid-global-refresh-button"
48
+ @click="emits('global-refresh')"
49
+ >
50
+ <span class="nav-icon">
51
+ <atoms-the-icon
52
+ v-show="!props.globalRefreshLoading"
53
+ class="reset-icon"
54
+ name="reset"
55
+ />
56
+ <span
57
+ :class="[
58
+ 'spinner spinner-inline spinner-inverse global-refresh-active',
59
+ { 'spinner-paused': !props.globalRefreshLoading },
60
+ ]"
61
+ ></span>
62
+ </span>
63
+ </a>
64
+ <div class="divider" />
65
+
66
+ <common-layout-the-header-user-menu
67
+ :hostname="props.hostname"
68
+ :is-preference="props.isPreference"
69
+ :time-format="props.timeFormat"
70
+ :selected-language-type="props.selectedLanguageType"
71
+ :selected-language="props.selectedLang"
72
+ :new-view="props.newView"
73
+ :project="props.project"
74
+ @show-preference="emits('show-preference')"
75
+ @hide-preference="emits('hide-preference')"
76
+ @change-theme-mode="emits('change-theme-mode')"
77
+ @update-time-format="emits('update-time-format', $event)"
78
+ @update-language="emits('update-language', $event)"
79
+ @update-is-browser="emits('update-is-browser', $event)"
80
+ @update-is-new-view="emits('update-is-new-view', $event)"
81
+ @submit-preferences="emits('submit-preferences')"
82
+ />
83
+
84
+ <div class="divider" />
85
+
86
+ <common-layout-the-header-feedback
87
+ :is-show-feedback="isShowFeedback"
88
+ @show="isShowFeedback = true"
89
+ @hide="isShowFeedback = false"
90
+ />
91
+
92
+ <div class="divider" />
93
+
94
+ <common-layout-the-header-help-menu :project-name="props.projectName" />
95
+
96
+ <div class="divider" />
97
+ </div>
98
+ </header>
99
+ </div>
100
+ </template>
101
+
102
+ <script setup lang="ts">
103
+ import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
104
+ import type { UI_T_Project } from '~/lib/models/types'
105
+
106
+ const props = defineProps<{
107
+ companyName: string
108
+ isBeta: boolean
109
+ isDev: boolean
110
+ betaText: string
111
+ globalRefreshLoading: boolean
112
+ project: UI_T_Project
113
+ projectName: string
114
+ hostname: string
115
+ isPreference: boolean
116
+ selectedLanguageType: string
117
+ selectedLang: string
118
+ newView: boolean
119
+ timeFormat: string
120
+ }>()
121
+
122
+ const emits = defineEmits<{
123
+ (event: 'toggle-main-menu'): void
124
+ (event: 'global-refresh'): void
125
+ (event: 'show-preference'): void
126
+ (event: 'hide-preference'): void
127
+ (event: 'change-theme-mode'): void
128
+ (event: 'update-time-format', value: UI_T_TimeValue): void
129
+ (event: 'update-language', value: string): void
130
+ (event: 'update-is-browser', value: string): void
131
+ (event: 'update-is-new-view', value: boolean): void
132
+ (event: 'submit-preferences'): void
133
+ }>()
134
+
135
+ const isShowFeedback = ref<boolean>(false)
136
+ </script>
137
+
138
+ <style scoped lang="scss">
139
+ .main-nav {
140
+ position: relative;
141
+ left: 0;
142
+
143
+ header {
144
+ height: 62px;
145
+ align-items: center;
146
+ padding-left: 0;
147
+
148
+ .nav-link::before,
149
+ .nav-link::after {
150
+ display: none !important;
151
+ }
152
+
153
+ .inventory-menu-trigger {
154
+ padding: 0 0 0 60px;
155
+ background: transparent;
156
+ border: none;
157
+ cursor: pointer;
158
+ position: relative;
159
+ outline: none;
160
+
161
+ .nav-icon {
162
+ padding: 0;
163
+ width: auto;
164
+ font-size: inherit;
165
+ display: flex;
166
+ align-items: center;
167
+ background: transparent;
168
+ border: none;
169
+
170
+ .menu-icon {
171
+ position: absolute;
172
+ top: 50%;
173
+ left: 50%;
174
+ transform: translate(-50%, -50%);
175
+ height: 24px;
176
+ width: 24px;
177
+ fill: #fafafa;
178
+ display: inline-block;
179
+ margin: 0;
180
+ vertical-align: middle;
181
+ }
182
+ }
183
+ }
184
+
185
+ .branding {
186
+ width: auto;
187
+ min-width: auto;
188
+ padding-left: 9px;
189
+ padding-right: 20px;
190
+
191
+ a {
192
+ position: relative;
193
+ padding-right: 4px;
194
+ }
195
+ }
196
+
197
+ .settings {
198
+ align-items: center;
199
+
200
+ a.nav-link {
201
+ display: flex;
202
+ padding: 0;
203
+ cursor: pointer;
204
+
205
+ .reset-icon {
206
+ width: 24px;
207
+ height: 24px;
208
+ position: absolute;
209
+ top: 50%;
210
+ left: 50%;
211
+ transform: translate(-50%, -50%);
212
+ fill: #fafafa;
213
+ }
214
+
215
+ .spinner {
216
+ line-height: 24px;
217
+ vertical-align: middle;
218
+ height: 24px;
219
+ width: 24px;
220
+ min-height: 24px;
221
+ min-width: 24px;
222
+ z-index: 100;
223
+
224
+ &.spinner-paused {
225
+ animation-play-state: paused;
226
+ display: none;
227
+ }
228
+ }
229
+ }
230
+ .divider {
231
+ height: 40px;
232
+ display: flex;
233
+ flex: 0 0 auto;
234
+ width: 1px;
235
+ background: #fafafa;
236
+ opacity: 0.15;
237
+ }
238
+ }
239
+ }
240
+ }
241
+ </style>
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <common-layout-the-header-feedback-new
3
+ v-if="isNewView"
4
+ :is-show-feedback="props.isShowFeedback"
5
+ :title="localization.sendFeedback"
6
+ @hide="onHide"
7
+ @submit="onSubmit"
8
+ />
9
+ <common-layout-the-header-feedback-old
10
+ v-else
11
+ :is-show-feedback="props.isShowFeedback"
12
+ :title="localization.sendFeedback"
13
+ @show="emits('show')"
14
+ @hide="onHide"
15
+ @submit="onSubmit"
16
+ />
17
+ </template>
18
+
19
+ <script setup lang="ts">
20
+ import type { UI_I_FeedbackForm } from '~/components/common/feedback/lib/models/interfaces'
21
+ import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
22
+ import type {
23
+ UI_I_Localization,
24
+ UI_I_NotifyBodyMessage,
25
+ } from '~/lib/models/interfaces'
26
+
27
+ const props = defineProps<{
28
+ isShowFeedback: boolean
29
+ }>()
30
+
31
+ const emits = defineEmits<{
32
+ (event: 'show'): void
33
+ (event: 'hide'): void
34
+ }>()
35
+
36
+ const { $store }: any = useNuxtApp()
37
+
38
+ const localization = computed<UI_I_Localization>(() => useLocal())
39
+
40
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
41
+
42
+ const handleRequest = async (data: UI_I_FeedbackForm): Promise<boolean> => {
43
+ const { error } = await useMyFetch<never, API_UI_I_Error>(
44
+ 'https://customer.aobfg.ru/api/v1/feedback',
45
+ {
46
+ method: 'POST',
47
+ key: Date.now().toString(),
48
+ body: data,
49
+ }
50
+ )
51
+
52
+ if (error.value?.data && error.value.data.error_code !== 0) {
53
+ handleErrors(error)
54
+ return false
55
+ }
56
+ return true
57
+ }
58
+ const msgSuccess = ref<UI_I_NotifyBodyMessage>({
59
+ status: 'success',
60
+ title: localization.value.feedbackSent,
61
+ desc: `${localization.value.thankYouForYourComments}`,
62
+ })
63
+ const showNotification = (message: UI_I_NotifyBodyMessage): void => {
64
+ const { title, desc, status } = message
65
+ const { $store }: any = useNuxtApp()
66
+
67
+ $store.dispatch('main/A_SHOW_NOTIFICATION', {
68
+ status,
69
+ messages: [
70
+ {
71
+ title,
72
+ descriptions: [desc],
73
+ },
74
+ ],
75
+ headline: '',
76
+ timeout: status === 'success' ? 5000 : '',
77
+ })
78
+ }
79
+ const msgError = ref<UI_I_NotifyBodyMessage>({
80
+ status: 'error',
81
+ title: localization.value.error,
82
+ desc: '',
83
+ })
84
+ const handleErrors = (error: Ref<API_UI_I_Error>): void => {
85
+ if (error.value.data?.error_message) {
86
+ msgError.value.desc = error.value.data?.error_message
87
+ showNotification(msgError.value)
88
+ }
89
+ }
90
+ const onHide = (): void => {
91
+ emits('hide')
92
+ }
93
+ const onSubmit = async (data: UI_I_FeedbackForm): Promise<void> => {
94
+ onHide()
95
+ const isValid = await handleRequest(data)
96
+
97
+ if (isValid) showNotification(msgSuccess.value)
98
+ else showNotification(msgError.value)
99
+
100
+ $store.dispatch('main/A_GLOBAL_REFRESH', null)
101
+ }
102
+ </script>
103
+
104
+ <style scoped lang="scss"></style>
@@ -0,0 +1,63 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <common-feedback
4
+ width="576px"
5
+ :show="props.isShowFeedback"
6
+ :title="props.title"
7
+ @hide="emits('hide')"
8
+ @submit="emits('submit', $event)"
9
+ />
10
+ </Teleport>
11
+ </template>
12
+
13
+ <script setup lang="ts">
14
+ import type { UI_I_FeedbackForm } from '~/components/common/feedback/lib/models/interfaces'
15
+
16
+ const props = defineProps<{
17
+ isShowFeedback: boolean
18
+ title: string
19
+ }>()
20
+
21
+ const emits = defineEmits<{
22
+ (event: 'hide'): void
23
+ (event: 'submit', value: UI_I_FeedbackForm): void
24
+ }>()
25
+ </script>
26
+
27
+ <style lang="scss">
28
+ :root {
29
+ --description-color: #414b57;
30
+ --link-visited-color: #5659b8;
31
+ }
32
+
33
+ :root.dark-theme {
34
+ --description-color: #adbbc4;
35
+ --link-visited-color: #49afd9;
36
+ }
37
+
38
+ .feedback {
39
+ width: 60px;
40
+ height: 60px;
41
+ display: flex;
42
+ flex-direction: column;
43
+ justify-content: center;
44
+ align-items: center;
45
+ fill: #fafafa;
46
+
47
+ &-icon {
48
+ width: 24px;
49
+ height: 24px;
50
+ opacity: 0.65;
51
+ cursor: pointer;
52
+ }
53
+ &-icon:hover {
54
+ opacity: 1;
55
+ }
56
+ }
57
+ .about-vsphere-dialog-legal-section {
58
+ color: var(--description-color);
59
+ a {
60
+ color: var(--link-visited-color);
61
+ }
62
+ }
63
+ </style>
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <div class="tid-control-bar-feedback-button feedback">
3
+ <atoms-the-icon2
4
+ data-id="feedback-icon"
5
+ class="feedback-icon"
6
+ name="happy-face"
7
+ @click="emits('show')"
8
+ />
9
+ </div>
10
+
11
+ <Teleport to="body">
12
+ <common-feedback
13
+ width="576px"
14
+ :show="props.isShowFeedback"
15
+ :title="props.title"
16
+ @hide="emits('hide')"
17
+ @submit="emits('submit', $event)"
18
+ />
19
+ </Teleport>
20
+ </template>
21
+
22
+ <script setup lang="ts">
23
+ import type { UI_I_FeedbackForm } from '~/components/common/feedback/lib/models/interfaces'
24
+
25
+ const props = defineProps<{
26
+ isShowFeedback: boolean
27
+ title: string
28
+ }>()
29
+
30
+ const emits = defineEmits<{
31
+ (event: 'show'): void
32
+ (event: 'hide'): void
33
+ (event: 'submit', value: UI_I_FeedbackForm): void
34
+ }>()
35
+ </script>
36
+
37
+ <style lang="scss">
38
+ :root {
39
+ --description-color: #414b57;
40
+ --link-visited-color: #5659b8;
41
+ }
42
+
43
+ :root.dark-theme {
44
+ --description-color: #adbbc4;
45
+ --link-visited-color: #49afd9;
46
+ }
47
+
48
+ .feedback {
49
+ width: 60px;
50
+ height: 60px;
51
+ display: flex;
52
+ flex-direction: column;
53
+ justify-content: center;
54
+ align-items: center;
55
+ fill: #fafafa;
56
+
57
+ &-icon {
58
+ width: 24px;
59
+ height: 24px;
60
+ opacity: 0.65;
61
+ cursor: pointer;
62
+ }
63
+ &-icon:hover {
64
+ opacity: 1;
65
+ }
66
+ }
67
+ .about-vsphere-dialog-legal-section {
68
+ color: var(--description-color);
69
+ a {
70
+ color: var(--link-visited-color);
71
+ }
72
+ }
73
+ </style>
@@ -0,0 +1,110 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <atoms-modal
4
+ width="864px"
5
+ :show="true"
6
+ :title="`${brandName}® ${props.projectName}`"
7
+ test-id="about-modal"
8
+ >
9
+ <template #modalHeader>
10
+ <div class="flex-align-center">
11
+ <h3 class="modal-title">{{ brandName }}® {{ props.projectName }}</h3>
12
+ <span class="separator" />
13
+ <h4 class="secondary-title">
14
+ {{ props.projectName }} Web Client, version: {{ version }}
15
+ </h4>
16
+ <span
17
+ v-if="props.isBetaVersion"
18
+ class="beta-version badge badge-info"
19
+ >{{ localization.beta }}</span
20
+ >
21
+ <span v-else-if="isDev" class="beta-version badge badge-info"
22
+ >Dev</span
23
+ >
24
+ </div>
25
+ <button id="about-modal-button-close" class="close">
26
+ <atoms-the-icon
27
+ data-id="about-modal-button-close-icon"
28
+ class="close-icon"
29
+ name="close"
30
+ @click="() => emits('hide')"
31
+ />
32
+ </button>
33
+ </template>
34
+
35
+ <template #modalBody>
36
+ <div class="about-vsphere-dialog-legal-section">
37
+ <p>{{ aboutHeadingText }}</p>
38
+ <p>{{ localization.aboutSubtitle }}</p>
39
+ </div>
40
+
41
+ <div class="about-vsphere-dialog-legal-section description">
42
+ {{ aboutDesc1 }}
43
+ (<a
44
+ id="about-description-link"
45
+ data-id="about-description-link"
46
+ :href="url"
47
+ target="_blank"
48
+ >{{ url }}</a
49
+ >){{ aboutDesc2 }}
50
+ </div>
51
+ </template>
52
+
53
+ <template #modalFooter>
54
+ <span></span>
55
+ </template>
56
+ </atoms-modal>
57
+ </Teleport>
58
+ </template>
59
+
60
+ <script lang="ts" setup>
61
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
62
+
63
+ const props = defineProps<{
64
+ version: string
65
+ isBetaVersion: boolean
66
+ isDev: boolean
67
+ projectName: string
68
+ }>()
69
+
70
+ const emits = defineEmits<{
71
+ (event: 'hide'): void
72
+ }>()
73
+
74
+ const config = useRuntimeConfig()
75
+
76
+ const brandName = computed<string>(
77
+ () => config.public[`TRADEMARK_${useEnvLanguage()}`]
78
+ )
79
+ const companyName = computed<string>(
80
+ () => config.public[`COMPANY_NAME_${useEnvLanguage()}`]
81
+ )
82
+ const aboutHeadingText = computed<string>(() =>
83
+ localization.value.aboutHeading.replaceAll('{companyName}', companyName.value)
84
+ )
85
+ const aboutDesc1 = computed<string>(() =>
86
+ localization.value.aboutDesc1
87
+ .replaceAll('{companyName}', companyName.value)
88
+ .replaceAll('{trademark}', brandName.value)
89
+ )
90
+ const aboutDesc2 = computed<string>(() =>
91
+ localization.value.aboutDesc2
92
+ .replaceAll('{companyName}', companyName.value)
93
+ .replaceAll('{trademark}', brandName.value)
94
+ )
95
+
96
+ const localization = computed<UI_I_Localization>(() => useLocal())
97
+
98
+ const url = ref<string>('https://iridium-soft.com/')
99
+ </script>
100
+
101
+ <style lang="scss" scoped>
102
+ .modal-title {
103
+ color: var(--main-color-mode);
104
+ }
105
+ .description {
106
+ padding-top: 10px;
107
+ font-size: 13px;
108
+ line-height: 19px;
109
+ }
110
+ </style>
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <common-layout-the-header-help-menu-help-menu-new
3
+ v-if="isNewView"
4
+ @select-dropdown="onSelectDropdown"
5
+ />
6
+ <common-layout-the-header-help-menu-help-menu-old
7
+ v-else
8
+ @select-dropdown="onSelectDropdown"
9
+ />
10
+
11
+ <common-layout-the-header-help-menu-about
12
+ v-if="isShowAbout"
13
+ :version="version"
14
+ :is-beta-version="isBeta"
15
+ :is-dev="isDev"
16
+ :project-name="props.projectName"
17
+ @hide="isShowAbout = false"
18
+ />
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ const props = defineProps<{
23
+ projectName: string
24
+ }>()
25
+
26
+ const { $store }: any = useNuxtApp()
27
+ const { version, isBeta, isDev } = useAppVersion()
28
+
29
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
30
+
31
+ const isShowAbout = ref<boolean>(false)
32
+
33
+ const onSelectDropdown = (value: string): void => {
34
+ switch (value) {
35
+ case 'help':
36
+ navigateTo('/help')
37
+ break
38
+ case 'about':
39
+ isShowAbout.value = true
40
+ break
41
+ }
42
+ }
43
+ </script>
44
+
45
+ <style scoped lang="scss"></style>