bfg-common 1.0.82 → 1.0.84

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.
@@ -2031,5 +2031,10 @@
2031
2031
  "stormSharedStorage": "Агульны шторм",
2032
2032
  "localStorageHelpDesc": "Дадзеныя захоўваюцца на лакальнай файлавай сістэме хаста.",
2033
2033
  "stormSharedStorageHelpDesc": "Падзялянае сховішча Шторм павінна быць загадзя разгорнута на выдзеленых серверах. Забяспечваецца падзяляны доступ хастоў да сховішча Шторм.",
2034
- "nfsHelpDesc": "Сховішча NFS з'яўляецца сеткавай файлавай сістэмай. Падтрымліваюцца версіі NFS 4.1 і 4.2"
2034
+ "nfsHelpDesc": "Сховішча NFS з'яўляецца сеткавай файлавай сістэмай. Падтрымліваюцца версіі NFS 4.1 і 4.2",
2035
+ "storageDrsAutomation": "Аўтаматызацыя DRS захоўвання",
2036
+ "storageDrsRuntimeSettings": "Налады выканання DRS захоўвання",
2037
+ "selectClustersAndHosts": "Выберыце Кластары і хасты",
2038
+ "selectDatastores": "Выберыце Datastores",
2039
+ "nameCannotBeBlank": "Імя не можа быць пустым"
2035
2040
  }
@@ -2031,5 +2031,13 @@
2031
2031
  "stormSharedStorage": "Shared Storm",
2032
2032
  "localStorageHelpDesc": "The data is stored on the local file system of the host.",
2033
2033
  "stormSharedStorageHelpDesc": "Storm shared storage must be pre-deployed on dedicated servers. Shared access of hosts to Storm storage is provided.",
2034
- "nfsHelpDesc": "NFS storage is a network file system. NFS versions 4.1 and 4.2 are supported"
2034
+ "nfsHelpDesc": "NFS storage is a network file system. NFS versions 4.1 and 4.2 are supported",
2035
+ "storageDrsAutomation": "Storage DRS Automation",
2036
+ "storageDrsRuntimeSettings": "Storage DRS Runtime Settings",
2037
+ "selectClustersAndHosts": "Select Clusters and Hosts",
2038
+ "selectDatastores": "Select Datastores",
2039
+ "nameCannotBeBlank": "Name cannot be blank",
2040
+ "turnOnStorageDrs": "Turn ON Storage DRS",
2041
+ "storageDrsEnableDesc1": "{trademark} Storage DRS enables vCenter Server to manage datastores as an aggregate pool of storage resources.",
2042
+ "storageDrsEnableDesc2": "{trademark} Storage DRS also enables vCenter Server to manage the assignment of virtual machines to datastores, suggesting placement when virtual machines are created, migrated or cloned, and migrating running virtual machines to balance load and enforce placement rules."
2035
2043
  }
@@ -2031,5 +2031,13 @@
2031
2031
  "stormSharedStorage": "Համօգտագործվող փոթորիկ",
2032
2032
  "localStorageHelpDesc": "Տվյալները պահվում են տեղական հյուրընկալող ֆայլային համակարգում:",
2033
2033
  "stormSharedStorageHelpDesc": "Համօգտագործվող Storm Storage-ը պետք է նախապես տեղակայվի նվիրված սերվերների վրա: Ապահովում է հյուրընկալողների համօգտագործվող մուտքը Storm պահեստ:",
2034
- "nfsHelpDesc": "NFS պահեստը ցանցային ֆայլային համակարգ է: Աջակցվում են NFS 4.1 և 4.2 տարբերակները"
2034
+ "nfsHelpDesc": "NFS պահեստը ցանցային ֆայլային համակարգ է: Աջակցվում են NFS 4.1 և 4.2 տարբերակները",
2035
+ "storageDrsAutomation": "Պահպանման DRS ավտոմատացում",
2036
+ "storageDrsRuntimeSettings": "Պահպանման DRS Գործարկման ժամանակի կարգավորումներ",
2037
+ "selectClustersAndHosts": "Ընտրեք Կլաստերներ և հյուրընկալողներ",
2038
+ "selectDatastores": "Ընտրեք տվյալների պահեստներ",
2039
+ "nameCannotBeBlank": "Անունը չի կարող դատարկ լինել",
2040
+ "turnOnStorageDrs": "Միացնել Storage DRS-ը",
2041
+ "storageDrsEnableDesc1": "{trademark} Storage DRS-ը vCenter Server-ին հնարավորություն է տալիս կառավարել տվյալների պահեստները որպես պահեստային ռեսուրսների համախառն լողավազան:",
2042
+ "storageDrsEnableDesc2": "{trademark} Storage DRS-ը նաև հնարավորություն է տալիս vCenter Server-ին կառավարել վիրտուալ մեքենաների վերագրումը տվյալների պահեստներին, առաջարկելով տեղադրում, երբ վիրտուալ մեքենաները ստեղծվում են, տեղափոխվում կամ կլոնավորվում են, ինչպես նաև տեղափոխում են գործող վիրտուալ մեքենաներ՝ բեռը հավասարակշռելու և տեղադրման կանոնները կիրառելու համար:"
2035
2043
  }
@@ -2031,5 +2031,13 @@
2031
2031
  "stormSharedStorage": "Ортақ дауыл",
