bfg-common 1.5.39 → 1.5.40

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 (198) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +2 -1
  7. package/assets/localization/local_en.json +2 -1
  8. package/assets/localization/local_hy.json +2 -1
  9. package/assets/localization/local_kk.json +2 -1
  10. package/assets/localization/local_ru.json +2 -1
  11. package/assets/localization/local_zh.json +2 -2
  12. package/assets/scss/common/normalize.scss +339 -339
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +165 -165
  15. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  16. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  17. package/components/atoms/perPage/PerPage.vue +58 -58
  18. package/components/atoms/stack/StackBlock.vue +185 -185
  19. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  20. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  21. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  22. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  23. package/components/atoms/tooltip/Signpost.vue +227 -227
  24. package/components/common/accordion/Recursion.vue +222 -222
  25. package/components/common/browse/BrowseNew.vue +237 -237
  26. package/components/common/browse/BrowseOld.vue +217 -217
  27. package/components/common/browse/blocks/contents/Files.vue +37 -37
  28. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  29. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  30. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  31. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  32. package/components/common/browse/lib/models/interfaces.ts +5 -5
  33. package/components/common/context/Context.vue +111 -111
  34. package/components/common/context/lib/models/interfaces.ts +31 -31
  35. package/components/common/context/recursion/Recursion.vue +87 -87
  36. package/components/common/context/recursion/RecursionNew.vue +238 -238
  37. package/components/common/context/recursion/RecursionOld.vue +228 -228
  38. package/components/common/details/DetailsItem.vue +109 -109
  39. package/components/common/diagramMain/DiagramMain.vue +897 -897
  40. package/components/common/diagramMain/Header.vue +214 -214
  41. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  42. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  43. package/components/common/diagramMain/lib/models/types.ts +21 -21
  44. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  45. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  46. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  47. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  48. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  49. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  50. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  51. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  52. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  53. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  54. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  55. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  57. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  58. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  59. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  60. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  61. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  62. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  63. package/components/common/diagramMain/port/Ports.vue +47 -47
  64. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  65. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  66. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  67. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  68. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  69. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  70. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  71. package/components/common/pages/home/StatusContent.vue +49 -49
  72. package/components/common/pages/home/headline/Headline.vue +45 -45
  73. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  74. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  75. package/components/common/pages/home/resource/lib/models/interfaces.ts +4 -1
  76. package/components/common/pages/home/resource/lib/utils/resourceMeter.ts +4 -1
  77. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  78. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  79. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  80. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  81. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  82. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  83. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  84. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  85. package/components/common/pages/packages/Packages.vue +208 -208
  86. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  87. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  88. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  89. package/components/common/portlets/tag/Portlet.vue +433 -433
  90. package/components/common/recursionTree/RecursionTree.vue +223 -223
  91. package/components/common/select/button/ButtonDropdown.vue +108 -108
  92. package/components/common/spiceConsole/Drawer.vue +370 -370
  93. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  94. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  95. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  96. package/components/common/split/vertical/Vertical.vue +160 -160
  97. package/components/common/tools/Actions.vue +188 -188
  98. package/components/common/vm/actions/add/Add.vue +772 -770
  99. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  100. package/components/common/vm/actions/clone/Clone.vue +668 -668
  101. package/components/common/vm/actions/clone/lib/config/steps.ts +178 -178
  102. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  103. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  104. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  105. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  106. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  145. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  146. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  147. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  148. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  149. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  150. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  151. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  166. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  167. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  168. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  169. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  170. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  171. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  172. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  173. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  174. package/components/common/vm/actions/common/select/createType/CreateType.vue +74 -74
  175. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  176. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  177. package/components/common/vm/actions/common/select/template/Template.vue +65 -62
  178. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  179. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  180. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  181. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  182. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  183. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  184. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  185. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  186. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  187. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  188. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  189. package/composables/productNameLocal.ts +30 -30
  190. package/composables/useAppVersion.ts +21 -21
  191. package/package.json +2 -2
  192. package/plugins/date.ts +233 -233
  193. package/plugins/directives.ts +24 -24
  194. package/public/spice-console/lib/images/bitmap.js +203 -203
  195. package/public/spice-console/network/spicechannel.js +383 -383
  196. package/store/main/mutations.ts +7 -7
  197. package/store/main/state.ts +7 -7
  198. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -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>