bfg-common 1.5.40 → 1.5.41

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