2032
2032
  "localStorageHelpDesc": "Деректер жергілікті хост файлдық жүйесінде сақталады.",
2033
2033
  "stormSharedStorageHelpDesc": "Ортақ сақтау дауыл арнайы серверлерде алдын ала орналастырылуы керек. Хосттардың дауыл қоймасына ортақ қол жетімділігі қамтамасыз етіледі.",
2034
- "nfsHelpDesc": "NFS жады-бұл желілік файлдық жүйе. NFS 4.1 және 4.2 нұсқаларына қолдау көрсетіледі"
2034
+ "nfsHelpDesc": "NFS жады-бұл желілік файлдық жүйе. NFS 4.1 және 4.2 нұсқаларына қолдау көрсетіледі",
2035
+ "storageDrsAutomation": "Storage DRS Automation",
2036
+ "storageDrsRuntimeSettings": "Storage DRS Runtime параметрлері",
2037
+ "selectClustersAndHosts": "Кластерлер мен хосттарды таңдаңыз",
2038
+ "selectDatastores": "Деректер қоймаларын таңдаңыз",
2039
+ "nameCannotBeBlank": "Аты бос болмауы керек",
2040
+ "turnOnStorageDrs": "Storage DRS ҚОСУ",
2041
+ "storageDrsEnableDesc1": "{trademark} Storage DRS vCenter серверіне деректер қоймаларын сақтау ресурстарының жиынтық пулы ретінде басқаруға мүмкіндік береді.",
2042
+ "storageDrsEnableDesc2": "{trademark} Storage DRS сонымен қатар vCenter серверіне виртуалды машиналарды деректер қоймаларына тағайындауды басқаруға мүмкіндік береді, виртуалды машиналар жасалған, тасымалданған немесе клондалған кезде орналастыруды ұсынады және жүктемені теңестіру және орналастыру ережелерін орындау үшін іске қосылған виртуалды машиналарды тасымалдайды."
2035
2043
  }
@@ -2031,5 +2031,13 @@
2031
2031
  "stormSharedStorage": "Разделяемое хранилище Шторм",
2032
2032
  "localStorageHelpDesc": "Данные хранятся на локальной файловой системе хоста.",
2033
2033
  "stormSharedStorageHelpDesc": "Разделяемое хранилище Шторм должно быть заранее развернуто на выделенных серверах. Обеспечивается разделяемый доступ хостов к хранилищу Шторм.",
2034
- "nfsHelpDesc": "Хранилище NFS является сетевой файловой системой. Поддерживаются версии NFS 4.1 и 4.2"
2034
+ "nfsHelpDesc": "Хранилище NFS является сетевой файловой системой. Поддерживаются версии NFS 4.1 и 4.2",
2035
+ "storageDrsAutomation": "Автоматизация хранения данных DRS",
2036
+ "storageDrsRuntimeSettings": "Настройки выполнения Storage DRS",
2037
+ "selectClustersAndHosts": "Выберите кластеры и хосты",
2038
+ "selectDatastores": "Выберите хранилища данных",
2039
+ "nameCannotBeBlank": "Имя не может быть пустым",
2040
+ "turnOnStorageDrs": "ВКЛЮЧИТЬ Storage DRS",
2041
+ "storageDrsEnableDesc1": "{trademark} Storage DRS позволяет vCenter Server управлять хранилищами данных как совокупным пулом ресурсов хранения.",
2042
+ "storageDrsEnableDesc2": "{trademark} Storage DRS также позволяет vCenter Server управлять назначением виртуальных машин хранилищам данных, предлагая размещение при создании, переносе или клонировании виртуальных машин, а также миграцию работающих виртуальных машин для балансировки нагрузки и соблюдения правил размещения."
2035
2043
  }
@@ -2031,5 +2031,13 @@
2031
2031
  "stormSharedStorage": "共享风暴",
2032
2032
  "localStorageHelpDesc": "数据存储在主机的本地文件系统中。",
2033
2033
  "stormSharedStorageHelpDesc": "Storm共享存储必须预先部署在专用服务器上。 提供对 Storm 存储的共享主机访问。",
2034
- "nfsHelpDesc": "NFS 存储是一种网络文件系统。 支持 NFS 版本 4.1 和 4.2"
2034
+ "nfsHelpDesc": "NFS 存储是一种网络文件系统。 支持 NFS 版本 4.1 和 4.2",
2035
+ "storageDrsAutomation": "存储 DRS 自动化",
2036
+ "storageDrsRuntimeSettings": "存储 DRS 运行时设置",
2037
+ "selectClustersAndHosts": "选择集群和主机",
2038
+ "selectDatastores": "选择数据存储",
2039
+ "nameCannotBeBlank": "名称不能为空",
2040
+ "turnOnStorageDrs": "打开存储 DRS",
2041
+ "storageDrsEnableDesc1": "{trademark} Storage DRS 使 vCenter Server 能够将数据存储作为存储资源聚合池进行管理。",
2042
+ "storageDrsEnableDesc2": "{trademark} Storage DRS 还使 vCenter Server 能够管理虚拟机到数据存储的分配,在创建、迁移或克隆虚拟机时提出放置建议,并迁移正在运行的虚拟机以平衡负载并强制执行放置规则。"
2035
2043
  }
@@ -307,6 +307,56 @@
307
307
  <path opacity="0" d="M0 0h36v36H0z" />
308
308
  </svg>
