bfg-common 1.5.92 → 1.5.94

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 (112) hide show
  1. package/assets/scss/common/normalize.scss +347 -347
  2. package/components/atoms/alert/Notification.vue +169 -169
  3. package/components/atoms/autocomplete/Autocomplete.vue +361 -362
  4. package/components/atoms/collapse/CollapseNav.vue +169 -169
  5. package/components/atoms/comboDropdownMenu/ComboDropdownMenu.vue +357 -357
  6. package/components/atoms/combobox/Combobox.vue +154 -154
  7. package/components/atoms/datepicker/Datepicker.vue +639 -639
  8. package/components/atoms/dropdown/Portlet.vue +113 -113
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/dropdown/tree/Tree.vue +137 -137
  11. package/components/atoms/list/SelectList.vue +63 -63
  12. package/components/atoms/list/dragDropList/DragDropList.vue +148 -148
  13. package/components/atoms/modal/Modal.vue +250 -250
  14. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  15. package/components/atoms/notificationBar/NotificationBar.vue +178 -178
  16. package/components/atoms/popover/Popover.vue +58 -58
  17. package/components/atoms/popover/lib/models/interfaces.ts +4 -4
  18. package/components/atoms/select/TheSelect.vue +187 -187
  19. package/components/atoms/stack/StackBlock.vue +185 -185
  20. package/components/atoms/stack/StackContent.vue +63 -63
  21. package/components/atoms/step/lib/models/verticalStepItem.ts +5 -5
  22. package/components/atoms/switch/Switch.vue +111 -111
  23. package/components/atoms/table/compact/Compact.vue +529 -529
  24. package/components/atoms/table/dataGrid/DataGrid.vue +1716 -1713
  25. package/components/atoms/table/dataGrid/DataGridPage.vue +195 -195
  26. package/components/atoms/table/info/Info.vue +2 -2
  27. package/components/atoms/table/simpleEvent/SimpleEvent.vue +98 -98
  28. package/components/atoms/table/simpleInfo/SimpleInfo.vue +73 -73
  29. package/components/atoms/tabs/Tabs.vue +217 -217
  30. package/components/atoms/wizard/Wizard.vue +341 -341
  31. package/components/common/accordion/Recursion.vue +222 -222
  32. package/components/common/adapterManager/AddAdapterModal.vue +561 -561
  33. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +30 -30
  34. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  35. package/components/common/browse/BrowseNew.vue +237 -237
  36. package/components/common/browse/BrowseOld.vue +217 -217
  37. package/components/common/browse/blocks/TitleNew.vue +145 -145
  38. package/components/common/browse/blocks/TitleOld.vue +91 -91
  39. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  40. package/components/common/chartOptionsModal/counters/timespan/form/FormNew.vue +262 -262
  41. package/components/common/context/Context.vue +111 -111
  42. package/components/common/context/recursion/RecursionOld.vue +228 -228
  43. package/components/common/details/DetailsItem.vue +109 -109
  44. package/components/common/feedback/Buttons.vue +229 -229
  45. package/components/common/feedback/Feedback.vue +270 -270
  46. package/components/common/feedback/Message.vue +519 -519
  47. package/components/common/graph/graphNew/GraphNew.vue +194 -194
  48. package/components/common/graph/lib/utils/renderGraph.ts +389 -389
  49. package/components/common/layout/theHeader/feedback/new/New.vue +227 -227
  50. package/components/common/layout/theHeader/feedback/new/additionalDetails/AdditionalDetails.vue +606 -606
  51. package/components/common/layout/theHeader/feedback/new/additionalDetails/Headline.vue +98 -98
  52. package/components/common/layout/theHeader/feedback/new/description/Description.vue +59 -59
  53. package/components/common/layout/theHeader/feedback/new/email/Email.vue +43 -43
  54. package/components/common/layout/theHeader/feedback/new/subtitle/Subtitle.vue +103 -103
  55. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +112 -112
  56. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +80 -80
  57. package/components/common/layout/theHeader/helpMenu/helpMenuOld/HelpMenuOld.vue +1 -1
  58. package/components/common/layout/theHeader/modals/Reconnect.vue +2 -2
  59. package/components/common/layout/theHeader/modals/RedirectLogin.vue +3 -3
  60. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +1 -1
  61. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePasswordNew.vue +8 -8
  62. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePasswordOld.vue +3 -3
  63. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +1 -1
  64. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +1 -1
  65. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +1 -1
  66. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageNew.vue +1 -1
  67. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageOld.vue +2 -5
  68. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsoleOld.vue +1 -1
  69. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/InventoryNew.vue +1 -1
  70. package/components/common/layout/theHeader/userMenu/userMenuNew/UserMenuNew.vue +2 -2
  71. package/components/common/layout/theHeader/userMenu/userMenuNew/lib/config/dropMenu.ts +1 -1
  72. package/components/common/layout/theHeader/userMenu/userMenuOld/UserMenuOld.vue +1 -1
  73. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +2 -2
  74. package/components/common/modals/Rename.vue +2 -2
  75. package/components/common/modals/confirmByInput/ConfirmByInput.vue +2 -3
  76. package/components/common/modals/confirmByInput/ConfirmByInputOld.vue +3 -3
  77. package/components/common/modals/confirmation/ConfirmationOld.vue +1 -1
  78. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +1 -1
  79. package/components/common/monitor/advanced/Advanced.vue +1 -1
  80. package/components/common/monitor/advanced/AdvancedNew.vue +1 -1
  81. package/components/common/monitor/advanced/AdvancedOld.vue +1 -1
  82. package/components/common/monitor/advanced/graphView/GraphViewNew.vue +1 -1
  83. package/components/common/monitor/advanced/graphView/GraphViewOld.vue +1 -1
  84. package/components/common/monitor/advanced/table/Table.vue +1 -1
  85. package/components/common/monitor/advanced/table/tableNew/TableNew.vue +2 -2
  86. package/components/common/monitor/advanced/table/tableOld/lib/config/performanceDatatable.ts +2 -2
  87. package/components/common/monitor/advanced/tools/ToolsOld.vue +2 -2
  88. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModalOld.vue +1 -1
  89. package/components/common/monitor/advanced/tools/chartOptionsModal/NotificationOld.vue +1 -1
  90. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/ActionsOld.vue +1 -1
  91. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +1 -1
  92. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/CountersNew.vue +1 -1
  93. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableOld/lib/config/tableConfig.ts +2 -2
  94. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/config/objectTable.ts +10 -3
  95. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/ObjectNew.vue +1 -1
  96. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectOld/ObjectOld.vue +2 -2
  97. package/components/common/monitor/advanced/tools/lib/utils/countCores.ts +1 -1
  98. package/components/common/monitor/lib/models/interfaces.ts +1 -1
  99. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue +3 -3
  100. package/components/common/monitor/overview/filters/customIntervalModal/customIntervalModalNew/CustomIntervalModalNew.vue +4 -3
  101. package/components/common/monitor/resourceAllocation/lib/models/interfaces.ts +8 -8
  102. package/components/common/monitor/resourceAllocation/resourceAllocation.vue +2 -2
  103. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/ChartOptionsModal.vue +1 -1
  104. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/Notification.vue +1 -1
  105. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/actions/SaveOptionsModal.vue +1 -1
  106. package/components/common/pages/hardwareHealth/tableView/lib/config/alertWarningTable.ts +1 -1
  107. package/components/common/pages/hardwareHealth/tableView/lib/config/historyTestimonyTable.ts +5 -5
  108. package/components/common/wizards/vm/migrate/Migrate.vue +39 -2
  109. package/components/common/wizards/vm/migrate/vmOrigin/VmOrigin.vue +92 -0
  110. package/components/common/wizards/vm/migrate/vmOrigin/lib/models/interfaces.ts +19 -0
  111. package/components/common/wizards/vm/migrate/vmOrigin/lib/utils/constructItems.ts +62 -0
  112. package/package.json +1 -1
