bfg-common 1.5.30 → 1.5.31

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 (170) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/localization/local_ru.json +5 -5
  3. package/assets/scss/common/normalize.scss +339 -339
  4. package/components/atoms/TheIcon3.vue +50 -50
  5. package/components/atoms/collapse/CollapseNav.vue +165 -165
  6. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  7. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/stack/StackBlock.vue +185 -185
  10. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  14. package/components/atoms/tooltip/Signpost.vue +227 -227
  15. package/components/atoms/tooltip/Signpost.vue~ +229 -229
  16. package/components/common/accordion/Recursion.vue +222 -222
  17. package/components/common/browse/BrowseNew.vue +237 -237
  18. package/components/common/browse/BrowseOld.vue +217 -217
  19. package/components/common/browse/blocks/contents/Files.vue +37 -37
  20. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  21. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  22. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  23. package/components/common/context/Context.vue +111 -111
  24. package/components/common/context/lib/models/interfaces.ts +31 -31
  25. package/components/common/context/recursion/Recursion.vue +87 -87
  26. package/components/common/context/recursion/RecursionNew.vue +238 -238
  27. package/components/common/context/recursion/RecursionOld.vue +228 -228
  28. package/components/common/details/DetailsItem.vue +109 -109
  29. package/components/common/diagramMain/DiagramMain.vue +897 -897
  30. package/components/common/diagramMain/Header.vue +214 -214
  31. package/components/common/graph/Graph.vue +120 -104
  32. package/components/common/graph/Graph.vue~ +104 -0
  33. package/components/common/graph/graphNew/GraphNew.vue +194 -0
  34. package/components/common/graph/graphNew/lib/models/enums.ts +9 -0
  35. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  36. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  38. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  39. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  40. package/components/common/modals/confirmByInput/ConfirmByInputNew.vue +1 -1
  41. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  42. package/components/common/monitor/advanced/graphView/GraphView.vue +2 -2
  43. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  44. package/components/common/monitor/overview/Overview.vue +5 -3
  45. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  46. package/components/common/pages/home/StatusContent.vue +49 -49
  47. package/components/common/pages/home/headline/Headline.vue +45 -45
  48. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  49. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  50. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  51. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  52. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  53. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  54. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  55. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  56. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  57. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  58. package/components/common/pages/packages/Packages.vue +208 -208
  59. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  60. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  61. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  62. package/components/common/portlets/tag/Portlet.vue +433 -433
  63. package/components/common/recursionTree/RecursionTree.vue +223 -223
  64. package/components/common/select/button/ButtonDropdown.vue +108 -108
  65. package/components/common/spiceConsole/Drawer.vue +370 -370
  66. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  67. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  68. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  69. package/components/common/split/vertical/Vertical.vue +160 -160
  70. package/components/common/tools/Actions.vue +188 -188
  71. package/components/common/vm/actions/add/Add.vue +622 -622
  72. package/components/common/vm/actions/clone/Clone.vue +639 -639
  73. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  74. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  75. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  76. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  77. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  78. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  146. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  147. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  148. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  149. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  150. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  151. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  152. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  153. package/components/common/wizards/vm/migrate/Migrate.vue +302 -302
  154. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  155. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  156. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  157. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  158. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  159. package/composables/productNameLocal.ts +30 -30
  160. package/composables/useAppVersion.ts +21 -21
  161. package/package.json +3 -3
  162. package/package.json~ +3 -3
  163. package/plugins/date.ts +233 -233
  164. package/plugins/directives.ts +24 -24
  165. package/public/spice-console/lib/images/bitmap.js +203 -203
  166. package/public/spice-console/network/spicechannel.js +383 -383
  167. package/store/main/mutations.ts +7 -7
  168. package/store/main/state.ts +7 -7
  169. package/store/tasks/mappers/recentTasks.ts +64 -64
  170. package/components/common/graph/GraphNew.vue +0 -179