309
309
  </template>
310
+ <template v-else-if="props.name === 'vsphere-icon-device'">
311
+ <svg
312
+ xmlns="http://www.w3.org/2000/svg"
313
+ fill="#0091da"
314
+ width="38"
315
+ height="38"
316
+ viewBox="-1 -1 38 38"
317
+ y="380"
318
+ >
319
+ <path fill="none" d="M0 0h36v36H0z" />
320
+ <path d="M8 12h4v8H8zM16 12h4v8h-4zM24 12h4v8h-4z" />
321
+ <path
322
+ d="M8 28H4V16H2v12a2 2 0 002 2h6v-4h2v-2H8zM32 6H4a2 2 0 00-2 2v4h2V8h28v4h2V8a2 2 0 00-2-2zM32 28H12v2h20a2 2 0 002-2V16h-2z"
323
+ />
324
+ </svg>
325
+ </template>
326
+ <template v-else-if="props.name === 'vsphere-icon-network'">
327
+ <svg
328
+ xmlns="http://www.w3.org/2000/svg"
329
+ fill="#565656"
330
+ width="38"
331
+ height="38"
332
+ viewBox="-1 -1 38 38"
333
+ y="152"
334
+ >
335
+ <path
336
+ d="M27 32H9a1 1 0 000 2h18a1 1 0 000-2zm-9-1.91a14 14 0 10-14-14 14 14 0 0014 14zm0-2a12 12 0 01-6.54-1.95 3 3 0 00.42 0A2.26 2.26 0 0014 24.8a18 18 0 007.67-3.63 2.22 2.22 0 00.82.16 2.26 2.26 0 001.75-.84 17.16 17.16 0 002.29.44 17.92 17.92 0 002.31.15h.1A12 12 0 0118 28.09zm-3.09-18a16.76 16.76 0 017.48-.77 17.27 17.27 0 013.93 1 15.66 15.66 0 01-2.9 6.71 2.23 2.23 0 00-1-.23 2.27 2.27 0 00-1.62.68 16 16 0 01-6.35-6 2.24 2.24 0 00.43-1.32zm14.24 1.59a11.87 11.87 0 01.85 4.41 12 12 0 01-.49 3.35 16.59 16.59 0 01-2.82-.1 18.39 18.39 0 01-2-.37 2.57 2.57 0 00-.16-.75 17.4 17.4 0 003.3-7.22q.68.33 1.32.72zM18 4.09a11.94 11.94 0 018.57 3.61v1a18.38 18.38 0 00-12.22-.07 2.28 2.28 0 00-1.35-.7 14.72 14.72 0 01-.47-2.5A12 12 0 0118 4.09zm-7 2.28a15.48 15.48 0 00.42 1.91 2.25 2.25 0 00-1 1.88 2.21 2.21 0 000 .37 17.92 17.92 0 00-4.3 3.9A12 12 0 0111 6.37zm.25 5.54a2.27 2.27 0 001.41.51 2.63 2.63 0 00.49-.06A17.74 17.74 0 0020.2 19v.1a2.32 2.32 0 00.25 1A16.52 16.52 0 0114 23.15a2.24 2.24 0 00-4.33.43c-.36 0-.71 0-1.07-.07a11.94 11.94 0 01-2.52-6.16 16 16 0 015.16-5.44z"
337
+ />
338
+ <path fill="none" d="M0 0h36v36H0z" />
339
+ </svg>
340
+ </template>
341
+ <template v-else-if="props.name === 'vsphere-icon-switch'">
342
+ <svg
343
+ xmlns="http://www.w3.org/2000/svg"
344
+ fill="#565656"
345
+ width="38"
346
+ height="38"
347
+ viewBox="-1 -1 38 38"
348
+ y="722"
349
+ >
350
+ <g>
351
+ <path
352
+ d="M12 8h2v2h-2zM16 8h2v2h-2zM20 8h2v2h-2zM24 8h2v2h-2zM16 12h2v2h-2zM16 16h2v2h-2zM16 20h2v2h-2zM16 24h2v2h-2zM12 24h2v2h-2zM26 2H10a2 2 0 00-2 2v2h2V4h16v2h2V4a2 2 0 00-2-2zM8 12h2v10H8z"
353
+ />
354
+ <path
355
+ d="M26 12v20H10v-4H8v4a2 2 0 002 2h16a2 2 0 002-2V12zM8 8H3a1 1 0 000 2h5zM28 8h4.93a1 1 0 010 2H28zM8 24H3a1 1 0 000 2h5z"
356
+ />
357
+ </g>
358
+ </svg>
359
+ </template>
310
360
  </template>
311
361
 
312
362
  <script setup lang="ts">