@@ -1,529 +1,529 @@
1
- <template>
2
- <div class="relative">
3
- <div :id="outerWrapper" class="datagrid-outer-wrapper">
4
- <div class="datagrid-inner-wrapper">
5
- <div class="datagrid">
6
- <div class="datagrid-table-wrapper">
7
- <div class="datagrid-table">
8
- <div class="datagrid-header">
9
- <div class="datagrid-row">
10
- <div class="datagrid-row-master datagrid-row-flex">
11
- <div class="datagrid-row-scrollable">
12
- <div
13
- v-for="(item, key) in props.headItems"
14
- :key="key"
15
- :style="{
16
- width: columnsWidth[key],
17
- }"
18
- class="datagrid-column datagrid-fixed-width"
19
- >
20
- <div class="datagrid-column-flex">
21
- <div class="datagrid-column-title">
22
- <slot name="th" :item="item">
23
- <span class="title-column">
24
- {{ item.text }}
25
- </span>
26
- </slot>
27
- </div>
28
- <div class="relative"></div>
29
- </div>
30
- </div>
31
- </div>
32
- </div>
33
- </div>
34
- </div>
35
- <template v-if="props.bodyItems.length">
36
- <div
37
- v-for="(item, key) in props.bodyItems"
38
- :key="key"
39
- :class="['datagrid-body-row datagrid-row animation']"
40
- >
41
- <div>
42
- <div class="datagrid-row-master datagrid-row-flex">
43
- <div class="datagrid-row-scrollable">
44
- <div class="datagrid-scrolling-cells">
45
- <div
46
- v-for="(item2, key2) in item"
47
- :key="item2"
48
- :style="{
49
- width: `${columnsWidth[key2]}`,
50
- }"
51
- class="datagrid-cell datagrid-fixed-width"
52
- >
53
- <div class="flex-align-center h-100">
54
- <slot :name="item2.key" :item="item2">
55
- <span>{{ item2 }}</span>
56
- </slot>
57
- </div>
58
- </div>
59
- </div>
60
- </div>
61
- </div>
62
- </div>
63
- </div>
64
- </template>
65
- <template v-else>
66
- <div class="datagrid-placeholder-container">
67
- <div class="datagrid-placeholder datagrid-empty">
68
- <div class="datagrid-placeholder-image"></div>
69
-
70
- <span>No items found</span>
71
- </div>
72
- </div>
73
- </template>
74
- </div>
75
- </div>
76
- </div>
77
-
78
- <div v-show="props.loading" class="datagrid-spinner">
79
- <div class="spinner"></div>
80
- </div>
81
- </div>
82
- </div>
83
- </div>
84
- </template>
85
-
86
- <script setup lang="ts">
87
- import type { UI_I_HeadItem } from '~/components/atoms/table/compact/lib/models/interfaces'
88
-
89
- const props = withDefaults(
90
- defineProps<{
91
- headItems: UI_I_HeadItem[]
92
- bodyItems: any // don't know what array fields will be
93
- loading?: boolean
94
- }>(),
95
- {
96
- loading: false,
97
- }
98
- )
99
-
100
- const columnsWidth = ref<string[]>([])
101
- const outerWrapper = `datagrid-outer-wrapper${useUniqueId()}`
102
- let dataGridWidth = 0
103
- const setDataGridWidth = (): void => {
104
- const el = document.getElementById(outerWrapper)
105
-
106
- dataGridWidth = document.getElementById(outerWrapper)?.clientWidth || 0
107
-
108
- if (!el || !dataGridWidth) {
109
- setTimeout(setDataGridWidth, 0)
110
- return
111
- }
112
-
113
- const emptyWidthCount = props.headItems.filter((item) => !item.width).length
114
- const existWidthsSum = props.headItems.reduce(
115
- (acum, item) => (acum += item.width),
116
- 0
117
- )
118
- const equalGridWidth = (dataGridWidth - existWidthsSum) / emptyWidthCount
119
- props.headItems.forEach((item) => {
120
- const elementMax = Math.max(equalGridWidth, item.width)
121
- columnsWidth.value.push(`${elementMax}px`)
122
- })
123
- }
124
- setDataGridWidth()
125
- </script>
126
-
127
- <style scoped lang="scss">
128
- @import '~/assets/scss/common/mixins';
129
- .datagrid-outer-wrapper {
130
- @include flex($dir: row);
131
- padding-top: 12px;
132
- flex-grow: 1;
133
- overflow: auto;
134
-
135
- & * {
136
- box-sizing: border-box;
137
- }
138
-
139
- & svg {
140
- fill: var(--table-color);
141
- }
142
-
143
- .datagrid-inner-wrapper {
144
- @include flex($dir: column);
145
- flex-grow: 1;
146
- overflow: auto;
147
-
148
- .datagrid {
149
- overflow: auto;
150
- flex: 1 1 auto;
151
- border-radius: 0.125rem 0.125rem 0 0;
152
- background-color: var(--block-view-bg-color);
153
- border-color: var(--global-border-color);
154
-
155
- .datagrid-table-wrapper {
156
- display: flex;
157
- flex: 1 1 auto;
158
- min-height: 100%;
159
-
160
- .datagrid-table {
161
- @include flex($dir: column);
162
- flex: 1 1 auto;
163
- align-content: flex-start;
164
- position: relative;
165
-
166
- .datagrid-header {
167
- position: sticky;
168
- top: 0;
169
- z-index: var(--z-sticky);
170
- width: auto;
171
-
172
- .datagrid-row-scrollable {
173
- flex-direction: row;
174
-
175
- .datagrid-column-separator {
176
- user-select: none;
177
-
178
- &::after {
179
- cursor: col-resize;
180
- }
181
- }
182
- }
183
-
184
- .datagrid-row {
185
- color: var(--table-color);
186
- background-color: var(--block-view-bg-color);
187
-
188
- &.datagrid-selected {
189
- background-color: var(--row-selected-bg-color);
190
- border-bottom: 1px solid var(--global-border-color);
191
-
192
- & :deep(*) {
193
- color: var(--table-active-color);
194
- }
195
- }
196
-
197
- .datagrid-column {
198
- background-color: var(--block-view-bg-color);
199
- border-bottom: 1px solid var(--global-border-color);
200
- padding: 6px 12px 5px;
201
- //flex: 1 1 auto;
202
-
203
- &:last-child {
204
- flex: 1 1 auto;
205
- }
206
-
207
- &.datagrid-toggle-block {
208
- width: 38px;
209
- min-width: 38px;
210
-
211
- .datagrid-column-separator {
212
- cursor: default;
213
-
214
- &::after {
215
- cursor: default;
216
- }
217
- }
218
- }
219
- }
220
-
221
- .datagrid-column-title {
222
- align-self: auto;
223
- color: var(--table-color);
224
- background-color: var(--block-view-bg-color);
225
- border-bottom-color: var(--global-border-color);
226
- font-size: 11px;
227
- @include flex($align: center);
228
- display: flex;
229
- flex-direction: row;
230
- justify-content: flex-start;
231
- align-items: center;
232
- //line-height: 24px;
233
- line-height: normal;
234
-
235
- .title-column {
236
- font-weight: bold;
237
- font-size: 11px;
238
- }
239
-
240
- .sort-arrow-wrap {
241
- margin-left: auto;
242
- height: 14px;
243
- width: 14px;
244
- vertical-align: middle;
245
-
246
- .sort-arrow {
247
- &.down {
248
- transform: rotate(180deg);
249
- }
250
- }
251
- }
252
- .title-icon {
253
- width: 24px;
254
- height: 24px;
255
- }
256
- }
257
-
258
- .datagrid-filter-toggle {
259
- background: unset;
260
-
261
- .filter-icon {
262
- width: 16px;
263
- height: 16px;
264
- }
265
- }
266
- }
267
- }
268
-
269
- .datagrid-placeholder-container {
270
- span {
271
- font-size: 16px;
272
- color: var(--global-font-color4);
273
- }
274
- }
275
-
276
- .datagrid-row {
277
- width: 100%;
278
- min-width: max-content;
279
- border-top: none;
280
- color: var(--table-color);
281
- background-color: var(--block-view-bg-color);
282
- border-bottom: 1px solid var(--global-border-color);
283
-
284
- &.datagrid-selected {
285
- & :deep(*) {
286
- color: var(--table-active-color);
287
- }
288
-
289
- .datagrid-cell {
290
- // background-color: var(--row-selected-bg-color);
291
- // border-bottom: 1px solid var(--global-border-color);
292
- position: relative;
293
- line-height: 1rem;
294
-
295
- &.hidden-text-triangle::after {
296
- content: '';
297
- margin-right: -5%;
298
- position: absolute;
299
- transform: rotate(225deg);
300
- border-bottom: 21px solid transparent;
301
- border-right: 21px solid var(--global-bg-color);
302
- bottom: 4%;
303
- right: 0;
304
- z-index: calc(var(--z-sticky) + 1);
305
- }
306
- &.hidden-text-triangle::before {
307
- content: '';
308
- margin-right: -5%;
309
- transform: rotate(-135deg);
310
- position: absolute;
311
- border-bottom: 22px solid transparent;
312
- border-right: 22px solid var(--global-border-color);
313
- bottom: 3%;
314
- right: 0%;
315
- z-index: calc(var(--z-sticky) + 1);
316
- }
317
- }
318
-
319
- .datagrid-row-detail {
320
- background-color: var(--row-selected-bg-color);
321
- border-bottom: 1px solid var(--global-border-color);
322
- }
323
- }
324
-
325
- .datagrid-cell {
326
- min-width: 38px;
327
- min-height: 28px;
328
- padding: 2px 4px 3px 4px;
329
-
330
- &:last-child {
331
- flex: 1 1 auto;
332
- }
333
-
334
- button {
335
- height: 0.9rem;
336
- width: 0.9rem;
337
-
338
- .arrow-icon {
339
- width: 16px;
340
- height: 16px;
341
- transform: rotate(90deg);
342
- }
343
- }
344
-
345
- .datagrid-cell-icon {
346
- display: inline-block;
347
- width: 16px;
348
- height: 16px;
349
- }
350
-
351
- .datagrid-expandable-caret-button {
352
- cursor: pointer;
353
- width: 100%;
354
-
355
- .datagrid-expandable-caret-icon {
356
- width: 16px;
357
- height: 16px;
358
- transform: rotate(90deg);
359
- fill: var(--table-caret-color);
360
-
361
- &.toggle {
362
- transform: rotate(180deg);
363
- }
364
- }
365
- }
366
- }
367
- }
368
-
369
- .datagrid-row-sticky {
370
- @include flex($w: nowrap);
371
- position: sticky;
372
- left: 0;
373
- z-index: var(--z-sticky);
374
- background-color: var(--block-view-bg-color);
375
-
376
- .datagrid-column {
377
- color: var(--table-color);
378
- background-color: var(--block-view-bg-color);
379
- border-bottom-color: var(--global-border-color);
380
- text-align: left;
381
- display: flex;
382
- flex: 1 1 auto;
383
- vertical-align: top;
384
- border: none;
385
-
386
- &.datagrid-expandable-caret {
387
- .datagrid-column-separator {
388
- display: block;
389
-
390
- &::after {
391
- top: 0;
392
- height: 18px;
393
- }
394
- }
395
-
396
- .radio-btn {
397
- width: 16px;
398
- height: 16px;
399
- }
400
- }
401
-
402
- .datagrid-column-separator {
403
- position: relative;
404
- //left: 0.6rem;
405
- flex: 0 0 auto;
406
- width: 0.05rem;
407
- order: 100;
408
- margin-left: auto;
409
- height: 100%;
410
- }
411
- }
412
-
413
- .datagrid-fixed-column {
414
- background-color: var(--block-view-bg-color);
415
-
416
- &::after {
417
- content: '';
418
- width: 0.05rem;
419
- height: calc(100% - 0.5rem);
420
- position: absolute;
421
- right: 0;
422
- top: 0.25rem;
423
- background-color: var(--global-border-color);
424
- }
425
- }
426
- }
427
-
428
- .datagrid-row-scrollable {
429
- @include flex($ff: row nowrap);
430
- flex: 1 1 auto;
431
-
432
- .datagrid-scrolling-cells {
433
- @include flex($ff: row nowrap);
434
- flex: 1 1 auto;
435
- }
436
- }
437
- .datagrid-body-row {
438
- .datagrid-row-scrollable {
439
- @include flex($ff: column nowrap);
440
-
441
- .datagrid-row-detail {
442
- flex: 1;
443
- }
444
- }
445
-
446
- &:not(.datagrid-selected):hover {
447
- // border-bottom: 1px solid var(--table-hover-row-border-color);
448
- // background-color: var(--table-hover-row-background-color);
449
- color: var(--table-hover-row-color);
450
-
451
- .datagrid-fixed-column {
452
- background-color: var(--table-hover-row-background-color);
453
- }
454
- .datagrid-cell {
455
- // background-color: var(--table-hover-row-background-color);
456
- }
457
- }
458
- }
459
- }
460
- }
461
- }
462
-
463
- .datagrid-spinner {
464
- position: absolute;
465
- @include flex($just: center, $align: center);
466
- width: 100%;
467
- top: 0.6rem;
468
- height: calc(100% - 0.6rem);
469
- background-color: #ffffff99;
470
- z-index: var(--z-fixed);
471
-
472
- .spinner {
473
- width: 40px;
474
- height: 40px;
475
- min-width: 40px;
476
- min-height: 40px;
477
- }
478
- }
479
-
480
- .datagrid-footer-description {
481
- flex: 1 1 auto;
482
-
483
- :deep(svg) {
484
- fill: var(--table-switch-color);
485
- }
486
- }
487
-
488
- .clr-radio-wrapper,
489
- .clr-checkbox-wrapper {
490
- height: 18px;
491
- }
492
-
493
- .clr-radio-wrapper label,
494
- .clr-checkbox-wrapper label {
495
- padding-left: 16px;
496
- }
497
- }
498
- }
499
- .vertical-divider {
500
- width: 1px;
501
- height: 22px;
502
- background: #bbb;
503
- margin: 2px 7px 0 -10px;
504
- }
505
- </style>
506
-
507
- <style>
508
- :root {
509
- --table-color: #565656;
510
- --table-active-color: #fff;
511
- --table-checkbox-color: #454545;
512
- --table-caret-color: #454545;
513
- --table-switch-color: #575757;
514
- --table-hover-row-border-color: #666;
515
- --table-hover-row-background-color: #e8e8e8;
516
- --table-hover-row-color: #454545;
517
- }
518
-
519
- :root.dark-theme {
520
- --table-color: #fff;
521
- --table-active-color: #565656;
522
- --table-checkbox-color: #49aeda;
523
- --table-caret-color: #ffffff;
524
- --table-switch-color: #b3b3b3;
525
- --table-hover-row-border-color: #fff;
526
- --table-hover-row-background-color: #324f61;
527
- --table-hover-row-color: #e9ecef;
528
- }
529
- </style>
1
+ <template>
2
+ <div class="relative">
3
+ <div :id="outerWrapper" class="datagrid-outer-wrapper">
4
+ <div class="datagrid-inner-wrapper">
5
+ <div class="datagrid">
6
+ <div class="datagrid-table-wrapper">
7
+ <div class="datagrid-table">
8
+ <div class="datagrid-header">
9
+ <div class="datagrid-row">
10
+ <div class="datagrid-row-master datagrid-row-flex">
11
+ <div class="datagrid-row-scrollable">
12
+ <div
13
+ v-for="(item, key) in props.headItems"
14
+ :key="key"
15
+ :style="{
16
+ width: columnsWidth[key],
17
+ }"
18
+ class="datagrid-column datagrid-fixed-width"
19
+ >
20
+ <div class="datagrid-column-flex">
21
+ <div class="datagrid-column-title">
22
+ <slot name="th" :item="item">
23
+ <span class="title-column">
24
+ {{ item.text }}
25
+ </span>
26
+ </slot>
27
+ </div>
28
+ <div class="relative"></div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <template v-if="props.bodyItems.length">
36
+ <div
37
+ v-for="(item, key) in props.bodyItems"
38
+ :key="key"
39
+ :class="['datagrid-body-row datagrid-row animation']"
40
+ >
41
+ <div>
42
+ <div class="datagrid-row-master datagrid-row-flex">
43
+ <div class="datagrid-row-scrollable">
44
+ <div class="datagrid-scrolling-cells">
45
+ <div
46
+ v-for="(item2, key2) in item"
47
+ :key="item2"
48
+ :style="{
49
+ width: `${columnsWidth[key2]}`,
50
+ }"
51
+ class="datagrid-cell datagrid-fixed-width"
52
+ >
53
+ <div class="flex-align-center h-100">
54
+ <slot :name="item2.key" :item="item2">
55
+ <span>{{ item2 }}</span>
56
+ </slot>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </template>
65
+ <template v-else>
66
+ <div class="datagrid-placeholder-container">
67
+ <div class="datagrid-placeholder datagrid-empty">
68
+ <div class="datagrid-placeholder-image"></div>
69
+
70
+ <span>No items found</span>
71
+ </div>
72
+ </div>
73
+ </template>
74
+ </div>
75
+ </div>
76
+ </div>
77
+
78
+ <div v-show="props.loading" class="datagrid-spinner">
79
+ <div class="spinner"></div>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </template>
85
+
86
+ <script setup lang="ts">
87
+ import type { UI_I_HeadItem } from '~/components/atoms/table/compact/lib/models/interfaces'
88
+
89
+ const props = withDefaults(
90
+ defineProps<{
91
+ headItems: UI_I_HeadItem[]
92
+ bodyItems: any // don't know what array fields will be
93
+ loading?: boolean
94
+ }>(),
95
+ {
96
+ loading: false,
97
+ }
98
+ )
99
+
100
+ const columnsWidth = ref<string[]>([])
101
+ const outerWrapper = `datagrid-outer-wrapper${useUniqueId()}`
102
+ let dataGridWidth = 0
103
+ const setDataGridWidth = (): void => {
104
+ const el = document.getElementById(outerWrapper)
105
+
106
+ dataGridWidth = document.getElementById(outerWrapper)?.clientWidth || 0
107
+
108
+ if (!el || !dataGridWidth) {
109
+ setTimeout(setDataGridWidth, 0)
110
+ return
111
+ }
112
+
113
+ const emptyWidthCount = props.headItems.filter((item) => !item.width).length
114
+ const existWidthsSum = props.headItems.reduce(
115
+ (acum, item) => (acum += item.width),
116
+ 0
117
+ )
118
+ const equalGridWidth = (dataGridWidth - existWidthsSum) / emptyWidthCount
119
+ props.headItems.forEach((item) => {
120
+ const elementMax = Math.max(equalGridWidth, item.width)
121
+ columnsWidth.value.push(`${elementMax}px`)
122
+ })
123
+ }
124
+ setDataGridWidth()
125
+ </script>
126
+
127
+ <style scoped lang="scss">
128
+ @import '~/assets/scss/common/mixins';
129
+ .datagrid-outer-wrapper {
130
+ @include flex($dir: row);
131
+ padding-top: 12px;
132
+ flex-grow: 1;
133
+ overflow: auto;
134
+
135
+ & * {
136
+ box-sizing: border-box;
137
+ }
138
+
139
+ & svg {
140
+ fill: var(--table-color);
141
+ }
142
+
143
+ .datagrid-inner-wrapper {
144
+ @include flex($dir: column);
145
+ flex-grow: 1;
146
+ overflow: auto;
147
+
148
+ .datagrid {
149
+ overflow: auto;
150
+ flex: 1 1 auto;
151
+ border-radius: 0.125rem 0.125rem 0 0;
152
+ background-color: var(--block-view-bg-color);
153
+ border-color: var(--global-border-color);
154
+
155
+ .datagrid-table-wrapper {
156
+ display: flex;
157
+ flex: 1 1 auto;
158
+ min-height: 100%;
159
+
160
+ .datagrid-table {
161
+ @include flex($dir: column);
162
+ flex: 1 1 auto;
163
+ align-content: flex-start;
164
+ position: relative;
165
+
166
+ .datagrid-header {
167
+ position: sticky;
168
+ top: 0;
169
+ z-index: var(--z-sticky);
170
+ width: auto;
171
+
172
+ .datagrid-row-scrollable {
173
+ flex-direction: row;
174
+
175
+ .datagrid-column-separator {
176
+ user-select: none;
177
+
178
+ &::after {
179
+ cursor: col-resize;
180
+ }
181
+ }
182
+ }
183
+
184
+ .datagrid-row {
185
+ color: var(--table-color);
186
+ background-color: var(--block-view-bg-color);
187
+
188
+ &.datagrid-selected {
189
+ background-color: var(--row-selected-bg-color);
190
+ border-bottom: 1px solid var(--global-border-color);
191
+
192
+ & :deep(*) {
193
+ color: var(--table-active-color);
194
+ }
195
+ }
196
+
197
+ .datagrid-column {
198
+ background-color: var(--block-view-bg-color);
199
+ border-bottom: 1px solid var(--global-border-color);
200
+ padding: 6px 12px 5px;
201
+ //flex: 1 1 auto;
202
+
203
+ &:last-child {
204
+ flex: 1 1 auto;
205
+ }
206
+
207
+ &.datagrid-toggle-block {
208
+ width: 38px;
209
+ min-width: 38px;
210
+
211
+ .datagrid-column-separator {
212
+ cursor: default;
213
+
214
+ &::after {
215
+ cursor: default;
216
+ }
217
+ }
218
+ }
219
+ }
220
+
221
+ .datagrid-column-title {
222
+ align-self: auto;
223
+ color: var(--table-color);
224
+ background-color: var(--block-view-bg-color);
225
+ border-bottom-color: var(--global-border-color);
226
+ font-size: 11px;
227
+ @include flex($align: center);
228
+ display: flex;
229
+ flex-direction: row;
230
+ justify-content: flex-start;
231
+ align-items: center;
232
+ //line-height: 24px;
233
+ line-height: normal;
234
+
235
+ .title-column {
236
+ font-weight: bold;
237
+ font-size: 11px;
238
+ }
239
+
240
+ .sort-arrow-wrap {
241
+ margin-left: auto;
242
+ height: 14px;
243
+ width: 14px;
244
+ vertical-align: middle;
245
+
246
+ .sort-arrow {
247
+ &.down {
248
+ transform: rotate(180deg);
249
+ }
250
+ }
251
+ }
252
+ .title-icon {
253
+ width: 24px;
254
+ height: 24px;
255
+ }
256
+ }
257
+
258
+ .datagrid-filter-toggle {
259
+ background: unset;
260
+
261
+ .filter-icon {
262
+ width: 16px;
263
+ height: 16px;
264
+ }
265
+ }
266
+ }
267
+ }
268
+
269
+ .datagrid-placeholder-container {
270
+ span {
271
+ font-size: 16px;
272
+ color: var(--global-font-color4);
273
+ }
274
+ }
275
+
276
+ .datagrid-row {
277
+ width: 100%;
278
+ min-width: max-content;
279
+ border-top: none;
280
+ color: var(--table-color);
281
+ background-color: var(--block-view-bg-color);
282
+ border-bottom: 1px solid var(--global-border-color);
283
+
284
+ &.datagrid-selected {
285
+ & :deep(*) {
286
+ color: var(--table-active-color);
287
+ }
288
+
289
+ .datagrid-cell {
290
+ // background-color: var(--row-selected-bg-color);
291
+ // border-bottom: 1px solid var(--global-border-color);
292
+ position: relative;
293
+ line-height: 1rem;
294
+
295
+ &.hidden-text-triangle::after {
296
+ content: '';
297
+ margin-right: -5%;
298
+ position: absolute;
299
+ transform: rotate(225deg);
300
+ border-bottom: 21px solid transparent;
301
+ border-right: 21px solid var(--global-bg-color);
302
+ bottom: 4%;
303
+ right: 0;
304
+ z-index: calc(var(--z-sticky) + 1);
305
+ }
306
+ &.hidden-text-triangle::before {
307
+ content: '';
308
+ margin-right: -5%;
309
+ transform: rotate(-135deg);
310
+ position: absolute;
311
+ border-bottom: 22px solid transparent;
312
+ border-right: 22px solid var(--global-border-color);
313
+ bottom: 3%;
314
+ right: 0%;
315
+ z-index: calc(var(--z-sticky) + 1);
316
+ }
317
+ }
318
+
319
+ .datagrid-row-detail {
320
+ background-color: var(--row-selected-bg-color);
321
+ border-bottom: 1px solid var(--global-border-color);
322
+ }
323
+ }
324
+
325
+ .datagrid-cell {
326
+ min-width: 38px;
327
+ min-height: 28px;
328
+ padding: 2px 4px 3px 4px;
329
+
330
+ &:last-child {
331
+ flex: 1 1 auto;
332
+ }
333
+
334
+ button {
335
+ height: 0.9rem;
336
+ width: 0.9rem;
337
+
338
+ .arrow-icon {
339
+ width: 16px;
340
+ height: 16px;
341
+ transform: rotate(90deg);
342
+ }
343
+ }
344
+
345
+ .datagrid-cell-icon {
346
+ display: inline-block;
347
+ width: 16px;
348
+ height: 16px;
349
+ }
350
+
351
+ .datagrid-expandable-caret-button {
352
+ cursor: pointer;
353
+ width: 100%;
354
+
355
+ .datagrid-expandable-caret-icon {
356
+ width: 16px;
357
+ height: 16px;
358
+ transform: rotate(90deg);
359
+ fill: var(--table-caret-color);
360
+
361
+ &.toggle {
362
+ transform: rotate(180deg);
363
+ }
364
+ }
365
+ }
366
+ }
367
+ }
368
+
369
+ .datagrid-row-sticky {
370
+ @include flex($w: nowrap);
371
+ position: sticky;
372
+ left: 0;
373
+ z-index: var(--z-sticky);
374
+ background-color: var(--block-view-bg-color);
375
+
376
+ .datagrid-column {
377
+ color: var(--table-color);
378
+ background-color: var(--block-view-bg-color);
379
+ border-bottom-color: var(--global-border-color);
380
+ text-align: left;
381
+ display: flex;
382
+ flex: 1 1 auto;
383
+ vertical-align: top;
384
+ border: none;
385
+
386
+ &.datagrid-expandable-caret {
387
+ .datagrid-column-separator {
388
+ display: block;
389
+
390
+ &::after {
391
+ top: 0;
392
+ height: 18px;
393
+ }
394
+ }
395
+
396
+ .radio-btn {
397
+ width: 16px;
398
+ height: 16px;
399
+ }
400
+ }
401
+
402
+ .datagrid-column-separator {
403
+ position: relative;
404
+ //left: 0.6rem;
405
+ flex: 0 0 auto;
406
+ width: 0.05rem;
407
+ order: 100;
408
+ margin-left: auto;
409
+ height: 100%;
410
+ }
411
+ }
412
+
413
+ .datagrid-fixed-column {
414
+ background-color: var(--block-view-bg-color);
415
+
416
+ &::after {
417
+ content: '';
418
+ width: 0.05rem;
419
+ height: calc(100% - 0.5rem);
420
+ position: absolute;
421
+ right: 0;
422
+ top: 0.25rem;
423
+ background-color: var(--global-border-color);
424
+ }
425
+ }
426
+ }
427
+
428
+ .datagrid-row-scrollable {
429
+ @include flex($ff: row nowrap);
430
+ flex: 1 1 auto;
431
+
432
+ .datagrid-scrolling-cells {
433
+ @include flex($ff: row nowrap);
434
+ flex: 1 1 auto;
435
+ }
436
+ }
437
+ .datagrid-body-row {
438
+ .datagrid-row-scrollable {
439
+ @include flex($ff: column nowrap);
440
+
441
+ .datagrid-row-detail {
442
+ flex: 1;
443
+ }
444
+ }
445
+
446
+ &:not(.datagrid-selected):hover {
447
+ // border-bottom: 1px solid var(--table-hover-row-border-color);
448
+ // background-color: var(--table-hover-row-background-color);
449
+ color: var(--table-hover-row-color);
450
+
451
+ .datagrid-fixed-column {
452
+ background-color: var(--table-hover-row-background-color);
453
+ }
454
+ .datagrid-cell {
455
+ // background-color: var(--table-hover-row-background-color);
456
+ }
457
+ }
458
+ }
459
+ }
460
+ }
461
+ }
462
+
463
+ .datagrid-spinner {
464
+ position: absolute;
465
+ @include flex($just: center, $align: center);
466
+ width: 100%;
467
+ top: 0.6rem;
468
+ height: calc(100% - 0.6rem);
469
+ background-color: #ffffff99;
470
+ z-index: var(--z-fixed);
471
+
472
+ .spinner {
473
+ width: 40px;
474
+ height: 40px;
475
+ min-width: 40px;
476
+ min-height: 40px;
477
+ }
478
+ }
479
+
480
+ .datagrid-footer-description {
481
+ flex: 1 1 auto;
482
+
483
+ :deep(svg) {
484
+ fill: var(--table-switch-color);
485
+ }
486
+ }
487
+
488
+ .clr-radio-wrapper,
489
+ .clr-checkbox-wrapper {
490
+ height: 18px;
491
+ }
492
+
493
+ .clr-radio-wrapper label,
494
+ .clr-checkbox-wrapper label {
495
+ padding-left: 16px;
496
+ }
497
+ }
498
+ }
499
+ .vertical-divider {
500
+ width: 1px;
501
+ height: 22px;
502
+ background: #bbb;
503
+ margin: 2px 7px 0 -10px;
504
+ }
505
+ </style>
506
+
507
+ <style>
508
+ :root {
509
+ --table-color: #565656;
510
+ --table-active-color: #fff;
511
+ --table-checkbox-color: #454545;
512
+ --table-caret-color: #454545;
513
+ --table-switch-color: #575757;
514
+ --table-hover-row-border-color: #666;
515
+ --table-hover-row-background-color: #e8e8e8;
516
+ --table-hover-row-color: #454545;
517
+ }
518
+
519
+ :root.dark-theme {
520
+ --table-color: #fff;
521
+ --table-active-color: #565656;
522
+ --table-checkbox-color: #49aeda;
523
+ --table-caret-color: #ffffff;
524
+ --table-switch-color: #b3b3b3;
525
+ --table-hover-row-border-color: #fff;
526
+ --table-hover-row-background-color: #324f61;
527
+ --table-hover-row-color: #e9ecef;
528
+ }
529
+ </style>