@@ -1,188 +1,188 @@
1
- <template>
2
- <!-- :style="{ 'padding-right': rightSpace + 'px' }"-->
3
- <div :id="id" class="btn-group">
4
- <div v-for="(button, key) in props.actions" :key="button.type">
5
- <label v-if="button.uploaded" v-development="button.development">
6
- <span
7
- :class="[`btn btn-link ${props.size}`]"
8
- :data-id="`${button.testId}-text`"
9
- >
10
- <slot name="icon" :data="button" />
11
- {{ button.text }}
12
- </span>
13
- <input
14
- :id="`select-file-button-${key}`"
15
- :data-id="button.testId"
16
- type="file"
17
- :disabled="button.disabled"
18
- :multiple="button?.multiple || false"
19
- class="btn-group__file"
20
- @change="(event) => onSelectFiles(event, button.type, key)"
21
- />
22
- </label>
23
-
24
- <button
25
- v-else
26
- :id="`actions-button-${key}`"
27
- v-development="button.development"
28
- :data-id="button.testId"
29
- :class="[`btn btn-link ${props.size}`]"
30
- :disabled="button.disabled"
31
- @click="onClickButton(button.type)"
32
- >
33
- <slot name="icon" :data="button" />
34
- {{ button.text }}
35
- </button>
36
- </div>
37
- <atoms-collapse-nav
38
- v-show="collapsedItems.length"
39
- :test-id="`${props.testId}-item`"
40
- :items="collapsedItems"
41
- close-after-click
42
- class="nav-tabs"
43
- @change="onClickButton"
44
- @select-file="onSelectFiles"
45
- />
46
- </div>
47
- </template>
48
-
49
- <script lang="ts" setup>
50
- import type { UI_I_Button } from '~/components/common/tools/lib/models/interfaces'
51
- import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
52
-
53
- const props = withDefaults(
54
- defineProps<{
55
- actions: UI_I_Button[]
56
- testId: string
57
- size?: 'btn-sm' | ''
58
- }>(),
59
- {
60
- size: 'btn-sm',
61
- }
62
- )
63
- const emits = defineEmits<{
64
- (event: 'click', value1: string, value2?: Event | null): void
65
- }>()
66
-
67
- const onClickButton = (type: string): void => {
68
- emits('click', type)
69
- }
70
-
71
- const onSelectFiles = (event: Event, type: string, key: number): void => {
72
- emits('click', type, event)
73
-
74
- const input = document.getElementById(
75
- `select-file-button-${key}`
76
- ) as HTMLInputElement | null
77
- input && (input.value = '')
78
- }
79
-
80
- const visibleCount = ref<number>(props.actions.length)
81
- const collapsedItems = computed<UI_I_CollapseNavItem[]>(() => {
82
- return props.actions
83
- .filter((_, index) => {
84
- return index >= visibleCount.value
85
- })
86
- .map((item) => {
87
- return {
88
- text: item.text,
89
- value: item.type,
90
- disabled: item.disabled,
91
- development: item.development,
92
- uploaded: item.uploaded,
93
- testId: item.testId,
94
- }
95
- })
96
- })
97
- watch(
98
- () => props.actions,
99
- (newValue) => {
100
- visibleCount.value = newValue.length
101
- },
102
- { deep: true }
103
- )
104
-
105
- // const rightSpace = ref<number>(0)
106
- // watch(
107
- // collapsedItems,
108
- // (newValue) => {
109
- // let space = 0
110
- // const element: any = document.getElementById(id.value)
111
- // if (!element || !newValue.length) space = 0
112
- // else if (element.lastChild?.className?.includes('tabs-overflow')) {
113
- // space =
114
- // element.getBoundingClientRect().right -
115
- // element.lastChild.getBoundingClientRect().left
116
- // }
117
- //
118
- // rightSpace.value = space
119
- // },
120
- // { deep: true }
121
- // )
122
-
123
- const outputSize = (): void => {
124
- const el = document.getElementById(id.value)
125
- if (!el) return
126
-
127
- const elWidth = el.clientWidth
128
- // const elItems = el.children
129
- const elItems = Array.from(el.children).filter(
130
- (item) => !item.classList.contains('nav-tabs')
131
- )
132
- const elItemsMarginLeft = parseInt(getComputedStyle(elItems[0]).marginLeft)
133
- const elItemsMarginRight = parseInt(getComputedStyle(elItems[0]).marginRight)
134
- const childrenMarginY = elItemsMarginLeft + elItemsMarginRight
135
-
136
- let childrenWidth = -10 // TODO Найти способ лучше. Не всегда совпадает ширина элементов с шириной родительского элемента
137
- let count = 0
138
- for (let i = 0; i < elItems.length; i++) {
139
- childrenWidth += elItems[i].clientWidth + childrenMarginY
140
- // const isWrap = elWidth - rightSpace.value < childrenWidth
141
- const isWrap = elWidth < childrenWidth
142
-
143
- if (isWrap) break
144
- count++
145
- }
146
-
147
- visibleCount.value = count
148
- }
149
-
150
- const setResizeObserve = (): void => {
151
- const el = document.getElementById(id.value)
152
-
153
- if (!el) {
154
- setTimeout(setResizeObserve, 0)
155
- return
156
- }
157
-
158
- new ResizeObserver(outputSize).observe(el)
159
- }
160
- const id = ref<string>('')
161
- onMounted(() => {
162
- id.value = `tool-actions-${useUniqueId()}`
163
- setResizeObserve()
164
- })
165
- </script>
166
-
167
- <style lang="scss" scoped>
168
- .btn {
169
- &:disabled {
170
- color: var(--btn-link-disabled);
171
- }
172
- &-group {
173
- margin-top: 10px;
174
- box-shadow: none;
175
- position: relative;
176
- overflow: hidden;
177
- display: flex;
178
- flex-wrap: wrap;
179
- min-height: 25px;
180
- height: 25px;
181
- box-sizing: content-box;
182
-
183
- &__file {
184
- display: none;
185
- }
186
- }
187
- }
188
- </style>
1
+ <template>
2
+ <!-- :style="{ 'padding-right': rightSpace + 'px' }"-->
3
+ <div :id="id" class="btn-group">
4
+ <div v-for="(button, key) in props.actions" :key="button.type">
5
+ <label v-if="button.uploaded" v-development="button.development">
6
+ <span
7
+ :class="[`btn btn-link ${props.size}`]"
8
+ :data-id="`${button.testId}-text`"
9
+ >
10
+ <slot name="icon" :data="button" />
11
+ {{ button.text }}
12
+ </span>
13
+ <input
14
+ :id="`select-file-button-${key}`"
15
+ :data-id="button.testId"
16
+ type="file"
17
+ :disabled="button.disabled"
18
+ :multiple="button?.multiple || false"
19
+ class="btn-group__file"
20
+ @change="(event) => onSelectFiles(event, button.type, key)"
21
+ />
22
+ </label>
23
+
24
+ <button
25
+ v-else
26
+ :id="`actions-button-${key}`"
27
+ v-development="button.development"
28
+ :data-id="button.testId"
29
+ :class="[`btn btn-link ${props.size}`]"
30
+ :disabled="button.disabled"
31
+ @click="onClickButton(button.type)"
32
+ >
33
+ <slot name="icon" :data="button" />
34
+ {{ button.text }}
35
+ </button>
36
+ </div>
37
+ <atoms-collapse-nav
38
+ v-show="collapsedItems.length"
39
+ :test-id="`${props.testId}-item`"
40
+ :items="collapsedItems"
41
+ close-after-click
42
+ class="nav-tabs"
43
+ @change="onClickButton"
44
+ @select-file="onSelectFiles"
45
+ />
46
+ </div>
47
+ </template>
48
+
49
+ <script lang="ts" setup>
50
+ import type { UI_I_Button } from '~/components/common/tools/lib/models/interfaces'
51
+ import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
52
+
53
+ const props = withDefaults(
54
+ defineProps<{
55
+ actions: UI_I_Button[]
56
+ testId: string
57
+ size?: 'btn-sm' | ''
58
+ }>(),
59
+ {
60
+ size: 'btn-sm',
61
+ }
62
+ )
63
+ const emits = defineEmits<{
64
+ (event: 'click', value1: string, value2?: Event | null): void
65
+ }>()
66
+
67
+ const onClickButton = (type: string): void => {
68
+ emits('click', type)
69
+ }
70
+
71
+ const onSelectFiles = (event: Event, type: string, key: number): void => {
72
+ emits('click', type, event)
73
+
74
+ const input = document.getElementById(
75
+ `select-file-button-${key}`
76
+ ) as HTMLInputElement | null
77
+ input && (input.value = '')
78
+ }
79
+
80
+ const visibleCount = ref<number>(props.actions.length)
81
+ const collapsedItems = computed<UI_I_CollapseNavItem[]>(() => {
82
+ return props.actions
83
+ .filter((_, index) => {
84
+ return index >= visibleCount.value
85
+ })
86
+ .map((item) => {
87
+ return {
88
+ text: item.text,
89
+ value: item.type,
90
+ disabled: item.disabled,
91
+ development: item.development,
92
+ uploaded: item.uploaded,
93
+ testId: item.testId,
94
+ }
95
+ })
96
+ })
97
+ watch(
98
+ () => props.actions,
99
+ (newValue) => {
100
+ visibleCount.value = newValue.length
101
+ },
102
+ { deep: true }
103
+ )
104
+
105
+ // const rightSpace = ref<number>(0)
106
+ // watch(
107
+ // collapsedItems,
108
+ // (newValue) => {
109
+ // let space = 0
110
+ // const element: any = document.getElementById(id.value)
111
+ // if (!element || !newValue.length) space = 0
112
+ // else if (element.lastChild?.className?.includes('tabs-overflow')) {
113
+ // space =
114
+ // element.getBoundingClientRect().right -
115
+ // element.lastChild.getBoundingClientRect().left
116
+ // }
117
+ //
118
+ // rightSpace.value = space
119
+ // },
120
+ // { deep: true }
121
+ // )
122
+
123
+ const outputSize = (): void => {
124
+ const el = document.getElementById(id.value)
125
+ if (!el) return
126
+
127
+ const elWidth = el.clientWidth
128
+ // const elItems = el.children
129
+ const elItems = Array.from(el.children).filter(
130
+ (item) => !item.classList.contains('nav-tabs')
131
+ )
132
+ const elItemsMarginLeft = parseInt(getComputedStyle(elItems[0]).marginLeft)
133
+ const elItemsMarginRight = parseInt(getComputedStyle(elItems[0]).marginRight)
134
+ const childrenMarginY = elItemsMarginLeft + elItemsMarginRight
135
+
136
+ let childrenWidth = -10 // TODO Найти способ лучше. Не всегда совпадает ширина элементов с шириной родительского элемента
137
+ let count = 0
138
+ for (let i = 0; i < elItems.length; i++) {
139
+ childrenWidth += elItems[i].clientWidth + childrenMarginY
140
+ // const isWrap = elWidth - rightSpace.value < childrenWidth
141
+ const isWrap = elWidth < childrenWidth
142
+
143
+ if (isWrap) break
144
+ count++
145
+ }
146
+
147
+ visibleCount.value = count
148
+ }
149
+
150
+ const setResizeObserve = (): void => {
151
+ const el = document.getElementById(id.value)
152
+
153
+ if (!el) {
154
+ setTimeout(setResizeObserve, 0)
155
+ return
156
+ }
157
+
158
+ new ResizeObserver(outputSize).observe(el)
159
+ }
160
+ const id = ref<string>('')
161
+ onMounted(() => {
162
+ id.value = `tool-actions-${useUniqueId()}`
163
+ setResizeObserve()
164
+ })
165
+ </script>
166
+
167
+ <style lang="scss" scoped>
168
+ .btn {
169
+ &:disabled {
170
+ color: var(--btn-link-disabled);
171
+ }
172
+ &-group {
173
+ margin-top: 10px;
174
+ box-shadow: none;
175
+ position: relative;
176
+ overflow: hidden;
177
+ display: flex;
178
+ flex-wrap: wrap;
179
+ min-height: 25px;
180
+ height: 25px;
181
+ box-sizing: content-box;
182
+
183
+ &__file {
184
+ display: none;
185
+ }
186
+ }
187
+ }
188
+ </style>