@@ -1,234 +1,236 @@
1
- <template>
2
- <div v-if="props.show" class="modal clr-wizard wizard-xl">
3
- <div class="modal-dialog modal-xl relative">
4
- <div class="modal-content-wrapper">
5
- <nav class="modal-nav clr-wizard-stepnav-wrapper">
6
- <h1 class="clr-wizard-title">
7
- {{ props.title }}
8
- </h1>
9
- <atoms-step-vertical-step
10
- :test-id="props.testId"
11
- :items="props.stepItems"
12
- :step-position="props.stepPosition"
13
- @change="changeStep"
14
- />
15
- </nav>
16
- <div class="modal-content">
17
- <div class="modal-header--accessible">
18
- <div class="modal-title-wrapper">
19
- <h2 class="modal-title">
20
- <span class="modal-title-text">{{ heading }}</span>
21
- </h2>
22
- </div>
23
- <button
24
- :id="`${props.testId}-close-icon`"
25
- class="close"
26
- @click="hide"
27
- >
28
- <atoms-the-icon class="close-icon" name="close" />
29
- </button>
30
- </div>
31
- <div class="modal-body">
32
- <slot name="modalBody" />
33
- </div>
34
- <div class="modal-footer">
35
- <slot name="modalFooter">
36
- <button
37
- :id="`${props.testId}-cancel-button`"
38
- class="btn btn-link"
39
- @click="hide"
40
- >
41
- {{ localization.cancel }}
42
- </button>
43
- <button
44
- v-show="props.stepPosition > 0"
45
- :id="`${props.testId}-back-button`"
46
- class="btn btn-outline"
47
- @click="back"
48
- >
49
- {{ localization.back }}
50
- </button>
51
- <button
52
- v-if="props.stepPosition === props.stepItems.length - 1"
53
- :id="`${props.testId}-finish-button`"
54
- class="btn btn-success"
55
- @click="finish"
56
- >
57
- {{ localization.finish }}
58
- </button>
59
- <button
60
- v-else
61
- :id="`${props.testId}-next-button`"
62
- class="btn btn-primary"
63
- @click="next"
64
- >
65
- {{ localization.next }}
66
- </button>
67
- </slot>
68
- </div>
69
- </div>
70
- </div>
71
-
72
- <div v-show="props.loading" class="loader">
73
- <i class="fa clr-tree-node-caret-icon spinner spinner" />
74
- </div>
75
- </div>
76
- <div class="modal-backdrop" />
77
- </div>
78
- </template>
79
-
80
- <script setup lang="ts">
81
- import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
82
-
83
- const props = withDefaults(
84
- defineProps<{
85
- testId?: string
86
- show: boolean
87
- title: string
88
- secondTitle?: string
89
- stepItems: UI_I_VerticalStepItem[]
90
- stepPosition: number
91
- loading?: boolean
92
- }>(),
93
- { testId: 'ui-modal-by-steps' }
94
- )
95
- const emits = defineEmits<{
96
- (event: 'finish'): void
97
- (event: 'next'): void
98
- (event: 'back'): void
99
- (event: 'hide'): void
100
- (event: 'change-step', num: number): void
101
- }>()
102
-
103
- const localization = computed(() => useLocal())
104
-
105
- const heading = ref<string | null>(null)
106
-
107
- const hide = (): void => {
108
- emits('hide')
109
- }
110
- const finish = (): void => {
111
- emits('finish')
112
- }
113
- const next = (): void => {
114
- emits('next')
115
- }
116
- const back = (): void => {
117
- emits('back')
118
- }
119
- const changeStep = (key: number): void => {
120
- emits('change-step', key)
121
- }
122
-
123
- watch(
124
- () => props.stepPosition,
125
- (value) => {
126
- const { stepItems, secondTitle } = props
127
- if (secondTitle) {
128
- heading.value = secondTitle
129
- return
130
- }
131
-
132
- heading.value = stepItems[value].text
133
- },
134
- { immediate: true }
135
- )
136
- </script>
137
-
138
- <style scoped lang="scss">
139
- .modal {
140
- position: fixed;
141
- top: 0;
142
- bottom: 0;
143
- right: 0;
144
- left: 0;
145
- z-index: 1050;
146
- display: flex;
147
- flex-direction: column;
148
- justify-content: center;
149
- align-items: center;
150
- padding: 48px;
151
- overflow-y: auto;
152
-
153
- .modal-nav {
154
- background-color: var(--block-view-bg-color4);
155
- .clr-wizard-title {
156
- color: var(--main-color-mode);
157
- font-size: 22px;
158
- padding: 24px 12px 24px 24px;
159
- //line-height: 1.2rem;
160
- }
161
- }
162
-
163
- .modal-content-wrapper {
164
- position: relative;
165
- -webkit-animation-name: animateTop;
166
- -webkit-animation-duration: 0.4s;
167
- animation-name: animateTop;
168
- animation-duration: 0.4s;
169
- }
170
-
171
- .modal-content {
172
- background-color: var(--modal-bg-color);
173
-
174
- .modal-header--accessible {
175
- display: flex;
176
- justify-content: space-between;
177
- align-items: flex-start;
178
- width: 100%;
179
- padding: 24px 19px 6px 24px;
180
-
181
- .modal-title-text {
182
- color: var(--main-color-mode);
183
- font-size: 22px;
184
- }
185
-
186
- .close-icon {
187
- fill: var(--close-icon);
188
- width: 24px;
189
- height: 24px;
190
- }
191
- }
192
-
193
- .modal-body {
194
- padding: 0 3px;
195
- }
196
-
197
- .modal-footer {
198
- display: flex;
199
- justify-content: flex-end;
200
- padding: 24px;
201
- flex: unset;
202
- min-height: 0;
203
- height: auto;
204
- }
205
- }
206
-
207
- .loader {
208
- position: absolute;
209
- z-index: 1000;
210
- left: 0;
211
- right: 0;
212
- bottom: 0;
213
- top: 0;
214
- display: flex;
215
- align-items: center;
216
- justify-content: center;
217
- background-color: rgba(0, 0, 0, 0.3);
218
-
219
- .spinner {
220
- left: unset;
221
- }
222
- }
223
-
224
- .modal-backdrop {
225
- opacity: 1;
226
- background-color: rgba(0, 0, 0, 0.6);
227
- }
228
- }
229
- h1,
230
- h2 {
231
- // просмотреть если нигде не ломается переместит глобально
232
- line-height: inherit;
233
- }
234
- </style>
1
+ <template>
2
+ <div v-if="props.show" class="modal clr-wizard wizard-xl">
3
+ <div class="modal-dialog modal-xl relative">
4
+ <div class="modal-content-wrapper">
5
+ <nav class="modal-nav clr-wizard-stepnav-wrapper">
6
+ <h1 class="clr-wizard-title">
7
+ {{ props.title }}
8
+ </h1>
9
+ <atoms-step-vertical-step
10
+ :test-id="props.testId"
11
+ :items="props.stepItems"
12
+ :step-position="props.stepPosition"
13
+ @change="changeStep"
14
+ />
15
+ </nav>
16
+ <div class="modal-content">
17
+ <div class="modal-header--accessible">
18
+ <slot name="contentHeading">
19
+ <div class="modal-title-wrapper">
20
+ <h2 class="modal-title">
21
+ <span class="modal-title-text">{{ heading }}</span>
22
+ </h2>
23
+ </div>
24
+ </slot>
25
+ <button
26
+ :id="`${props.testId}-close-icon`"
27
+ class="close"
28
+ @click="hide"
29
+ >
30
+ <atoms-the-icon class="close-icon" name="close" />
31
+ </button>
32
+ </div>
33
+ <div class="modal-body">
34
+ <slot name="modalBody" :title="heading" />
35
+ </div>
36
+ <div class="modal-footer">
37
+ <slot name="modalFooter">
38
+ <button
39
+ :id="`${props.testId}-cancel-button`"
40
+ class="btn btn-link"
41
+ @click="hide"
42
+ >
43
+ {{ localization.cancel }}
44
+ </button>
45
+ <button
46
+ v-show="props.stepPosition > 0"
47
+ :id="`${props.testId}-back-button`"
48
+ class="btn btn-outline"
49
+ @click="back"
50
+ >
51
+ {{ localization.back }}
52
+ </button>
53
+ <button
54
+ v-if="props.stepPosition === props.stepItems.length - 1"
55
+ :id="`${props.testId}-finish-button`"
56
+ class="btn btn-success"
57
+ @click="finish"
58
+ >
59
+ {{ localization.finish }}
60
+ </button>
61
+ <button
62
+ v-else
63
+ :id="`${props.testId}-next-button`"
64
+ class="btn btn-primary"
65
+ @click="next"
66
+ >
67
+ {{ localization.next }}
68
+ </button>
69
+ </slot>
70
+ </div>
71
+ </div>
72
+ </div>
73
+
74
+ <div v-show="props.loading" class="loader">
75
+ <i class="fa clr-tree-node-caret-icon spinner spinner" />
76
+ </div>
77
+ </div>
78
+ <div class="modal-backdrop" />
79
+ </div>
80
+ </template>
81
+
82
+ <script setup lang="ts">
83
+ import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
84
+
85
+ const props = withDefaults(
86
+ defineProps<{
87
+ testId?: string
88
+ show: boolean
89
+ title: string
90
+ secondTitle?: string
91
+ stepItems: UI_I_VerticalStepItem[]
92
+ stepPosition: number
93
+ loading?: boolean
94
+ }>(),
95
+ { testId: 'ui-modal-by-steps' }
96
+ )
97
+ const emits = defineEmits<{
98
+ (event: 'finish'): void
99
+ (event: 'next'): void
100
+ (event: 'back'): void
101
+ (event: 'hide'): void
102
+ (event: 'change-step', num: number): void
103
+ }>()
104
+
105
+ const localization = computed(() => useLocal())
106
+
107
+ const heading = ref<string | null>(null)
108
+
109
+ const hide = (): void => {
110
+ emits('hide')
111
+ }
112
+ const finish = (): void => {
113
+ emits('finish')
114
+ }
115
+ const next = (): void => {
116
+ emits('next')
117
+ }
118
+ const back = (): void => {
119
+ emits('back')
120
+ }
121
+ const changeStep = (key: number): void => {
122
+ emits('change-step', key)
123
+ }
124
+
125
+ watch(
126
+ () => props.stepPosition,
127
+ (value) => {
128
+ const { stepItems, secondTitle } = props
129
+ if (secondTitle) {
130
+ heading.value = secondTitle
131
+ return
132
+ }
133
+
134
+ heading.value = stepItems[value].text
135
+ },
136
+ { immediate: true }
137
+ )
138
+ </script>
139
+
140
+ <style scoped lang="scss">
141
+ .modal {
142
+ position: fixed;
143
+ top: 0;
144
+ bottom: 0;
145
+ right: 0;
146
+ left: 0;
147
+ z-index: 1050;
148
+ display: flex;
149
+ flex-direction: column;
150
+ justify-content: center;
151
+ align-items: center;
152
+ padding: 48px;
153
+ overflow-y: auto;
154
+
155
+ .modal-nav {
156
+ background-color: var(--block-view-bg-color4);
157
+ .clr-wizard-title {
158
+ color: var(--main-color-mode);
159
+ font-size: 22px;
160
+ padding: 24px 12px 24px 24px;
161
+ //line-height: 1.2rem;
162
+ }
163
+ }
164
+
165
+ .modal-content-wrapper {
166
+ position: relative;
167
+ -webkit-animation-name: animateTop;
168
+ -webkit-animation-duration: 0.4s;
169
+ animation-name: animateTop;
170
+ animation-duration: 0.4s;
171
+ }
172
+
173
+ .modal-content {
174
+ background-color: var(--modal-bg-color);
175
+
176
+ .modal-header--accessible {
177
+ display: flex;
178
+ justify-content: space-between;
179
+ align-items: flex-start;
180
+ width: 100%;
181
+ padding: 24px 19px 6px 24px;
182
+
183
+ .modal-title-text {
184
+ color: var(--main-color-mode);
185
+ font-size: 22px;
186
+ }
187
+
188
+ .close-icon {
189
+ fill: var(--close-icon);
190
+ width: 24px;
191
+ height: 24px;
192
+ }
193
+ }
194
+
195
+ .modal-body {
196
+ padding: 0 3px;
197
+ }
198
+
199
+ .modal-footer {
200
+ display: flex;
201
+ justify-content: flex-end;
202
+ padding: 24px;
203
+ flex: unset;
204
+ min-height: 0;
205
+ height: auto;
206
+ }
207
+ }
208
+
209
+ .loader {
210
+ position: absolute;
211
+ z-index: 1000;
212
+ left: 0;
213
+ right: 0;
214
+ bottom: 0;
215
+ top: 0;
216
+ display: flex;
217
+ align-items: center;
218
+ justify-content: center;
219
+ background-color: rgba(0, 0, 0, 0.3);
220
+
221
+ .spinner {
222
+ left: unset;
223
+ }
224
+ }
225
+
226
+ .modal-backdrop {
227
+ opacity: 1;
228
+ background-color: rgba(0, 0, 0, 0.6);
229
+ }
230
+ }
231
+ h1,
232
+ h2 {
233
+ // просмотреть если нигде не ломается переместит глобально
234
+ line-height: inherit;
235
+ }
236
+ </style>
@@ -98,7 +98,7 @@
98
98
  />
99
99
  </span>
100
100
  </button>
101
- <div class="relative">
101
+ <div>
102
102
  <button
103
103
  v-if="item.hasFilter"
104
104
  :id="`${props.testId}-filter-icon-${key}`"
@@ -136,7 +136,13 @@
136
136
  !isShowHiddenInfo ||
137
137
  (isShowHiddenInfo && key === 0)
138
138
  "
139
- class="datagrid-column-separator"
139
+ :class="[
140
+ 'datagrid-column-separator',
141
+ {
142
+ 'double-arrow-separator':
143
+ key === 0 && props.withInfo,
144
+ },
145
+ ]"
140
146
  @mousedown="setGrab(key, $event)"
141
147
  >
142
148
  <button
@@ -160,16 +166,19 @@
160
166
  :class="[
161
167
  'datagrid-body-row datagrid-row animation',
162
168
  {
163
- 'datagrid-selected active': checkIsSelectedRow(
164
- item[0].id
165
- ),
169
+ 'datagrid-selected active':
170
+ !props.withInfo && checkIsSelectedRow(item[0].id),
171
+ 'datagrid-selected-info':
172
+ props.withInfo &&
173
+ isShowHiddenInfo &&
174
+ checkIsSelectedRow(item[0].id),
166
175
  },
167
176
  ]"
168
177
  >
169
178
  <div>
170
179
  <div
171
180
  class="datagrid-row-master datagrid-row-flex"
172
- @click="selectRowById(item[0].id)"
181
+ @click.prevent.stop="selectRowById(item[0].id)"
173
182
  >
174
183
  <div
175
184
  v-if="props.type"
@@ -244,12 +253,10 @@
244
253
  }"
245
254
  :class="[
246
255
  'datagrid-cell datagrid-fixed-width',
247
- `hidden-text-triangle-${item2.id}`,
248
256
  {
249
257
  'hidden-text-triangle':
250
258
  isShowHiddenInfo &&
251
- item2.key === 'col1' &&
252
- item2.data?.iconClassName === 'info',
259
+ item2.data?.name === 'hidden-text-triangle',
253
260
  },
254
261
  ]"
255
262
  >
@@ -270,6 +277,9 @@
270
277
  isShowHiddenInfo &&
271
278
  item2.id === selectedRow,
272
279
  }"
280
+ @click.prevent.stop="
281
+ doubleArrowClick(item2, item)
282
+ "
273
283
  >
274
284
  <atoms-the-icon
275
285
  v-if="item2.data?.name === 'doubleArrows'"
@@ -280,7 +290,6 @@
280
290
  isShowHiddenInfo &&
281
291
  item2.id === selectedRow,
282
292
  }"
283
- @click="doubleArrowClick(item2, item)"
284
293
  />
285
294
  </div>
286
295
  <span
@@ -510,22 +519,36 @@ const isShowInfo = computed(
510
519
  !showedInfoRow.value.data?.text &&
511
520
  isShowHiddenInfo.value
512
521
  )
513
- const doubleArrowClick = (item: UI_I_BodyItem, items: UI_I_BodyItem[]) => {
514
- // if (!isShowHiddenInfo.value) {
515
- // memoryWidth = columnsWidth.value[1][0]
516
- // // columnsWidth.value[1][0] = 'calc(100% - 48px)'
517
- // // min width of 1st column
518
- // // columnsWidth.value[1][1]
519
- // } else {
520
- // columnsWidth.value[1][0] = memoryWidth
521
- // }
522
+
523
+ const setShowedInfoData = (
524
+ item: UI_I_BodyItem | null,
525
+ items: UI_I_BodyItem[] | null,
526
+ reset: boolean
527
+ ): void => {
528
+ showedInfoRow.value = item
529
+ showedInfoCol.value = items
530
+
531
+ reset && (isShowHiddenInfo.value = false)
532
+ item && selectRowById(item.id)
533
+ reset && (isShowHiddenInfo.value = true)
534
+ }
535
+
536
+ const doubleArrowClick = (
537
+ item: UI_I_BodyItem,
538
+ items: UI_I_BodyItem[]
539
+ ): void => {
522
540
  if (!isShowHiddenInfo.value) {
523
- showedInfoRow.value = item
524
- showedInfoCol.value = items
541
+ setShowedInfoData(item, items)
525
542
  } else {
526
- showedInfoRow.value = null
527
- showedInfoCol.value = null
543
+ if (showedInfoRow.value.id !== item.id) {
544
+ setShowedInfoData(item, items, true)
545
+
546
+ return
547
+ } else {
548
+ setShowedInfoData(null, null)
549
+ }
528
550
  }
551
+
529
552
  isShowHiddenInfo.value = !isShowHiddenInfo.value
530
553
  }
531
554
 
@@ -539,7 +562,7 @@ watch(
539
562
  { immediate: true }
540
563
  )
541
564
  const selectRowById = (id: number | string): void => {
542
- if (props.offSelectByRow) return
565
+ if (props.offSelectByRow || isShowHiddenInfo.value) return
543
566
 
544
567
  if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
545
568
  const has = selectedRowLocal.value.includes(id)
@@ -791,6 +814,8 @@ watch(
791
814
  const grabColumn = ref<number>(-1)
792
815
  const grabStartX = ref<number>(0)
793
816
  const setGrab = (key: number, e: MouseEvent): void => {
817
+ if (props.withInfo && key === 0) return
818
+
794
819
  if (!isShowHiddenInfo.value) {
795
820
  grabColumn.value = key
796
821
  const currentWidth = parseInt(columnsWidth.value[grabColumn.value][0])
@@ -939,6 +964,12 @@ onUnmounted(() => {
939
964
  &::after {
940
965
  cursor: col-resize;
941
966
  }
967
+ &.double-arrow-separator .datagrid-column-handle {
968
+ cursor: unset;
969
+ }
970
+ &.double-arrow-separator::after {
971
+ cursor: unset;
972
+ }
942
973
  }
943
974
  }
944
975
 
@@ -959,6 +990,7 @@ onUnmounted(() => {
959
990
  background-color: var(--block-view-bg-color);
960
991
  border-bottom: 1px solid var(--global-border-color);
961
992
  padding: 6px 12px 5px;
993
+ position: relative;
962
994
  //flex: 1 1 auto;
963
995
 
964
996
  &:last-child {
@@ -1020,6 +1052,9 @@ onUnmounted(() => {
1020
1052
 
1021
1053
  .datagrid-filter-toggle {
1022
1054
  background: unset;
1055
+ position: absolute;
1056
+ right: 2px;
1057
+ top: calc(50% - 8px);
1023
1058
 
1024
1059
  .filter-icon {
1025
1060
  width: 16px;
@@ -1057,27 +1092,6 @@ onUnmounted(() => {
1057
1092
  border-bottom: 1px solid var(--global-border-color);
1058
1093
  position: relative;
1059
1094
  line-height: 1rem;
1060
-
1061
- &.hidden-text-triangle::after {
1062
- content: '';
1063
- position: absolute;
1064
- transform: rotate(225deg);
1065
- border-bottom: 15px solid transparent;
1066
- border-right: 15px solid var(--global-bg-color);
1067
- bottom: 26%;
1068
- right: -10px;
1069
- z-index: 1000;
1070
- }
1071
- &.hidden-text-triangle::before {
1072
- content: '';
1073
- transform: rotate(-135deg);
1074
- position: absolute;
1075
- border-bottom: 16px solid transparent;
1076
- border-right: 16px solid var(--global-border-color);
1077
- bottom: 23%;
1078
- right: -10px;
1079
- z-index: 999;
1080
- }
1081
1095
  }
1082
1096
 
1083
1097
  .datagrid-row-detail {
@@ -1090,6 +1104,21 @@ onUnmounted(() => {
1090
1104
  min-width: 38px;
1091
1105
  min-height: 28px;
1092
1106
  padding: 2px 12px 3px 12px;
1107
+ position: relative;
1108
+
1109
+ &:has(.double-arrow-wrap) {
1110
+ padding-left: 4px;
1111
+ }
1112
+
1113
+ &:has(.double-arrow-wrap)::after {
1114
+ content: '';
1115
+ width: 0.5px;
1116
+ height: calc(100% - 6px);
1117
+ position: absolute;
1118
+ right: 2px;
1119
+ top: 3px;
1120
+ background-color: var(--global-border-color);
1121
+ }
1093
1122
 
1094
1123
  &:last-child {
1095
1124
  flex: 1 1 auto;
@@ -1128,6 +1157,40 @@ onUnmounted(() => {
1128
1157
  }
1129
1158
  }
1130
1159
  }
1160
+
1161
+ &.datagrid-selected-info {
1162
+ width: 100%;
1163
+ min-width: max-content;
1164
+ border-top: none;
1165
+ color: var(--table-color);
1166
+ background-color: var(--block-view-bg-color);
1167
+
1168
+ .datagrid-cell {
1169
+ position: relative;
1170
+
1171
+ &.hidden-text-triangle::after {
1172
+ content: '';
1173
+ position: absolute;
1174
+ transform: rotate(225deg);
1175
+ border-bottom: 15px solid transparent;
1176
+ border-right: 15px solid var(--global-bg-color);
1177
+ bottom: 26%;
1178
+ right: -16px;
1179
+ z-index: 1000;
1180
+ }
1181
+
1182
+ &.hidden-text-triangle::before {
1183
+ content: '';
1184
+ transform: rotate(-135deg);
1185
+ position: absolute;
1186
+ border-bottom: 16px solid transparent;
1187
+ border-right: 16px solid var(--global-border-color);
1188
+ bottom: 23%;
1189
+ right: -17px;
1190
+ z-index: 999;
1191
+ }
1192
+ }
1193
+ }
1131
1194
  }
1132
1195
 
1133
1196
  .datagrid-row-sticky {
@@ -1351,7 +1414,7 @@ onUnmounted(() => {
1351
1414
  }
1352
1415
  }
1353
1416
  .double-arrow-width {
1354
- width: 47px;
1417
+ width: 25px;
1355
1418
  }
1356
1419
  .double-arrow-wrap {
1357
1420
  width: 30px;
@@ -30,11 +30,11 @@
30
30
  import type { UI_I_Localization } from '~/models/interfaces'
31
31
  import type { UI_T_ShowType } from '~/components/common/accordion/models/types'
32
32
  import type { UI_I_AccordionRecursion } from '~/components/common/accordion/models/interfaces'
33
- import type { UI_I_Navigation } from '~/components/common/content/navbar/left/models/interfaces'
33
+ import type { UI_I_ContentNavigation } from '~/components/common/content/navbar/left/models/interfaces'
34
34
  import { constructItems } from '~/components/common/content/navbar/left/utils/constructAccordion'
35
35
 
36
36
  const props = defineProps<{
37
- items: UI_I_Navigation[]
37
+ items: UI_I_ContentNavigation[] | null
38
38
  }>()
39
39
 
40
40
  const localization = computed<UI_I_Localization>(() => useLocal())
@@ -54,6 +54,8 @@ const accordionItems = ref<UI_I_AccordionRecursion[]>([])
54
54
  watch(
55
55
  () => props.items,
56
56
  (newValue) => {
57
+ if (newValue === null) return
58
+
57
59
  accordionItems.value = constructItems(newValue)
58
60
  },
59
61
  { deep: true, immediate: true }
@@ -1,5 +1,6 @@
1
- export interface UI_I_Navigation {
1
+ export interface UI_I_ContentNavigation {
2
2
  title: string
3
- children: UI_I_Navigation[]
3
+ children: UI_I_ContentNavigation[]
4
+ weight: number
4
5
  _path: string
5
6
  }
@@ -1,9 +1,9 @@
1
- import type { UI_I_Navigation } from '~/components/common/content/navbar/left/models/interfaces'
1
+ import type { UI_I_ContentNavigation } from '~/components/common/content/navbar/left/models/interfaces'
2
2
  import type { UI_I_AccordionRecursion } from '~/components/common/accordion/models/interfaces'
3
3
 
4
4
  export const constructItems = (
5
- items?: UI_I_Navigation[],
6
- parent?: UI_I_Navigation
5
+ items?: UI_I_ContentNavigation[],
6
+ parent?: UI_I_ContentNavigation
7
7
  ): UI_I_AccordionRecursion[] => {
8
8
  if (!items) return []
9
9
 
@@ -13,7 +13,7 @@ export const constructItems = (
13
13
  !parent || (item.title !== parent.title && item._path !== parent._path)
14
14
  )
15
15
  })
16
- .map((item: UI_I_Navigation): UI_I_AccordionRecursion => {
16
+ .map((item: UI_I_ContentNavigation): UI_I_AccordionRecursion => {
17
17
  const children = constructItems(item.children, item)
18
18
  return {
19
19
  children,
@@ -24,11 +24,11 @@
24
24
  </template>
25
25
 
26
26
  <script setup lang="ts">
27
- import type { UI_I_NavbarItem } from '~/components/common/content/navbar/right/models/interfaces'
27
+ import type { UI_I_ContentNavbarItem } from '~/components/common/content/navbar/right/models/interfaces'
28
28
 
29
29
  const props = defineProps<{
30
30
  title: string
31
- items: UI_I_NavbarItem[]
31
+ items: UI_I_ContentNavbarItem[]
32
32
  }>()
33
33
 
34
34
  const route = useRoute()
@@ -1,4 +1,4 @@
1
- export interface UI_I_NavbarItem {
1
+ export interface UI_I_ContentNavbarItem {
2
2
  text: string
3
3
  to: string
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.0.82",
4
+ "version": "1.0.84",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",