bfg-common 1.0.73 → 1.0.75

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 (674) hide show
  1. package/.eslintrc.js +21 -21
  2. package/.idea/inspectionProfiles/Project_Default.xml +48 -48
  3. package/.idea/modules.xml +7 -7
  4. package/.idea/prettier.xml +5 -5
  5. package/.idea/uikit.iml +11 -11
  6. package/.idea/vcs.xml +5 -5
  7. package/.prettierrc +4 -4
  8. package/PROJECT_STRUCTURE.md +42 -42
  9. package/README.md +42 -42
  10. package/assets/img/icons/icon-hcs.svg +3 -3
  11. package/assets/img/icons/icon-life-m-dark.svg +3 -3
  12. package/assets/img/icons/icon-life-m-light.svg +3 -3
  13. package/assets/img/icons/icon-ro-dark.svg +1 -1
  14. package/assets/img/icons/icon-ro-light.svg +2 -2
  15. package/assets/img/icons/icons-sprite-dark-6.svg +1 -1
  16. package/assets/img/icons/icons-sprite-light-6.svg +1 -1
  17. package/assets/img/icons/info.svg +8 -8
  18. package/assets/img/icons/vc.svg +52 -52
  19. package/assets/img/logo copy.svg +50 -50
  20. package/assets/img/logo.svg +51 -51
  21. package/assets/localization/local_be.json +2035 -2035
  22. package/assets/localization/local_en.json +2035 -2035
  23. package/assets/localization/local_hy.json +2035 -2035
  24. package/assets/localization/local_kk.json +2035 -2035
  25. package/assets/localization/local_ru.json +2035 -2035
  26. package/assets/localization/local_zh.json +2035 -2035
  27. package/assets/scss/clarity/clr-ui.min.css +8 -8
  28. package/assets/scss/common/animations.scss +28 -28
  29. package/assets/scss/common/global.scss +172 -172
  30. package/assets/scss/common/icons/icons-1.scss +188 -188
  31. package/assets/scss/common/icons/icons-2.scss +208 -208
  32. package/assets/scss/common/icons/icons-3.scss +176 -176
  33. package/assets/scss/common/icons/icons-4.scss +179 -179
  34. package/assets/scss/common/icons/icons-5.scss +53 -53
  35. package/assets/scss/common/icons/icons-6.scss +29 -29
  36. package/assets/scss/common/icons/icons.scss +15 -15
  37. package/assets/scss/common/mixins.scss +39 -39
  38. package/assets/scss/common/normalize.scss +320 -320
  39. package/assets/scss/common/theme.scss +230 -230
  40. package/assets/scss/common/utilities.scss +18 -18
  41. package/assets/scss/common/variables.scss +43 -43
  42. package/assets/scss/main.scss +13 -13
  43. package/components/atoms/DiagramIcon.vue +287 -287
  44. package/components/atoms/TheIcon.vue +1687 -1687
  45. package/components/atoms/TheIcon2.vue +318 -318
  46. package/components/atoms/alert/Alert.spec.ts +38 -38
  47. package/components/atoms/alert/Alert.vue +84 -84
  48. package/components/atoms/alert/Notification.spec.ts +34 -34
  49. package/components/atoms/alert/Notification.vue +167 -167
  50. package/components/atoms/alert/models/enums.ts +12 -12
  51. package/components/atoms/alert/models/interfaces.ts +27 -27
  52. package/components/atoms/alert/models/types.ts +7 -7
  53. package/components/atoms/autocomplete/Autocomplete.vue +236 -236
  54. package/components/atoms/collapse/CollapseNav.vue +158 -158
  55. package/components/atoms/collapse/CollapseNavItem.vue +190 -190
  56. package/components/atoms/collapse/models/interfaces.ts +9 -9
  57. package/components/atoms/combobox/Combobox.vue +147 -147
  58. package/components/atoms/datepicker/Datepicker.vue +612 -612
  59. package/components/atoms/datepicker/config/allShortMonths.ts +103 -103
  60. package/components/atoms/datepicker/config/datapicker.ts +43 -43
  61. package/components/atoms/datepicker/models/interfaces.ts +8 -8
  62. package/components/atoms/dropdown/Portlet.spec.ts +26 -26
  63. package/components/atoms/dropdown/Portlet.vue +111 -111
  64. package/components/atoms/dropdown/dropdown/Dropdown.vue +148 -148
  65. package/components/atoms/dropdown/dropdown/models/interfaces.ts +8 -8
  66. package/components/atoms/dropdown/tree/Tree.vue +134 -134
  67. package/components/atoms/dropdown/tree/models/interfaces.ts +9 -9
  68. package/components/atoms/input/Search.vue +16 -16
  69. package/components/atoms/list/SelectList.vue +62 -62
  70. package/components/atoms/list/SimpleList.vue +29 -29
  71. package/components/atoms/list/dragDropList/DragDropList.vue +139 -139
  72. package/components/atoms/list/dragDropList/config/events.ts +4 -4
  73. package/components/atoms/loader/BarLoader.vue +21 -21
  74. package/components/atoms/loader/Loader.vue +26 -26
  75. package/components/atoms/loader/PreLoader.vue +34 -34
  76. package/components/atoms/loader/Preloader.spec.ts +24 -24
  77. package/components/atoms/modal/Modal.spec.ts +55 -55
  78. package/components/atoms/modal/Modal.vue +241 -241
  79. package/components/atoms/modal/bySteps/BySteps.spec.ts +66 -66
  80. package/components/atoms/modal/bySteps/BySteps.vue +234 -234
  81. package/components/atoms/modal/byStepsSecond/ByStepsSecond.vue +174 -174
  82. package/components/atoms/models/interfaces.ts +11 -11
  83. package/components/atoms/nav/NavBar.spec.ts +34 -34
  84. package/components/atoms/nav/NavBar.vue +116 -116
  85. package/components/atoms/nav/VerticalNavBar.vue +89 -89
  86. package/components/atoms/nav/models/interfaces.ts +5 -5
  87. package/components/atoms/notificationBar/NotificationBar.vue +174 -174
  88. package/components/atoms/notificationBar/models/enums.ts +27 -27
  89. package/components/atoms/notificationBar/models/interfaces.ts +6 -6
  90. package/components/atoms/notificationBar/models/types.ts +1 -1
  91. package/components/atoms/perPage/PerPage.vue +52 -52
  92. package/components/atoms/popover/Popover.vue +48 -48
  93. package/components/atoms/popup/SimplePopup.vue +90 -90
  94. package/components/atoms/select/TheSelect.vue +175 -175
  95. package/components/atoms/select/models/interfaces.ts +4 -4
  96. package/components/atoms/stack/StackBlock.vue +171 -171
  97. package/components/atoms/stack/StackContent.vue +60 -60
  98. package/components/atoms/step/VerticalStep.spec.ts +68 -68
  99. package/components/atoms/step/VerticalStep.vue +104 -104
  100. package/components/atoms/step/models/verticalStepItem.ts +7 -7
  101. package/components/atoms/switch/Switch.vue +107 -107
  102. package/components/atoms/table/compact/Compact.vue +526 -526
  103. package/components/atoms/table/compact/models/interfaces.ts +10 -10
  104. package/components/atoms/table/dataGrid/DataGrid.spec.ts +61 -61
  105. package/components/atoms/table/dataGrid/DataGrid.vue +1306 -1306
  106. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +204 -204
  107. package/components/atoms/table/dataGrid/DataGridPage.vue +189 -189
  108. package/components/atoms/table/dataGrid/DataGridPagination.vue +83 -83
  109. package/components/atoms/table/dataGrid/config/itemsPerPage.ts +20 -20
  110. package/components/atoms/table/dataGrid/models/interfaces.ts +24 -24
  111. package/components/atoms/table/dataGrid/models/types.ts +5 -5
  112. package/components/atoms/table/dataGrid/utils/constructDataTable.ts +33 -33
  113. package/components/atoms/table/info/Info.vue +60 -60
  114. package/components/atoms/table/info/models/interfaces.ts +6 -6
  115. package/components/atoms/table/simpleEvent/SimpleEvent.vue +98 -98
  116. package/components/atoms/table/simpleEvent/models/interfaces.ts +9 -9
  117. package/components/atoms/table/simpleInfo/SimpleInfo.vue +68 -68
  118. package/components/atoms/table/simpleInfo/models/interfaces.ts +4 -4
  119. package/components/atoms/table/simpleTable/SimpleTable.vue +291 -291
  120. package/components/atoms/table/simpleTable/models/interfaces.ts +10 -10
  121. package/components/atoms/tabs/Tabs.vue +189 -189
  122. package/components/atoms/tabs/VerticalTabs.vue +81 -81
  123. package/components/atoms/tabs/models/interfaces.ts +4 -4
  124. package/components/atoms/tabs/models/types.ts +1 -1
  125. package/components/atoms/tooltip/Models/interfaces.ts +4 -4
  126. package/components/atoms/tooltip/Signpost.vue +224 -224
  127. package/components/atoms/tooltip/Text.vue +39 -39
  128. package/components/atoms/tooltip/Tooltip.vue +57 -57
  129. package/components/atoms/tooltip/TooltipError.vue +113 -113
  130. package/components/common/accordion/Accordion.vue +183 -183
  131. package/components/common/accordion/Recursion.vue +212 -212
  132. package/components/common/accordion/models/enums.ts +5 -5
  133. package/components/common/accordion/models/interfaces.ts +15 -15
  134. package/components/common/accordion/models/types.ts +1 -1
  135. package/components/common/accordion/utils/accordion.ts +31 -31
  136. package/components/common/adapterManager/AdapterManager.vue +715 -715
  137. package/components/common/adapterManager/AddAdapterModal.vue +464 -464
  138. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -82
  139. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -62
  140. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -62
  141. package/components/common/adapterManager/config/index.ts +19 -19
  142. package/components/common/adapterManager/ui/NoSelectedAdapter.vue +39 -39
  143. package/components/common/adapterManager/ui/SecondTitle.vue +37 -37
  144. package/components/common/adapterManager/ui/actions/ActionsBar.vue +93 -93
  145. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +28 -28
  146. package/components/common/adapterManager/ui/actions/MoveDownAdapterButton.vue +33 -33
  147. package/components/common/adapterManager/ui/actions/MoveUpAdapterButton.vue +33 -33
  148. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +34 -34
  149. package/components/common/adapterManager/ui/actions/VerticalSeparator.vue +10 -10
  150. package/components/common/adapterManager/ui/table/Adapters.vue +91 -91
  151. package/components/common/adapterManager/ui/table/Header.vue +89 -89
  152. package/components/common/adapterManager/ui/table/Table.vue +167 -167
  153. package/components/common/addNetworking/AddNetworking.vue +982 -982
  154. package/components/common/addNetworking/Wizard.vue +286 -286
  155. package/components/common/addNetworking/config/addNetworkingSteps.ts +404 -404
  156. package/components/common/addNetworking/config/index.ts +46 -46
  157. package/components/common/addNetworking/config/initialData.ts +78 -78
  158. package/components/common/addNetworking/config/portPropertiesStep.ts +19 -19
  159. package/components/common/addNetworking/config/selectSwitch.ts +19 -19
  160. package/components/common/addNetworking/config/sendData.ts +87 -87
  161. package/components/common/addNetworking/config/temporaryData.ts +7 -7
  162. package/components/common/addNetworking/config/validation.ts +23 -23
  163. package/components/common/addNetworking/mappers/mappers.ts +166 -166
  164. package/components/common/addNetworking/modals/SelectNetwork.vue +149 -149
  165. package/components/common/addNetworking/modals/SelectStandardSwitch.vue +125 -125
  166. package/components/common/addNetworking/modals/SelectSwitch.vue +114 -114
  167. package/components/common/addNetworking/models/enums.ts +6 -6
  168. package/components/common/addNetworking/models/interfaces.ts +207 -207
  169. package/components/common/addNetworking/models/types.ts +4 -4
  170. package/components/common/addNetworking/steps/ConnectionSettings.vue +269 -269
  171. package/components/common/addNetworking/steps/CreateStandardSwitch.vue +91 -91
  172. package/components/common/addNetworking/steps/Header.vue +52 -52
  173. package/components/common/addNetworking/steps/IpFourSettings.vue +361 -361
  174. package/components/common/addNetworking/steps/PhysicalAdapter.vue +24 -24
  175. package/components/common/addNetworking/steps/PortProperties.vue +481 -481
  176. package/components/common/addNetworking/steps/ReadyComplete.vue +29 -29
  177. package/components/common/addNetworking/steps/SelectConnectionType.vue +106 -106
  178. package/components/common/addNetworking/steps/SelectedTargetDevice.vue +563 -563
  179. package/components/common/addNetworking/utils/index.ts +212 -212
  180. package/components/common/browse/Browse.vue +182 -182
  181. package/components/common/browse/blocks/Container.vue +102 -102
  182. package/components/common/browse/blocks/Title.vue +66 -66
  183. package/components/common/browse/blocks/contents/Files.vue +68 -68
  184. package/components/common/browse/blocks/info/Date.vue +21 -21
  185. package/components/common/browse/blocks/info/Size.vue +17 -17
  186. package/components/common/browse/blocks/info/Text.vue +16 -16
  187. package/components/common/browse/blocks/models/types.ts +1 -1
  188. package/components/common/browse/models/interfaces.ts +5 -5
  189. package/components/common/context/Context.spec.ts +20 -20
  190. package/components/common/context/Context.vue +97 -97
  191. package/components/common/context/ContextRecursion.spec.ts +55 -55
  192. package/components/common/context/ContextRecursion.vue +251 -251
  193. package/components/common/context/models/interfaces.ts +26 -26
  194. package/components/common/details/DetailsItem.vue +106 -106
  195. package/components/common/details/DetailsList.vue +23 -23
  196. package/components/common/details/model/interfaces.ts +9 -9
  197. package/components/common/diagramMain/Diagram.vue +186 -186
  198. package/components/common/diagramMain/DiagramMain.vue +979 -979
  199. package/components/common/diagramMain/Header.vue +163 -163
  200. package/components/common/diagramMain/Highlights.vue +102 -102
  201. package/components/common/diagramMain/adapter/Adapter.vue +105 -105
  202. package/components/common/diagramMain/adapter/AdapterItem.vue +227 -227
  203. package/components/common/diagramMain/adapter/AdapterItems.vue +57 -57
  204. package/components/common/diagramMain/adapter/Block.vue +41 -41
  205. package/components/common/diagramMain/adapter/Contents.vue +96 -96
  206. package/components/common/diagramMain/adapter/Lines.vue +52 -52
  207. package/components/common/diagramMain/adapter/SecondBlock.vue +42 -42
  208. package/components/common/diagramMain/config/index.ts +51 -51
  209. package/components/common/diagramMain/config/initial.ts +37 -37
  210. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +236 -236
  211. package/components/common/diagramMain/modals/MigrateVmkernelAdapter.vue +535 -535
  212. package/components/common/diagramMain/modals/config/adapterModal.ts +110 -110
  213. package/components/common/diagramMain/modals/config/diagramConfig.ts +17 -17
  214. package/components/common/diagramMain/modals/config/index.ts +57 -57
  215. package/components/common/diagramMain/modals/config/initial.ts +181 -181
  216. package/components/common/diagramMain/modals/config/migrateVmkernelAdapterSteps.ts +81 -81
  217. package/components/common/diagramMain/modals/config/networkModal.ts +337 -337
  218. package/components/common/diagramMain/modals/config/portModal.ts +201 -201
  219. package/components/common/diagramMain/modals/config/switchModal.ts +172 -172
  220. package/components/common/diagramMain/modals/config/vCenterModal.ts +30 -30
  221. package/components/common/diagramMain/modals/config/validation.ts +2 -2
  222. package/components/common/diagramMain/modals/config/vmKernelAdapter.ts +90 -90
  223. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +41 -41
  224. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +491 -491
  225. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +714 -714
  226. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +211 -211
  227. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +183 -183
  228. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +161 -161
  229. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +166 -166
  230. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +393 -393
  231. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -339
  232. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -202
  233. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -226
  234. package/components/common/diagramMain/modals/steps/ConnectionSettings.vue +206 -206
  235. package/components/common/diagramMain/modals/steps/SelectVmkernelAdapter.vue +221 -221
  236. package/components/common/diagramMain/modals/steps/VmkernelAdapterReadyComplete.vue +50 -50
  237. package/components/common/diagramMain/modals/utils/index.ts +9 -9
  238. package/components/common/diagramMain/modals/viewSettings/ViewSettings.vue +171 -171
  239. package/components/common/diagramMain/modals/viewSettings/ViewSettingsModal.vue +93 -93
  240. package/components/common/diagramMain/models/enums.ts +26 -26
  241. package/components/common/diagramMain/models/interfaces.ts +565 -565
  242. package/components/common/diagramMain/models/types.ts +9 -9
  243. package/components/common/diagramMain/network/Block.vue +55 -55
  244. package/components/common/diagramMain/network/Contents.vue +238 -238
  245. package/components/common/diagramMain/network/Lines.vue +65 -65
  246. package/components/common/diagramMain/network/Network.vue +117 -117
  247. package/components/common/diagramMain/network/NoNetwork.vue +47 -47
  248. package/components/common/diagramMain/network/SecondBlock.vue +51 -51
  249. package/components/common/diagramMain/port/Port.vue +301 -301
  250. package/components/common/diagramMain/port/Ports.vue +41 -41
  251. package/components/common/diagramMain/switch/Switch.vue +71 -71
  252. package/components/common/diagramMain/switch/SwitchSelected.vue +29 -29
  253. package/components/common/diagramMain/utils/utils.ts +218 -218
  254. package/components/common/feedback/Buttons.vue +232 -232
  255. package/components/common/feedback/Feedback.vue +236 -236
  256. package/components/common/feedback/Message.vue +468 -468
  257. package/components/common/feedback/VisitPortal.vue +54 -54
  258. package/components/common/feedback/config/drawingPanel.ts +31 -31
  259. package/components/common/feedback/config/feedbackTabs.ts +24 -24
  260. package/components/common/feedback/models/interfaces.ts +15 -15
  261. package/components/common/graph/Graph.vue +107 -107
  262. package/components/common/graph/utils/renderGraph.ts +389 -389
  263. package/components/common/headline/Headline.vue +32 -32
  264. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +359 -359
  265. package/components/common/mainNavigationPanel/models/interfaces.ts +6 -6
  266. package/components/common/mainNavigationPanel/models/types.ts +1 -1
  267. package/components/common/modals/Confirmation.vue +71 -71
  268. package/components/common/modals/Rename.vue +165 -165
  269. package/components/common/modals/config/defaultForm.ts +18 -18
  270. package/components/common/modals/config/renameLabelWidth.ts +3 -3
  271. package/components/common/modals/models/interfaces.ts +5 -5
  272. package/components/common/monitor/advanced/Advanced.vue +164 -164
  273. package/components/common/monitor/advanced/GraphView.vue +132 -132
  274. package/components/common/monitor/advanced/models/interfaces.ts +6 -6
  275. package/components/common/monitor/advanced/models/types.ts +1 -1
  276. package/components/common/monitor/advanced/table/Table.vue +90 -90
  277. package/components/common/monitor/advanced/table/config/performanceDatatable.ts +116 -116
  278. package/components/common/monitor/advanced/table/models/interfaces.ts +12 -12
  279. package/components/common/monitor/advanced/table/models/types.ts +10 -10
  280. package/components/common/monitor/advanced/tools/Tools.vue +302 -302
  281. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +125 -125
  282. package/components/common/monitor/advanced/tools/chartOptionsModal/Notification.vue +33 -33
  283. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +79 -79
  284. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/config/optionsActions.ts +13 -13
  285. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +53 -53
  286. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +48 -48
  287. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/Table.vue +113 -113
  288. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/config/tableConfig.ts +71 -71
  289. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/config/utils.ts +634 -634
  290. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/interfaces.ts +28 -28
  291. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/models/types.ts +5 -5
  292. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +21 -21
  293. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +381 -381
  294. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/config/dateForm.ts +59 -59
  295. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +107 -107
  296. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/config/objectTable.ts +54 -54
  297. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/interfaces.ts +4 -4
  298. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/models/types.ts +1 -1
  299. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/Metrics.vue +42 -42
  300. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/config/optionsMetrics.ts +98 -98
  301. package/components/common/monitor/advanced/tools/chartOptionsModal/models/types.ts +3 -3
  302. package/components/common/monitor/advanced/tools/config/advancedToolbar.ts +73 -73
  303. package/components/common/monitor/advanced/tools/models/interfaces.ts +4 -4
  304. package/components/common/monitor/config/getValidDateByOption.ts +14 -14
  305. package/components/common/monitor/models/interfaces.ts +19 -19
  306. package/components/common/monitor/overview/Overview.vue +412 -412
  307. package/components/common/monitor/overview/filters/Filters.vue +210 -210
  308. package/components/common/monitor/overview/filters/config/filterOptions.ts +56 -56
  309. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +220 -220
  310. package/components/common/monitor/overview/filters/customIntervalModal/config/dateChecker.ts +35 -35
  311. package/components/common/monitor/overview/filters/models/interfaces.ts +6 -6
  312. package/components/common/monitor/overview/filters/models/types.ts +3 -3
  313. package/components/common/perPage/PerPage.vue +51 -51
  314. package/components/common/recursionTree/RecursionTree.vue +201 -201
  315. package/components/common/recursionTree/models/interfaces.ts +19 -19
  316. package/components/common/resource/models/interfaces.ts +9 -9
  317. package/components/common/resource/models/types.ts +1 -1
  318. package/components/common/resource/progressBlock/ProgressBlock.vue +105 -105
  319. package/components/common/resource/simple/Simple.vue +58 -58
  320. package/components/common/resource/simple/models/enums.ts +5 -5
  321. package/components/common/resource/utils.ts +33 -33
  322. package/components/common/select/button/ButtonDropdown.vue +100 -100
  323. package/components/common/select/button/models/interfaces.ts +6 -6
  324. package/components/common/select/radio/RadioGroup.vue +71 -108
  325. package/components/common/select/radio/models/interfaces.ts +12 -8
  326. package/components/common/spiceConsole/Drawer.vue +241 -241
  327. package/components/common/spiceConsole/SpiceConsole.vue +87 -87
  328. package/components/common/spiceConsole/keyboard/Keyboard.vue +402 -402
  329. package/components/common/spiceConsole/keyboard/config/keyboardRows.ts +891 -891
  330. package/components/common/spiceConsole/keyboard/models/interfaces.ts +17 -17
  331. package/components/common/spiceConsole/models/types.ts +1 -1
  332. package/components/common/split/horizontal/Horizontal.vue +306 -306
  333. package/components/common/split/horizontal/models/interfaces.ts +5 -5
  334. package/components/common/split/vertical/Vertical.vue +213 -213
  335. package/components/common/split/vertical/models/interfaces.ts +3 -3
  336. package/components/common/tools/Actions.vue +163 -163
  337. package/components/common/tools/models/interfaces.ts +6 -6
  338. package/components/common/vm/actions/add/Add.vue +687 -687
  339. package/components/common/vm/actions/add/FolderTreeView.vue +83 -83
  340. package/components/common/vm/actions/add/config/capabilities.ts +670 -670
  341. package/components/common/vm/actions/add/customizeHardware/CustomizeHardware.vue +236 -236
  342. package/components/common/vm/actions/add/customizeHardware/config/navItems.ts +19 -19
  343. package/components/common/vm/actions/add/customizeHardware/models/interfaces.ts +7 -7
  344. package/components/common/vm/actions/add/customizeHardware/virtualHardware/VirtualHardware.vue +611 -611
  345. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/BrowseView.vue +203 -203
  346. package/components/common/vm/actions/add/customizeHardware/virtualHardware/browseView/models/interfaces.ts +8 -8
  347. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/Bus.vue +127 -127
  348. package/components/common/vm/actions/add/customizeHardware/virtualHardware/bus/config/options.ts +13 -13
  349. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +223 -223
  350. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/fileTypes.ts +9 -9
  351. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/config/options.ts +11 -11
  352. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +55 -55
  353. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cdDvdDrive/models/types.ts +1 -1
  354. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/binaryOptions.ts +12 -12
  355. package/components/common/vm/actions/add/customizeHardware/virtualHardware/config/dropdownItems.ts +52 -52
  356. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +97 -97
  357. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Cpu.vue +372 -372
  358. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuHotPlug.vue +49 -49
  359. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -220
  360. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Hv.vue +93 -93
  361. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Iommu.vue +52 -52
  362. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/MaxCpu.vue +105 -105
  363. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Pc.vue +54 -54
  364. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/Sa.vue +102 -102
  365. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/config/cpuOptions.ts +19 -19
  366. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/Shares.vue +155 -155
  367. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/shares/config/options.ts +28 -28
  368. package/components/common/vm/actions/add/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +58 -58
  369. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/Limit.vue +214 -214
  370. package/components/common/vm/actions/add/customizeHardware/virtualHardware/limit/config/options.ts +28 -28
  371. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/Memory.vue +284 -284
  372. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/MemoryHotPlug.vue +53 -53
  373. package/components/common/vm/actions/add/customizeHardware/virtualHardware/memory/config/memoryOptions.ts +23 -23
  374. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/interfaces.ts +125 -125
  375. package/components/common/vm/actions/add/customizeHardware/virtualHardware/models/types.ts +4 -4
  376. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/DiskFile.vue +24 -24
  377. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/Location.vue +171 -171
  378. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/MaximumSize.vue +27 -27
  379. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +452 -452
  380. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +80 -80
  381. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/cache/config/options.ts +7 -7
  382. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +151 -151
  383. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/limitIops/config/options.ts +28 -28
  384. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +87 -87
  385. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/mode/config/options.ts +18 -18
  386. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +87 -87
  387. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/provisioning/config/options.ts +15 -15
  388. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +85 -85
  389. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newHardDisk/sharing/config/options.ts +12 -12
  390. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/Location.vue +141 -141
  391. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +256 -256
  392. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +86 -86
  393. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/adapterType/config/options.ts +9 -9
  394. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +140 -140
  395. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newNetwork/macAddress/config/options.ts +11 -11
  396. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +157 -157
  397. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/config/options.ts +7 -7
  398. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +44 -44
  399. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +49 -49
  400. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/config/options.ts +10 -10
  401. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +27 -27
  402. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  403. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +56 -56
  404. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +65 -65
  405. package/components/common/vm/actions/add/customizeHardware/virtualHardware/newUsbController/config/options.ts +6 -6
  406. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/InputDevices.vue +21 -21
  407. package/components/common/vm/actions/add/customizeHardware/virtualHardware/other/Other.vue +27 -27
  408. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/Reservation.vue +231 -231
  409. package/components/common/vm/actions/add/customizeHardware/virtualHardware/reservation/config/options.ts +33 -33
  410. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/Graphics.vue +45 -45
  411. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +120 -120
  412. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/VideoCard.vue +173 -173
  413. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/config/options.ts +11 -11
  414. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/Model.vue +57 -57
  415. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/model/config/options.ts +10 -10
  416. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +82 -82
  417. package/components/common/vm/actions/add/customizeHardware/virtualHardware/videoCard/numberDisplays/config/options.ts +14 -14
  418. package/components/common/vm/actions/add/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  419. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/BootOptions.vue +110 -110
  420. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Menu.vue +45 -45
  421. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/Secure.vue +45 -45
  422. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +50 -50
  423. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/delay/config/config.ts +14 -14
  424. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +83 -83
  425. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/firmware/config/config.ts +11 -11
  426. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/Order.vue +195 -195
  427. package/components/common/vm/actions/add/customizeHardware/vmoptions/bootOptions/order/models/interfaces.ts +8 -8
  428. package/components/common/vm/actions/add/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +114 -114
  429. package/components/common/vm/actions/add/customizeHardware/vmoptions/models/interfaces.ts +34 -34
  430. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +45 -45
  431. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FileTransfer.vue +49 -49
  432. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/FolderSharing.vue +50 -50
  433. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +49 -49
  434. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/PowerControl.vue +49 -49
  435. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +230 -230
  436. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +82 -82
  437. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/config/config.ts +14 -14
  438. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +82 -82
  439. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/config/config.ts +12 -12
  440. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +50 -50
  441. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/keymap/config/config.ts +6 -6
  442. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +52 -52
  443. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/config/config.ts +11 -11
  444. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +134 -134
  445. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/models/interfaces.ts +5 -5
  446. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/password/utils.ts +12 -12
  447. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/SharePolicy.vue +52 -52
  448. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/config/config.ts +11 -11
  449. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +82 -82
  450. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/config/config.ts +12 -12
  451. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +82 -82
  452. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/type/config/config.ts +7 -7
  453. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +56 -56
  454. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/config/config.ts +14 -14
  455. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +82 -82
  456. package/components/common/vm/actions/add/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/config/config.ts +12 -12
  457. package/components/common/vm/actions/add/customizeHardware/vmoptions/tools/Tools.vue +63 -63
  458. package/components/common/vm/actions/add/models/enums.ts +89 -89
  459. package/components/common/vm/actions/add/models/interfaces.ts +126 -126
  460. package/components/common/vm/actions/add/models/types.ts +65 -65
  461. package/components/common/vm/actions/add/readyToComplete/ReadyToComplete.vue +15 -15
  462. package/components/common/vm/actions/add/select/compatibility/Compatibility.vue +151 -151
  463. package/components/common/vm/actions/add/select/computeResource/ComputeResource.spec.ts +479 -479
  464. package/components/common/vm/actions/add/select/computeResource/ComputeResource.vue +170 -170
  465. package/components/common/vm/actions/add/select/computeResource/TreeView.vue +126 -126
  466. package/components/common/vm/actions/add/select/createType/CreateType.vue +61 -61
  467. package/components/common/vm/actions/add/select/createType/config/items.ts +26 -26
  468. package/components/common/vm/actions/add/select/models/interfaces.ts +32 -32
  469. package/components/common/vm/actions/add/select/models/types.ts +44 -44
  470. package/components/common/vm/actions/add/select/name/Name.vue +215 -215
  471. package/components/common/vm/actions/add/select/os/os.vue +221 -221
  472. package/components/common/vm/actions/add/select/storage/Storage.vue +176 -176
  473. package/components/common/vm/actions/add/select/storage/config/config.ts +148 -148
  474. package/components/common/vm/actions/add/select/storage/models/types.ts +15 -15
  475. package/components/common/vm/actions/add/utils.ts +118 -118
  476. package/components/common/vm/actions/editSettings/EditSettings.vue +312 -312
  477. package/components/common/vm/actions/editSettings/models/types.ts +23 -23
  478. package/components/common/vm/actions/editSettings/utils.ts +48 -48
  479. package/components/common/vm/actions/models/interfaces.ts +6 -6
  480. package/components/common/vm/actions/models/types.ts +11 -11
  481. package/components/common/vm/actions/utils.ts +221 -221
  482. package/components/common/wizards/datastore/add/Add.vue +382 -382
  483. package/components/common/wizards/datastore/add/config/stepItems.ts +160 -160
  484. package/components/common/wizards/datastore/add/local/Local.vue +67 -67
  485. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +159 -159
  486. package/components/common/wizards/datastore/add/local/createName/config/defaultForm.ts +15 -15
  487. package/components/common/wizards/datastore/add/models/interfaces.ts +35 -35
  488. package/components/common/wizards/datastore/add/models/types.ts +14 -14
  489. package/components/common/wizards/datastore/add/nfs/Nfs.vue +91 -91
  490. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +95 -95
  491. package/components/common/wizards/datastore/add/nfs/accessibility/config/tabsPannel.ts +24 -24
  492. package/components/common/wizards/datastore/add/nfs/accessibility/models/interfaces.ts +9 -9
  493. package/components/common/wizards/datastore/add/nfs/accessibility/models/types.ts +5 -5
  494. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +141 -141
  495. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/compatibleTable.ts +54 -54
  496. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/hostsTableItems.ts +75 -75
  497. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/incompatibleTable.ts +68 -68
  498. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/config/tableKeys.ts +15 -15
  499. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +373 -373
  500. package/components/common/wizards/datastore/add/nfs/configuration/config/defaultForm.ts +33 -33
  501. package/components/common/wizards/datastore/add/nfs/configuration/models/interfaces.ts +12 -12
  502. package/components/common/wizards/datastore/add/nfs/configuration/serversList/DeletePopover.vue +97 -97
  503. package/components/common/wizards/datastore/add/nfs/configuration/serversList/ServersList.vue +123 -123
  504. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/serversListConfig.ts +41 -41
  505. package/components/common/wizards/datastore/add/nfs/configuration/serversList/config/tableKeys.ts +3 -3
  506. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/interfaces.ts +11 -11
  507. package/components/common/wizards/datastore/add/nfs/configuration/serversList/models/types.ts +1 -1
  508. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -54
  509. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/config/radioOptions.ts +24 -24
  510. package/components/common/wizards/datastore/add/nfs/version/Version.vue +70 -42
  511. package/components/common/wizards/datastore/add/nfs/version/config/versionOptions.ts +20 -20
  512. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +77 -77
  513. package/components/common/wizards/datastore/add/readyComplete/config/propertiesDetails.ts +165 -165
  514. package/components/common/wizards/datastore/add/readyComplete/models/interfaces.ts +4 -4
  515. package/components/common/wizards/datastore/add/sharedStorm/SharedStorm.vue +85 -85
  516. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +447 -447
  517. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/defaultForm.ts +18 -18
  518. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/config/selectOptions.ts +14 -14
  519. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/HostTable.vue +131 -131
  520. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/hostsTable.ts +87 -87
  521. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/hostTable/config/tableKeys.ts +11 -11
  522. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/interfaces.ts +55 -55
  523. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/models/types.ts +14 -14
  524. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +230 -230
  525. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/config/selectOptions.ts +46 -46
  526. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/graphicTooltip/graphicTooltip.vue +64 -64
  527. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/sizeGraphic/sizeGraphic.vue +225 -225
  528. package/components/common/wizards/datastore/add/sharedStorm/version/Version.vue +70 -39
  529. package/components/common/wizards/datastore/add/sharedStorm/version/config/versionOptions.ts +19 -21
  530. package/components/common/wizards/datastore/add/types/Types.vue +137 -77
  531. package/components/common/wizards/datastore/add/types/config/typeOptions.ts +39 -39
  532. package/components/common/wizards/datastore/add/utils.ts +69 -69
  533. package/components/models/interfaces.ts +14 -14
  534. package/composables/deepCopy.ts +21 -21
  535. package/composables/useDiff.ts +15 -15
  536. package/composables/useLocal.ts +36 -36
  537. package/composables/useLocalStorage.ts +45 -45
  538. package/composables/useThrottle.ts +32 -32
  539. package/composables/useUniqueId.ts +5 -5
  540. package/config/regExp.ts +13 -13
  541. package/eslint/index.js +15 -15
  542. package/eslint/no-import-type.js +17 -17
  543. package/eslint/no-invalid-type-prefix.js +32 -32
  544. package/minify.js +51 -51
  545. package/models/composables/useMyFetch/interfaces.ts +4 -4
  546. package/models/composables/useMyFetch/types.ts +1 -1
  547. package/models/enums.ts +21 -21
  548. package/models/interfaces.ts +29 -29
  549. package/models/plugins/date/interfaces.ts +5 -5
  550. package/models/plugins/date/types.ts +1 -1
  551. package/models/plugins/validation/interfaces.ts +21 -21
  552. package/models/plugins/validation/types.ts +1 -1
  553. package/models/store/host/interfaces.ts +38 -38
  554. package/models/store/interfaces.ts +47 -47
  555. package/models/store/network/interfaces.ts +13 -13
  556. package/models/store/storage/interfaces.ts +32 -32
  557. package/models/store/vm/interfaces.ts +207 -207
  558. package/models/types.ts +6 -6
  559. package/nuxt.config.ts +8 -8
  560. package/package.json +39 -39
  561. package/plugins/binary.ts +122 -122
  562. package/plugins/date.ts +179 -179
  563. package/plugins/recursion.ts +230 -230
  564. package/plugins/spice-console/spice.console.ts +128 -128
  565. package/plugins/text.ts +48 -48
  566. package/plugins/validation.ts +172 -172
  567. package/public/spice-console/application/WorkerProcess.js +3350 -3350
  568. package/public/spice-console/application/WorkerProcess_back.js +3144 -3144
  569. package/public/spice-console/application/WorkerProcess_meta.js +3102 -3102
  570. package/public/spice-console/application/WorkerProcess_reverse.js +3214 -3214
  571. package/public/spice-console/application/agent.js +175 -175
  572. package/public/spice-console/application/application.js +641 -641
  573. package/public/spice-console/application/checkActivity.js +50 -50
  574. package/public/spice-console/application/clientgui.js +842 -842
  575. package/public/spice-console/application/clipboard/clipboarddataparser.js +92 -92
  576. package/public/spice-console/application/clipboard/local/localClipboard.js +110 -110
  577. package/public/spice-console/application/clipboard.js +82 -82
  578. package/public/spice-console/application/codec.js +257 -257
  579. package/public/spice-console/application/imagecache.js +81 -81
  580. package/public/spice-console/application/inputmanager.js +270 -270
  581. package/public/spice-console/application/packetfactory.js +202 -202
  582. package/public/spice-console/application/packetfilter.js +103 -103
  583. package/public/spice-console/application/packetprocess.js +75 -75
  584. package/public/spice-console/application/rasteroperation.js +118 -118
  585. package/public/spice-console/application/spiceconnection.js +197 -197
  586. package/public/spice-console/application/stream.js +67 -67
  587. package/public/spice-console/application/virtualmouse.js +109 -109
  588. package/public/spice-console/keymaps/keyevent.js +36 -36
  589. package/public/spice-console/keymaps/keymap.js +229 -229
  590. package/public/spice-console/keymaps/keymapes.js +375 -375
  591. package/public/spice-console/keymaps/keymapesObj.js +316 -316
  592. package/public/spice-console/keymaps/keymapus.js +317 -317
  593. package/public/spice-console/keymaps/scanCodeObjModifier.js +65 -65
  594. package/public/spice-console/keymaps/scanCodeObjProvider.js +60 -60
  595. package/public/spice-console/lib/AsyncConsumer.js +204 -204
  596. package/public/spice-console/lib/AsyncWorker.js +60 -60
  597. package/public/spice-console/lib/CollisionDetector.js +27 -27
  598. package/public/spice-console/lib/DataLogger.js +197 -197
  599. package/public/spice-console/lib/GenericObjectPool.js +152 -152
  600. package/public/spice-console/lib/GlobalPool.js +114 -114
  601. package/public/spice-console/lib/ImageUncompressor.js +138 -138
  602. package/public/spice-console/lib/IntegrationBenchmark.js +64 -64
  603. package/public/spice-console/lib/PacketWorkerIdentifier.js +107 -107
  604. package/public/spice-console/lib/SyncAsyncHandler.js +46 -46
  605. package/public/spice-console/lib/base64.js +298 -298
  606. package/public/spice-console/lib/biginteger.js +1640 -1640
  607. package/public/spice-console/lib/bowser.js +276 -276
  608. package/public/spice-console/lib/decoder/dixie.js +7930 -7930
  609. package/public/spice-console/lib/decoder/jmuxer.js +2815 -2815
  610. package/public/spice-console/lib/displayRouter.js +83 -83
  611. package/public/spice-console/lib/encrypt.js +191 -191
  612. package/public/spice-console/lib/flipper.js +39 -39
  613. package/public/spice-console/lib/graphic.js +1230 -1230
  614. package/public/spice-console/lib/graphicdebug.js +223 -223
  615. package/public/spice-console/lib/images/bitmap.js +194 -194
  616. package/public/spice-console/lib/images/jsquic_family.js +83 -83
  617. package/public/spice-console/lib/images/jsquic_rgba.js +342 -342
  618. package/public/spice-console/lib/images/jsquic_uncompress.js +529 -529
  619. package/public/spice-console/lib/images/lz.js +717 -717
  620. package/public/spice-console/lib/images/png.js +275 -275
  621. package/public/spice-console/lib/jgestures.min.js +43 -43
  622. package/public/spice-console/lib/jquery-2.0.3.js +8829 -8829
  623. package/public/spice-console/lib/jquery-mousewheel.js +83 -83
  624. package/public/spice-console/lib/jquery-visibility.min.js +1 -1
  625. package/public/spice-console/lib/jsbn.js +578 -578
  626. package/public/spice-console/lib/jsbn2.js +675 -675
  627. package/public/spice-console/lib/lodash.4.0.0.min.js +136 -136
  628. package/public/spice-console/lib/modernizr.js +39 -39
  629. package/public/spice-console/lib/pixastic.js +3244 -3244
  630. package/public/spice-console/lib/prettyprint.js +794 -794
  631. package/public/spice-console/lib/prng4.js +64 -64
  632. package/public/spice-console/lib/queue.js +259 -259
  633. package/public/spice-console/lib/rasterEngine.js +907 -907
  634. package/public/spice-console/lib/rng.js +87 -87
  635. package/public/spice-console/lib/runqueue.js +103 -103
  636. package/public/spice-console/lib/sha1.js +124 -124
  637. package/public/spice-console/lib/stuckkeyshandler.js +122 -122
  638. package/public/spice-console/lib/timelapsedetector.js +62 -62
  639. package/public/spice-console/lib/utils.js +327 -327
  640. package/public/spice-console/lib/virtualjoystick.js +370 -370
  641. package/public/spice-console/network/busconnection.js +195 -195
  642. package/public/spice-console/network/clusternodechooser.js +49 -49
  643. package/public/spice-console/network/connectioncontrol.js +60 -60
  644. package/public/spice-console/network/packetcontroller.js +62 -62
  645. package/public/spice-console/network/packetextractor.js +73 -73
  646. package/public/spice-console/network/packetlinkfactory.js +64 -64
  647. package/public/spice-console/network/packetreassembler.js +77 -77
  648. package/public/spice-console/network/reassemblerfactory.js +39 -39
  649. package/public/spice-console/network/sizedefiner.js +86 -86
  650. package/public/spice-console/network/socket.js +120 -120
  651. package/public/spice-console/network/socketqueue.js +95 -95
  652. package/public/spice-console/network/spicechannel.js +369 -369
  653. package/public/spice-console/network/websocketwrapper.js +75 -75
  654. package/public/spice-console/process/busprocess.js +309 -309
  655. package/public/spice-console/process/cursorprocess.js +110 -110
  656. package/public/spice-console/process/displaypreprocess.js +152 -152
  657. package/public/spice-console/process/displayprocess.js +210 -210
  658. package/public/spice-console/process/inputprocess.js +204 -204
  659. package/public/spice-console/process/mainprocess.js +78 -78
  660. package/public/spice-console/process/playbackprocess.js +233 -233
  661. package/public/spice-console/run.js +181 -181
  662. package/public/spice-console/spiceobjects/generated/protocol.js +537 -537
  663. package/public/spice-console/spiceobjects/spiceobjects.js +3474 -3474
  664. package/public/spice-console/swcanvas/swcanvas.js +82 -82
  665. package/public/spice-console/tools/generate.php +269 -269
  666. package/public/spice-console/tools/generateKeyboardLayout.php +63 -63
  667. package/public/spice-console/tools/generateSpiceObject.php +81 -81
  668. package/public/spice-console-minify/lib/decoder/dixie.min.js +4 -4
  669. package/public/spice-console-minify/lib/jgestures.min.js +24 -24
  670. package/public/spice-console-minify/lib/jquery-2.0.3.min.js +24 -24
  671. package/public/spice-console-minify/lib/jquery-mousewheel.min.js +11 -11
  672. package/public/spice-console-minify/lib/jquery-visibility.min.js +1 -1
  673. package/public/spice-console-minify/lib/lodash.4.0.0.min.js +5 -5
  674. package/tsconfig.json +4 -4
@@ -1,1306 +1,1306 @@
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 :id="tableWrapperId" 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 v-if="props.type" class="datagrid-row-sticky">
12
- <div
13
- :id="expandableCaret"
14
- class="datagrid-column datagrid-expandable-caret datagrid-fixed-column flex-align-center flex-justify-center"
15
- >
16
- <template v-if="props.type === 'checkbox'">
17
- <div
18
- class="clr-checkbox-wrapper flex-align-center flex-justify-center w-100"
19
- >
20
- <input
21
- :id="`${props.testId}-${inputId}-all`"
22
- v-model="selectedAll"
23
- type="checkbox"
24
- class="checkbox-btn"
25
- :value="-1"
26
- @change="changeAll"
27
- />
28
- <label
29
- :for="`${props.testId}-${inputId}-all`"
30
- class="clr-control-label"
31
- />
32
- </div>
33
- <div class="datagrid-column-separator"></div>
34
- </template>
35
- </div>
36
- <div
37
- v-if="$slots.toggleBlock"
38
- class="datagrid-toggle-block datagrid-column datagrid-fixed-width"
39
- >
40
- <div class="datagrid-column-flex">
41
- <div class="datagrid-column-separator">
42
- <span class="clr-sr-only" />
43
- <div class="datagrid-column-resize-tracker" />
44
- </div>
45
- </div>
46
- </div>
47
- </div>
48
- <div class="datagrid-row-scrollable">
49
- <div
50
- v-for="(item, key) in headItemsPresent"
51
- :key="key"
52
- :style="{
53
- width: columnsWidth[key][0],
54
- minWidth: columnsWidth[key][1],
55
- }"
56
- class="datagrid-column datagrid-fixed-width"
57
- >
58
- <div class="datagrid-column-flex">
59
- <button
60
- :id="`${props.testId}-sort-column-${key}`"
61
- :class="[
62
- 'datagrid-column-title',
63
- {
64
- 'default text-decoration-none':
65
- !item.sortColumn,
66
- },
67
- ]"
68
- @click="sortTable(item.sortColumn)"
69
- >
70
- <slot name="th" :key="key" :item="item">
71
- <span class="title-column">
72
- {{ item.text }}
73
- </span>
74
- </slot>
75
- <span
76
- v-if="item.sortColumn"
77
- class="sort-arrow-wrap"
78
- >
79
- <atoms-the-icon
80
- v-show="sortInfo[0] === item.sortColumn"
81
- :class="['sort-arrow', { down: sortInfo[1] }]"
82
- name="sort-arrow"
83
- />
84
- </span>
85
- </button>
86
- <div class="relative">
87
- <button
88
- v-if="item.hasFilter"
89
- :id="`${props.testId}-filter-icon-${key}`"
90
- class="datagrid-filter-toggle clr-anchor clr-smart-open-close"
91
- @click="filterShow[key] = !filterShow[key]"
92
- >
93
- <atoms-the-icon
94
- v-if="filterTerm[key]"
95
- class="filter-icon"
96
- name="filter-solid"
97
- style="fill: #0079b8"
98
- />
99
- <atoms-the-icon
100
- v-else
101
- class="filter-icon"
102
- name="filter"
103
- />
104
- </button>
105
- <atoms-popup-simple-popup
106
- v-model="filterShow[key]"
107
- :test-id="`${props.testId}-filter`"
108
- top="100%"
109
- right="0"
110
- >
111
- <input
112
- :id="`${props.testId}-filter-input-${key}`"
113
- v-model="filterTerm[key]"
114
- type="text"
115
- @input="filtering"
116
- />
117
- </atoms-popup-simple-popup>
118
- </div>
119
- <div
120
- v-show="!isShowHiddenInfo"
121
- class="datagrid-column-separator"
122
- @mousedown="setGrab(key, $event)"
123
- >
124
- <button
125
- :id="`${props.testId}-resize-tracker-${key}`"
126
- class="datagrid-column-handle drag-handle draggable"
127
- />
128
- <span class="clr-sr-only" />
129
- <div class="datagrid-column-resize-tracker" />
130
- </div>
131
- </div>
132
- </div>
133
- </div>
134
- </div>
135
- </div>
136
- </div>
137
-
138
- <template v-if="bodyItemsPresent.length">
139
- <div
140
- v-for="(item, key) in bodyItemsPresent"
141
- :key="item.id"
142
- :class="[
143
- 'datagrid-body-row datagrid-row animation',
144
- {
145
- 'datagrid-selected active': checkIsSelectedRow(
146
- item[0].id
147
- ),
148
- },
149
- ]"
150
- >
151
- <div>
152
- <div
153
- class="datagrid-row-master datagrid-row-flex"
154
- @click="selectRowById(item[0].id)"
155
- >
156
- <div
157
- v-if="props.type"
158
- class="datagrid-row-sticky"
159
- @click.stop
160
- >
161
- <div
162
- :id="expandableCaret"
163
- class="datagrid-expandable-caret datagrid-fixed-column flex-justify-center datagrid-cell"
164
- >
165
- <slot name="type" :key="key" :item="item">
166
- <div
167
- :class="`clr-${props.type}-wrapper flex-justify-center flex-align-center`"
168
- >
169
- <input
170
- :id="`${props.testId}-${inputId}-${item[0].id}`"
171
- v-model="selectedRowLocal"
172
- :type="props.type"
173
- :class="`${props.type}-btn`"
174
- :value="item[0].id"
175
- name="selected-store"
176
- @change="changeSelectedRow($event, item[0].id)"
177
- />
178
- <label
179
- :for="`${props.testId}-${inputId}-${item[0].id}`"
180
- class="clr-control-label"
181
- />
182
- </div>
183
- </slot>
184
- </div>
185
- <div
186
- v-if="$slots.toggleBlock"
187
- class="datagrid-cell datagrid-fixed-width"
188
- >
189
- <div class="flex-align-center">
190
- <button
191
- :id="`${props.testId}-toggle-icon-${key}`"
192
- class="datagrid-expandable-caret-button reset-btn"
193
- @click="toggle(key)"
194
- >
195
- <atoms-the-icon
196
- :class="[
197
- 'datagrid-expandable-caret-icon',
198
- { toggle: toggedItems[key] },
199
- ]"
200
- name="angle"
201
- />
202
- </button>
203
- </div>
204
- </div>
205
- </div>
206
- <div class="datagrid-row-scrollable">
207
- <div class="datagrid-scrolling-cells">
208
- <div
209
- v-for="(item2, key2) in item"
210
- v-show="
211
- !isShowHiddenInfo ||
212
- item2.key === 'col1' ||
213
- item2.key === 'icon'
214
- "
215
- :key="key2"
216
- :style="{
217
- width: columnsWidth[key2][0],
218
- minWidth: columnsWidth[key2][1],
219
- }"
220
- class="datagrid-cell datagrid-fixed-width"
221
- :class="{
222
- 'hidden-text-triangle':
223
- isShowHiddenInfo &&
224
- item2.key === 'col1' &&
225
- item2.data?.iconClassName === '11',
226
- }"
227
- >
228
- <div
229
- :class="[
230
- 'flex-align-center h-100',
231
- {
232
- 'double-arrow-width':
233
- item2.data?.name === 'doubleArrows',
234
- },
235
- ]"
236
- >
237
- <div
238
- v-if="item2.data?.name === 'doubleArrows'"
239
- class="double-arrow-wrap"
240
- :class="{
241
- 'arrow-selected':
242
- isShowHiddenInfo &&
243
- item2.id === selectedRow,
244
- }"
245
- >
246
- <atoms-the-icon
247
- v-if="item2.data?.name === 'doubleArrows'"
248
- name="doubleArrows"
249
- class="double-arrow"
250
- :class="{
251
- 'arrow-selected':
252
- isShowHiddenInfo &&
253
- item2.id === selectedRow,
254
- }"
255
- @click="doubleArrowClick"
256
- />
257
- </div>
258
- <!-- <span-->
259
- <!-- v-if="item2.text && item2.data?.iconClassName"-->
260
- <!-- class="vertical-divider"-->
261
- <!-- />-->
262
- <slot :name="item2.key" :item="item2">
263
- <span
264
- class="text-ellipsis"
265
- :title="item2.text"
266
- >{{ item2.text }}</span
267
- >
268
-
269
- <Teleport
270
- v-if="
271
- item2.id === selectedRow &&
272
- !item2.data?.text &&
273
- isShowHiddenInfo
274
- "
275
- :to="`#${tableWrapperId}`"
276
- @click.stop
277
- >
278
- <div
279
- id="hidden-features"
280
- class="hidden-features"
281
- :class="{
282
- 'show-hidden-info': isShowHiddenInfo,
283
- }"
284
- >
285
- <div class="header">
286
- <slot
287
- name="hiddenInfoHeader"
288
- :item="item"
289
- />
290
- <button
291
- :id="`${props.testId}-hidden-info-toggle-icon-${key}-${key2}`"
292
- class="signpost-action close"
293
- @click="isShowHiddenInfo = false"
294
- >
295
- <atoms-the-icon
296
- class="close-icon"
297
- name="close"
298
- />
299
- </button>
300
- </div>
301
- <slot name="hiddenInfoBody" />
302
- </div>
303
- </Teleport>
304
- </slot>
305
- </div>
306
- </div>
307
- </div>
308
- <div
309
- v-show="toggedItems[key]"
310
- class="datagrid-row-flex datagrid-row-detail datagrid-container"
311
- >
312
- <slot name="toggleBlock" />
313
- </div>
314
- </div>
315
- </div>
316
- </div>
317
- </div>
318
- </template>
319
- <template v-else>
320
- <div class="datagrid-placeholder-container">
321
- <div class="datagrid-placeholder datagrid-empty">
322
- <div class="datagrid-placeholder-image"></div>
323
-
324
- <span>No items found</span>
325
- </div>
326
- </div>
327
- </template>
328
- </div>
329
- </div>
330
- </div>
331
-
332
- <div v-if="!hideFooter" class="datagrid-footer">
333
- <div
334
- v-if="props.type === 'checkbox' && props.selectedRow?.length"
335
- class="clr-form-control-disabled"
336
- >
337
- <div class="clr-checkbox-wrapper">
338
- <input
339
- :id="`${props.testId}-check-all`"
340
- type="checkbox"
341
- checked
342
- />
343
- <label class="clr-control-label">
344
- {{ props.selectedRow?.length }}
345
- </label>
346
- </div>
347
- </div>
348
- <div class="datagrid-footer-description flex-align-center">
349
- <atoms-table-data-grid-column-switch
350
- v-if="columnKeys"
351
- v-model:column-keys="columnKeys"
352
- :test-id="`${props.testId}-footer-description`"
353
- class="switch-icon"
354
- />
355
-
356
- <div v-if="$slots.action" class="datagrid-footer__action">
357
- <slot name="action" />
358
- </div>
359
- </div>
360
-
361
- <atoms-table-data-grid-pagination
362
- test-id="props.testId"
363
- :page-size="props.pageSize"
364
- :page="props.page"
365
- :options="mergeOptions"
366
- :total-items="props.totalItems"
367
- :total-pages="props.totalPages"
368
- :hide-pagination="props.hidePagination"
369
- :hide-page-size="props.hidePageSize"
370
- :show-page-info="props.showPageInfo"
371
- :page-items-count="props.bodyItems.length"
372
- @change-page-size="changePageSize"
373
- @change-page="changePage"
374
- />
375
- </div>
376
-
377
- <atoms-loader v-show="props.loading" class="datagrid-spinner" />
378
- </div>
379
- </div>
380
- </div>
381
- </template>
382
-
383
- <script setup lang="ts">
384
- import { UI_I_HTMLSelectElement } from '~/models/interfaces'
385
- import { itemsPerPage } from '~/components/atoms/table/dataGrid/config/itemsPerPage'
386
- import {
387
- UI_I_HeadItem,
388
- UI_I_BodyItem,
389
- UI_I_ColumnKey,
390
- } from '~/components/atoms/table/dataGrid/models/interfaces'
391
- import { UI_I_OptionItem } from '~/components/atoms/models/interfaces'
392
- import {
393
- UI_T_ColumnKeys,
394
- UI_T_DataGridType,
395
- UI_T_SelectedRow,
396
- } from '~/components/atoms/table/dataGrid/models/types'
397
-
398
- const props = withDefaults(
399
- defineProps<{
400
- headItems: UI_I_HeadItem[]
401
- bodyItems: UI_I_BodyItem[][]
402
- pageSize: number
403
- page: number
404
- totalItems: number
405
- totalPages: number
406
- loading?: boolean
407
- columnKeys?: UI_I_ColumnKey[]
408
- selectedRow?: UI_T_SelectedRow
409
- type?: UI_T_DataGridType
410
- itemsPerPage?: UI_I_OptionItem[]
411
- offSelectByRow?: boolean
412
- hidePageSize?: boolean
413
- showPageInfo?: boolean
414
- serverOff?: boolean
415
- fillWidth?: boolean
416
- hideFooter?: boolean
417
- hidePagination?: boolean
418
- testId?: string
419
- }>(),
420
- {
421
- columnKeys: undefined,
422
- selectedRow: undefined,
423
- type: undefined,
424
- itemsPerPage: undefined,
425
- fillWidth: true,
426
- testId: 'ui-data-grid',
427
- }
428
- )
429
-
430
- const emits = defineEmits<{
431
- (event: 'update:column-keys', value: UI_T_ColumnKeys): void
432
- (event: 'update:selected-row', value: UI_T_SelectedRow): void
433
- (event: 'update:page-size', value: number): void
434
- (event: 'update:page', value: number): void
435
- (event: 'filtering', value: any): void
436
- (event: 'sorting', value: [string, boolean]): void
437
- (event: 'change', value: any): void
438
- (event: 'row-detail', value: number): void
439
- }>()
440
-
441
- const mergeOptions = computed(() => props.itemsPerPage || itemsPerPage)
442
-
443
- const inputId = ref(`radio-input-${useUniqueId()}`)
444
-
445
- const columnKeys = computed<UI_T_ColumnKeys>({
446
- get() {
447
- return props.columnKeys
448
- },
449
- set(newValue) {
450
- emits('update:column-keys', newValue)
451
- },
452
- })
453
-
454
- const selectedAll = ref<boolean>(false)
455
- const changeAll = (e: UI_I_HTMLSelectElement): void => {
456
- const newSelectedRow: (number | string)[] = []
457
- if (e.target.checked) {
458
- bodyItemsPresent.value.forEach((row) => {
459
- newSelectedRow.push(row[0].id)
460
- })
461
- }
462
-
463
- emits('update:selected-row', newSelectedRow)
464
- }
465
-
466
- const selectedRowLocal = ref<UI_T_SelectedRow>([])
467
- const isShowHiddenInfo = ref<boolean>(false)
468
- const tableWrapperId = `table-wrapper-${useUniqueId()}`
469
- let memoryWidth = '0'
470
- const doubleArrowClick = () => {
471
- if (!isShowHiddenInfo.value) {
472
- memoryWidth = columnsWidth.value[1][0]
473
- columnsWidth.value[1][0] = '162px'
474
- // min width of 1st column
475
- // columnsWidth.value[1][1]
476
- } else {
477
- columnsWidth.value[1][0] = memoryWidth
478
- }
479
- isShowHiddenInfo.value = !isShowHiddenInfo.value
480
- }
481
-
482
- watch(
483
- () => props.selectedRow,
484
- (val) => {
485
- if (val === undefined) return
486
-
487
- selectedRowLocal.value = val
488
- },
489
- { immediate: true }
490
- )
491
- const selectRowById = (id: number | string): void => {
492
- if (props.offSelectByRow) return
493
-
494
- if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
495
- const has = selectedRowLocal.value.includes(id)
496
- if (has) {
497
- selectedRowLocal.value = selectedRowLocal.value.filter(
498
- (rowId: string | number) => rowId !== id
499
- )
500
- } else {
501
- selectedRowLocal.value.push(id)
502
- }
503
-
504
- emits('change', selectedRowLocal.value)
505
- emits('update:selected-row', selectedRowLocal.value)
506
-
507
- changeSelectedAll(!has)
508
- return
509
- }
510
-
511
- emits('change', id)
512
- emits('update:selected-row', id)
513
- }
514
- const changeSelectedRow = (
515
- e: UI_I_HTMLSelectElement,
516
- id: number | string
517
- ): void => {
518
- if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
519
- const newSelectedRow = [...selectedRowLocal.value]
520
- emits('change', newSelectedRow)
521
- emits('update:selected-row', newSelectedRow)
522
-
523
- changeSelectedAll(e.target.checked)
524
- return
525
- }
526
-
527
- emits('change', id)
528
- emits('update:selected-row', id)
529
- }
530
- const changeSelectedAll = (checked: boolean): void => {
531
- if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
532
- const newSelectedRow = [...selectedRowLocal.value]
533
-
534
- if (!checked) {
535
- selectedAll.value = false
536
- } else if (newSelectedRow.length === bodyItemsPresent.value.length) {
537
- selectedAll.value = true
538
- }
539
- }
540
- }
541
-
542
- const checkIsSelectedRow = (id: number | string): boolean => {
543
- if (props.type === 'checkbox' && Array.isArray(props.selectedRow)) {
544
- return props.selectedRow.includes(id)
545
- }
546
- return props.selectedRow === id
547
- }
548
-
549
- // Sorting
550
- const sortInfo = ref<[string, boolean]>(['', true])
551
- const sortedColumnIndex = computed<number>(() => {
552
- let index = -1
553
- headItemsPresent.value.forEach((item, key) => {
554
- if (item.sortColumn === sortInfo.value[0]) index = key
555
- })
556
-
557
- return index
558
- })
559
- const sortTable = (sortName: string): void => {
560
- if (!sortName) return
561
-
562
- emits('update:selected-row', selectedRowLocal.value)
563
-
564
- if (sortInfo.value[0] === sortName) {
565
- sortInfo.value[1] = !sortInfo.value[1]
566
-
567
- emits('sorting', sortInfo.value)
568
- return
569
- }
570
- sortInfo.value[0] = sortName
571
- sortInfo.value[1] = true
572
-
573
- emits('sorting', sortInfo.value)
574
- }
575
-
576
- // Filtering
577
- const filterShow = ref<boolean[]>([])
578
- const filterTerm = ref<string[]>([])
579
- const filtering = (): void => {
580
- const filter = headItemsPresent.value
581
- .filter((_, key) => filterTerm.value[key])
582
- .map((item, key) => {
583
- return [item.key, filterTerm.value[key]]
584
- })
585
-
586
- emits('filtering', filter)
587
- }
588
-
589
- // Pagination
590
- const changePageSize = (value: number): void => {
591
- emits('update:page-size', value)
592
- }
593
- const changePage = (value: number): void => {
594
- emits('update:page', value)
595
- }
596
-
597
- const headItemsPresent = computed<UI_I_HeadItem[]>(() => {
598
- if (!columnKeys.value) {
599
- return props.headItems
600
- }
601
-
602
- return props.headItems.filter((item, key) => {
603
- return columnKeys.value?.find(
604
- (item2, key2) => item2.key === item.key && key === key2
605
- )?.show
606
- })
607
- })
608
-
609
- const bodyItemsPresent = computed<UI_I_BodyItem[][]>(() => {
610
- let items: UI_I_BodyItem[][] = props.bodyItems
611
-
612
- // Filtering by column
613
- if (columnKeys.value) {
614
- items = items.map((arr) => {
615
- arr = arr.filter((item, key) => {
616
- return columnKeys.value?.find(
617
- (item2, key2) => item2.key === item.key && key === key2
618
- )?.show
619
- })
620
- return arr
621
- })
622
- }
623
-
624
- if (props.serverOff) {
625
- // Sorting
626
- if (sortInfo.value[0] !== '') {
627
- items = useDeepCopy(items).sort(
628
- (a: UI_I_BodyItem[], b: UI_I_BodyItem[]) => {
629
- const first = a[sortedColumnIndex.value].text
630
- const second = b[sortedColumnIndex.value].text
631
-
632
- if (sortInfo.value[1]) {
633
- return first > second ? 1 : first < second ? -1 : 0
634
- } else {
635
- return first < second ? 1 : first > second ? -1 : 0
636
- }
637
- }
638
- )
639
- }
640
- // Filtering
641
- const hasFilter = headItemsPresent.value.some(
642
- (_, key) => filterTerm.value[key]
643
- )
644
- if (hasFilter) {
645
- items = items.filter((arr) => {
646
- let hasItem = true
647
- headItemsPresent.value.forEach((item, key) => {
648
- if (!filterTerm.value[key]) return
649
- const term = filterTerm.value[key].toLowerCase()
650
-
651
- hasItem = arr.some(
652
- (bodyItem) =>
653
- bodyItem.key === item.key &&
654
- bodyItem.text.toLowerCase().includes(term)
655
- )
656
- })
657
-
658
- return hasItem
659
- })
660
- }
661
- }
662
-
663
- return items
664
- })
665
-
666
- const toggedItems = ref<boolean[]>([])
667
-
668
- const toggle = (key: number): void => {
669
- toggedItems.value[key] = !toggedItems.value[key]
670
- if (!toggedItems.value[key]) return
671
- emits('row-detail', key)
672
- }
673
-
674
- const outerWrapper = `datagrid-outer-wrapper${useUniqueId()}`
675
- const expandableCaret = `datagrid-expandable-caret${useUniqueId()}`
676
-
677
- // Resize
678
- let helper = false
679
- let setColumnWidth = (): void => {
680
- if (!helper) {
681
- columnsWidth.value = []
682
- headItemsPresent.value.forEach((item) => {
683
- columnsWidth.value.push([
684
- item.width, // width
685
- item.width, // min-width
686
- ])
687
- })
688
-
689
- helper = true
690
- setTimeout(() => setColumnWidth(), 0)
691
- return
692
- }
693
- // Не продолжаем, чтобы ширина калонок была так как заданно в headItemsPresent
694
- if (!props.fillWidth) return
695
-
696
- const dataGridWidth = document.getElementById(outerWrapper)?.clientWidth || 0
697
- const leftColumnWidth =
698
- document.getElementById(expandableCaret)?.clientWidth || 0
699
- const bordersWidth = 2
700
- const columnWidth =
701
- (dataGridWidth - leftColumnWidth - bordersWidth) /
702
- headItemsPresent.value.length
703
-
704
- headItemsPresent.value.forEach((item) => {
705
- columnsWidth.value.push([
706
- `${columnWidth}px`, // width
707
- item.width, // min-width
708
- ])
709
- })
710
- }
711
- setColumnWidth = useThrottle(setColumnWidth)
712
-
713
- const columnsWidth = ref<[string, string][]>([])
714
- watch(
715
- bodyItemsPresent,
716
- (items: UI_I_BodyItem[][]) => {
717
- items.forEach(() => {
718
- toggedItems.value.push(false)
719
- })
720
- setColumnWidth()
721
- },
722
- {
723
- immediate: true,
724
- deep: true,
725
- }
726
- )
727
-
728
- watch(
729
- headItemsPresent,
730
- (items: UI_I_HeadItem[]) => {
731
- filterShow.value = items.map(() => false)
732
- filterTerm.value = items.map(() => '')
733
- },
734
- {
735
- immediate: true,
736
- deep: true,
737
- }
738
- )
739
-
740
- const grabColumn = ref<number>(-1)
741
- const grabStartX = ref<number>(0)
742
- const setGrab = (key: number, e: MouseEvent): void => {
743
- grabColumn.value = key
744
- const currentWidth = parseInt(columnsWidth.value[grabColumn.value][0])
745
- grabStartX.value = e.clientX - currentWidth
746
- }
747
-
748
- const isDrag = ref<boolean>(false)
749
-
750
- const mouseup = (): void => {
751
- if (grabColumn.value === -1) {
752
- return
753
- }
754
-
755
- grabColumn.value = -1
756
- isDrag.value = false
757
- }
758
-
759
- let resizeObserve: ResizeObserver
760
- let mousemove = (e: MouseEvent): void => {
761
- if (grabColumn.value === -1) return
762
-
763
- e.preventDefault()
764
- isDrag.value = true
765
- resizeObserve.disconnect()
766
-
767
- const minWidth = parseInt(columnsWidth.value[grabColumn.value][1])
768
- const changeX = Math.max(e.clientX - grabStartX.value, minWidth)
769
-
770
- columnsWidth.value[grabColumn.value] = [`${changeX}px`, `${minWidth}px`]
771
- }
772
- mousemove = useThrottle(mousemove)
773
-
774
- const setResizeObserve = (): void => {
775
- const el = document.getElementById(outerWrapper)
776
-
777
- if (!el) {
778
- setTimeout(setResizeObserve, 0)
779
- return
780
- }
781
-
782
- resizeObserve = new ResizeObserver(setColumnWidth)
783
- resizeObserve.observe(el)
784
- }
785
- onMounted(() => {
786
- window.addEventListener('mousemove', mousemove)
787
- window.addEventListener('mouseup', mouseup)
788
-
789
- setResizeObserve()
790
- })
791
- onUnmounted(() => {
792
- window.removeEventListener('mouseup', mouseup)
793
- window.removeEventListener('mousemove', mousemove)
794
- })
795
- </script>
796
-
797
- <style scoped lang="scss">
798
- @import '~/assets/scss/common/mixins';
799
- .datagrid-outer-wrapper {
800
- @include flex($dir: row);
801
- padding-top: 12px;
802
- flex-grow: 1;
803
- overflow: auto;
804
-
805
- & * {
806
- box-sizing: border-box;
807
- }
808
-
809
- & svg {
810
- fill: var(--table-color);
811
- }
812
-
813
- .datagrid-inner-wrapper {
814
- @include flex($dir: column);
815
- flex-grow: 1;
816
- overflow: auto;
817
-
818
- .datagrid {
819
- overflow: auto;
820
- flex: 1 1 auto;
821
- border-radius: 0.125rem 0.125rem 0 0;
822
- background-color: var(--block-view-bg-color);
823
- border-color: var(--global-border-color);
824
-
825
- .datagrid-table-wrapper {
826
- display: flex;
827
- flex: 1 1 auto;
828
- min-height: 100%;
829
-
830
- .datagrid-table {
831
- @include flex($dir: column);
832
- flex: 1 1 auto;
833
- align-content: flex-start;
834
- position: relative;
835
-
836
- .datagrid-header {
837
- position: sticky;
838
- top: 0;
839
- z-index: 501;
840
- width: auto;
841
-
842
- .datagrid-row-scrollable {
843
- flex-direction: row;
844
-
845
- .datagrid-column-separator {
846
- user-select: none;
847
-
848
- &::after {
849
- cursor: col-resize;
850
- }
851
- }
852
- }
853
-
854
- .datagrid-row {
855
- color: var(--table-color);
856
- background-color: var(--block-view-bg-color);
857
-
858
- &.datagrid-selected {
859
- background-color: var(--row-selected-bg-color);
860
- border-bottom: 1px solid var(--global-border-color);
861
-
862
- & :deep(*) {
863
- color: var(--table-active-color);
864
- }
865
- }
866
-
867
- .datagrid-column {
868
- background-color: var(--block-view-bg-color);
869
- border-bottom: 1px solid var(--global-border-color);
870
- padding: 6px 12px 5px;
871
- //flex: 1 1 auto;
872
-
873
- &:last-child {
874
- flex: 1 1 auto;
875
- }
876
-
877
- &.datagrid-toggle-block {
878
- width: 38px;
879
- min-width: 38px;
880
-
881
- .datagrid-column-separator {
882
- cursor: default;
883
-
884
- &::after {
885
- cursor: default;
886
- }
887
- }
888
- }
889
- }
890
-
891
- .datagrid-column-title {
892
- align-self: auto;
893
- color: var(--table-color);
894
- background-color: var(--block-view-bg-color);
895
- border-bottom-color: var(--global-border-color);
896
- font-size: 11px;
897
- @include flex($align: center);
898
- display: flex;
899
- flex-direction: row;
900
- justify-content: flex-start;
901
- align-items: center;
902
- //line-height: 24px;
903
- line-height: normal;
904
-
905
- .title-column {
906
- font-weight: bold;
907
- font-size: 11px;
908
- }
909
-
910
- .sort-arrow-wrap {
911
- margin-left: auto;
912
- height: 14px;
913
- width: 14px;
914
- vertical-align: middle;
915
-
916
- .sort-arrow {
917
- &.down {
918
- transform: rotate(180deg);
919
- }
920
- }
921
- }
922
- .title-icon {
923
- width: 24px;
924
- height: 24px;
925
- }
926
- }
927
-
928
- .datagrid-filter-toggle {
929
- background: unset;
930
-
931
- .filter-icon {
932
- width: 16px;
933
- height: 16px;
934
- }
935
- }
936
- }
937
- }
938
-
939
- .datagrid-placeholder-container {
940
- .datagrid-placeholder.datagrid-empty {
941
- background: var(--block-view-bg-color);
942
- }
943
- span {
944
- font-size: 16px;
945
- color: var(--global-font-color4);
946
- }
947
- }
948
-
949
- .datagrid-row {
950
- width: 100%;
951
- min-width: max-content;
952
- border-top: none;
953
- color: var(--table-color);
954
- background-color: var(--block-view-bg-color);
955
- border-bottom: 1px solid var(--global-border-color);
956
-
957
- &.datagrid-selected {
958
- & :deep(*) {
959
- color: var(--table-active-color);
960
- }
961
-
962
- .datagrid-cell {
963
- background-color: var(--row-selected-bg-color);
964
- border-bottom: 1px solid var(--global-border-color);
965
- position: relative;
966
- line-height: 1rem;
967
-
968
- &.hidden-text-triangle::after {
969
- content: '';
970
- margin-right: -5%;
971
- position: absolute;
972
- transform: rotate(225deg);
973
- border-bottom: 15px solid transparent;
974
- border-right: 15px solid var(--global-bg-color);
975
- bottom: 26%;
976
- right: 0;
977
- z-index: 1000003;
978
- }
979
- &.hidden-text-triangle::before {
980
- content: '';
981
- margin-right: -5%;
982
- transform: rotate(-135deg);
983
- position: absolute;
984
- border-bottom: 16px solid transparent;
985
- border-right: 16px solid var(--global-border-color);
986
- bottom: 23%;
987
- right: 0%;
988
- z-index: 1000002;
989
- }
990
- }
991
-
992
- .datagrid-row-detail {
993
- background-color: var(--row-selected-bg-color);
994
- border-bottom: 1px solid var(--global-border-color);
995
- }
996
- }
997
-
998
- .datagrid-cell {
999
- min-width: 38px;
1000
- min-height: 28px;
1001
- padding: 2px 12px 3px 12px;
1002
-
1003
- &:last-child {
1004
- flex: 1 1 auto;
1005
- }
1006
-
1007
- button {
1008
- height: 0.9rem;
1009
- width: 0.9rem;
1010
-
1011
- .arrow-icon {
1012
- width: 16px;
1013
- height: 16px;
1014
- transform: rotate(90deg);
1015
- }
1016
- }
1017
-
1018
- .datagrid-cell-icon {
1019
- display: inline-block;
1020
- width: 16px;
1021
- height: 16px;
1022
- }
1023
-
1024
- .datagrid-expandable-caret-button {
1025
- cursor: pointer;
1026
- width: 100%;
1027
-
1028
- .datagrid-expandable-caret-icon {
1029
- width: 16px;
1030
- height: 16px;
1031
- transform: rotate(90deg);
1032
- fill: var(--table-caret-color);
1033
-
1034
- &.toggle {
1035
- transform: rotate(180deg);
1036
- }
1037
- }
1038
- }
1039
- }
1040
- }
1041
-
1042
- .datagrid-row-sticky {
1043
- @include flex($w: nowrap);
1044
- position: sticky;
1045
- left: 0;
1046
- z-index: 500;
1047
- background-color: var(--block-view-bg-color);
1048
-
1049
- .datagrid-column {
1050
- color: var(--table-color);
1051
- background-color: var(--block-view-bg-color);
1052
- border-bottom-color: var(--global-border-color);
1053
- text-align: left;
1054
- display: flex;
1055
- flex: 1 1 auto;
1056
- vertical-align: top;
1057
- border: none;
1058
-
1059
- &.datagrid-expandable-caret {
1060
- .datagrid-column-separator {
1061
- display: block;
1062
-
1063
- &::after {
1064
- top: 0;
1065
- height: 18px;
1066
- }
1067
- }
1068
-
1069
- .radio-btn {
1070
- width: 16px;
1071
- height: 16px;
1072
- }
1073
- }
1074
-
1075
- .datagrid-column-separator {
1076
- position: relative;
1077
- //left: 0.6rem;
1078
- flex: 0 0 auto;
1079
- width: 0.05rem;
1080
- order: 100;
1081
- margin-left: auto;
1082
- height: 100%;
1083
- }
1084
- }
1085
-
1086
- .datagrid-fixed-column {
1087
- background-color: var(--block-view-bg-color);
1088
-
1089
- &::after {
1090
- content: '';
1091
- width: 0.05rem;
1092
- height: calc(100% - 0.5rem);
1093
- position: absolute;
1094
- right: 0;
1095
- top: 0.25rem;
1096
- background-color: var(--global-border-color);
1097
- }
1098
- }
1099
- }
1100
-
1101
- .datagrid-row-scrollable {
1102
- @include flex($ff: row nowrap);
1103
- flex: 1 1 auto;
1104
-
1105
- .datagrid-scrolling-cells {
1106
- @include flex($ff: row nowrap);
1107
- flex: 1 1 auto;
1108
- }
1109
- }
1110
- .datagrid-body-row {
1111
- .datagrid-row-scrollable {
1112
- @include flex($ff: column nowrap);
1113
-
1114
- .datagrid-row-detail {
1115
- flex: 1;
1116
- }
1117
- }
1118
-
1119
- &:not(.datagrid-selected):hover {
1120
- border-bottom: 1px solid var(--table-hover-row-border-color);
1121
- background-color: var(--table-hover-row-background-color);
1122
- color: var(--table-hover-row-color);
1123
-
1124
- .datagrid-fixed-column {
1125
- background-color: var(--table-hover-row-background-color);
1126
- }
1127
- .datagrid-cell {
1128
- background-color: var(--table-hover-row-background-color);
1129
- }
1130
- }
1131
- }
1132
- }
1133
- }
1134
- }
1135
-
1136
- .datagrid-footer {
1137
- flex: 0 0 auto;
1138
- @include flex($ff: row nowrap, $just: space-between, $align: stretch);
1139
- font-size: 0.55rem;
1140
- background-color: var(--block-view-bg-color);
1141
- border: 0.05rem solid var(--global-border-color);
1142
- border-top: none;
1143
- border-radius: 0 0 0.15rem 0.15rem;
1144
- padding: 0 0.6rem;
1145
- height: 28px;
1146
-
1147
- .clr-form-control-disabled {
1148
- opacity: 1;
1149
-
1150
- .clr-checkbox-wrapper {
1151
- label {
1152
- color: #8c8c8c;
1153
- margin-right: 9px;
1154
- padding-left: 22px;
1155
-
1156
- &:before {
1157
- position: absolute;
1158
- top: 4px;
1159
- left: 0;
1160
- content: '';
1161
- display: inline-block;
1162
- height: 16px;
1163
- width: 16px;
1164
- border: none;
1165
- border-radius: 3px;
1166
- background-color: var(--table-checkbox-color);
1167
- }
1168
-
1169
- &:after {
1170
- position: absolute;
1171
- content: '';
1172
- display: inline-block;
1173
- height: 5px;
1174
- width: 8px;
1175
- border-left: 2px solid #fff;
1176
- border-bottom: 2px solid #fff;
1177
- top: 4px;
1178
- left: 4px;
1179
- transform: translateY(4px) rotate(-45deg);
1180
- }
1181
- }
1182
- }
1183
- }
1184
- }
1185
-
1186
- .datagrid-spinner {
1187
- top: 0.6rem;
1188
- height: calc(100% - 0.6rem);
1189
- }
1190
-
1191
- .datagrid-footer-description {
1192
- flex: 1 1 auto;
1193
-
1194
- :deep(svg) {
1195
- fill: var(--table-switch-color);
1196
- }
1197
- }
1198
-
1199
- .clr-radio-wrapper,
1200
- .clr-checkbox-wrapper {
1201
- height: 18px;
1202
- }
1203
-
1204
- .clr-radio-wrapper label,
1205
- .clr-checkbox-wrapper label {
1206
- padding-left: 16px;
1207
- }
1208
- }
1209
- }
1210
- //.vertical-divider {
1211
- // width: 1px;
1212
- // height: 22px;
1213
- // background: #bbb;
1214
- // margin: 2px 2px 0 -5px;
1215
- //}
1216
-
1217
- .hidden-features {
1218
- padding: 9px 14px;
1219
- position: absolute;
1220
- top: 8.5%;
1221
- right: 0%;
1222
- left: 25.35%;
1223
- bottom: 0%;
1224
- z-index: 1000001;
1225
- background-color: var(--global-bg-color);
1226
- color: var(--global-font-color2);
1227
- border: 1px solid var(--global-border-color);
1228
- overflow-y: auto;
1229
- overflow-x: hidden;
1230
-
1231
- .header {
1232
- display: flex;
1233
- align-items: center;
1234
- justify-content: space-between;
1235
- background-color: inherit;
1236
-
1237
- h3 {
1238
- font-size: 1rem;
1239
- color: var(--global-font-color2) !important;
1240
- line-height: 1.7rem;
1241
- }
1242
- button {
1243
- line-height: 24px;
1244
-
1245
- .close-icon {
1246
- margin-left: 10px;
1247
- width: 24px;
1248
- height: 24px;
1249
- }
1250
- }
1251
- }
1252
- }
1253
- .double-arrow-width {
1254
- width: 47px;
1255
- }
1256
- .double-arrow-wrap {
1257
- width: 30px;
1258
- height: 20px;
1259
- padding-top: 1px;
1260
- padding-left: 5px;
1261
- cursor: pointer;
1262
- background-color: transparent;
1263
-
1264
- .double-arrow {
1265
- background-color: transparent;
1266
- transform: rotate(90deg);
1267
- width: 16px;
1268
- height: 16px;
1269
- }
1270
-
1271
- .double-arrow.arrow-selected {
1272
- transform: rotate(-90deg) !important;
1273
- background-color: #0079b8;
1274
- }
1275
- }
1276
- .double-arrow-wrap.arrow-selected {
1277
- background-color: #0079b8;
1278
- border-radius: 3px;
1279
- }
1280
- </style>
1281
-
1282
- <style>
1283
- :root {
1284
- --table-color: #565656;
1285
- --table-active-color: #fff;
1286
- --table-checkbox-color: #454545;
1287
- --table-caret-color: #454545;
1288
- --table-switch-color: #575757;
1289
- --table-hover-row-border-color: #666;
1290
- --table-hover-row-background-color: #e8e8e8;
1291
- --table-hover-row-color: #454545;
1292
- --table-spinner-bg-color: #ffffff99;
1293
- }
1294
-
1295
- :root.dark-theme {
1296
- --table-color: #fff;
1297
- --table-active-color: #565656;
1298
- --table-checkbox-color: #49aeda;
1299
- --table-caret-color: #ffffff;
1300
- --table-switch-color: #b3b3b3;
1301
- --table-hover-row-border-color: #fff;
1302
- --table-hover-row-background-color: #324f61;
1303
- --table-hover-row-color: #e9ecef;
1304
- --table-spinner-bg-color: rgba(0, 0, 0, 0.5);
1305
- }
1306
- </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 :id="tableWrapperId" 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 v-if="props.type" class="datagrid-row-sticky">
12
+ <div
13
+ :id="expandableCaret"
14
+ class="datagrid-column datagrid-expandable-caret datagrid-fixed-column flex-align-center flex-justify-center"
15
+ >
16
+ <template v-if="props.type === 'checkbox'">
17
+ <div
18
+ class="clr-checkbox-wrapper flex-align-center flex-justify-center w-100"
19
+ >
20
+ <input
21
+ :id="`${props.testId}-${inputId}-all`"
22
+ v-model="selectedAll"
23
+ type="checkbox"
24
+ class="checkbox-btn"
25
+ :value="-1"
26
+ @change="changeAll"
27
+ />
28
+ <label
29
+ :for="`${props.testId}-${inputId}-all`"
30
+ class="clr-control-label"
31
+ />
32
+ </div>
33
+ <div class="datagrid-column-separator"></div>
34
+ </template>
35
+ </div>
36
+ <div
37
+ v-if="$slots.toggleBlock"
38
+ class="datagrid-toggle-block datagrid-column datagrid-fixed-width"
39
+ >
40
+ <div class="datagrid-column-flex">
41
+ <div class="datagrid-column-separator">
42
+ <span class="clr-sr-only" />
43
+ <div class="datagrid-column-resize-tracker" />
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ <div class="datagrid-row-scrollable">
49
+ <div
50
+ v-for="(item, key) in headItemsPresent"
51
+ :key="key"
52
+ :style="{
53
+ width: columnsWidth[key][0],
54
+ minWidth: columnsWidth[key][1],
55
+ }"
56
+ class="datagrid-column datagrid-fixed-width"
57
+ >
58
+ <div class="datagrid-column-flex">
59
+ <button
60
+ :id="`${props.testId}-sort-column-${key}`"
61
+ :class="[
62
+ 'datagrid-column-title',
63
+ {
64
+ 'default text-decoration-none':
65
+ !item.sortColumn,
66
+ },
67
+ ]"
68
+ @click="sortTable(item.sortColumn)"
69
+ >
70
+ <slot name="th" :key="key" :item="item">
71
+ <span class="title-column">
72
+ {{ item.text }}
73
+ </span>
74
+ </slot>
75
+ <span
76
+ v-if="item.sortColumn"
77
+ class="sort-arrow-wrap"
78
+ >
79
+ <atoms-the-icon
80
+ v-show="sortInfo[0] === item.sortColumn"
81
+ :class="['sort-arrow', { down: sortInfo[1] }]"
82
+ name="sort-arrow"
83
+ />
84
+ </span>
85
+ </button>
86
+ <div class="relative">
87
+ <button
88
+ v-if="item.hasFilter"
89
+ :id="`${props.testId}-filter-icon-${key}`"
90
+ class="datagrid-filter-toggle clr-anchor clr-smart-open-close"
91
+ @click="filterShow[key] = !filterShow[key]"
92
+ >
93
+ <atoms-the-icon
94
+ v-if="filterTerm[key]"
95
+ class="filter-icon"
96
+ name="filter-solid"
97
+ style="fill: #0079b8"
98
+ />
99
+ <atoms-the-icon
100
+ v-else
101
+ class="filter-icon"
102
+ name="filter"
103
+ />
104
+ </button>
105
+ <atoms-popup-simple-popup
106
+ v-model="filterShow[key]"
107
+ :test-id="`${props.testId}-filter`"
108
+ top="100%"
109
+ right="0"
110
+ >
111
+ <input
112
+ :id="`${props.testId}-filter-input-${key}`"
113
+ v-model="filterTerm[key]"
114
+ type="text"
115
+ @input="filtering"
116
+ />
117
+ </atoms-popup-simple-popup>
118
+ </div>
119
+ <div
120
+ v-show="!isShowHiddenInfo"
121
+ class="datagrid-column-separator"
122
+ @mousedown="setGrab(key, $event)"
123
+ >
124
+ <button
125
+ :id="`${props.testId}-resize-tracker-${key}`"
126
+ class="datagrid-column-handle drag-handle draggable"
127
+ />
128
+ <span class="clr-sr-only" />
129
+ <div class="datagrid-column-resize-tracker" />
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+
138
+ <template v-if="bodyItemsPresent.length">
139
+ <div
140
+ v-for="(item, key) in bodyItemsPresent"
141
+ :key="item.id"
142
+ :class="[
143
+ 'datagrid-body-row datagrid-row animation',
144
+ {
145
+ 'datagrid-selected active': checkIsSelectedRow(
146
+ item[0].id
147
+ ),
148
+ },
149
+ ]"
150
+ >
151
+ <div>
152
+ <div
153
+ class="datagrid-row-master datagrid-row-flex"
154
+ @click="selectRowById(item[0].id)"
155
+ >
156
+ <div
157
+ v-if="props.type"
158
+ class="datagrid-row-sticky"
159
+ @click.stop
160
+ >
161
+ <div
162
+ :id="expandableCaret"
163
+ class="datagrid-expandable-caret datagrid-fixed-column flex-justify-center datagrid-cell"
164
+ >
165
+ <slot name="type" :key="key" :item="item">
166
+ <div
167
+ :class="`clr-${props.type}-wrapper flex-justify-center flex-align-center`"
168
+ >
169
+ <input
170
+ :id="`${props.testId}-${inputId}-${item[0].id}`"
171
+ v-model="selectedRowLocal"
172
+ :type="props.type"
173
+ :class="`${props.type}-btn`"
174
+ :value="item[0].id"
175
+ name="selected-store"
176
+ @change="changeSelectedRow($event, item[0].id)"
177
+ />
178
+ <label
179
+ :for="`${props.testId}-${inputId}-${item[0].id}`"
180
+ class="clr-control-label"
181
+ />
182
+ </div>
183
+ </slot>
184
+ </div>
185
+ <div
186
+ v-if="$slots.toggleBlock"
187
+ class="datagrid-cell datagrid-fixed-width"
188
+ >
189
+ <div class="flex-align-center">
190
+ <button
191
+ :id="`${props.testId}-toggle-icon-${key}`"
192
+ class="datagrid-expandable-caret-button reset-btn"
193
+ @click="toggle(key)"
194
+ >
195
+ <atoms-the-icon
196
+ :class="[
197
+ 'datagrid-expandable-caret-icon',
198
+ { toggle: toggedItems[key] },
199
+ ]"
200
+ name="angle"
201
+ />
202
+ </button>
203
+ </div>
204
+ </div>
205
+ </div>
206
+ <div class="datagrid-row-scrollable">
207
+ <div class="datagrid-scrolling-cells">
208
+ <div
209
+ v-for="(item2, key2) in item"
210
+ v-show="
211
+ !isShowHiddenInfo ||
212
+ item2.key === 'col1' ||
213
+ item2.key === 'icon'
214
+ "
215
+ :key="key2"
216
+ :style="{
217
+ width: columnsWidth[key2][0],
218
+ minWidth: columnsWidth[key2][1],
219
+ }"
220
+ class="datagrid-cell datagrid-fixed-width"
221
+ :class="{
222
+ 'hidden-text-triangle':
223
+ isShowHiddenInfo &&
224
+ item2.key === 'col1' &&
225
+ item2.data?.iconClassName === '11',
226
+ }"
227
+ >
228
+ <div
229
+ :class="[
230
+ 'flex-align-center h-100',
231
+ {
232
+ 'double-arrow-width':
233
+ item2.data?.name === 'doubleArrows',
234
+ },
235
+ ]"
236
+ >
237
+ <div
238
+ v-if="item2.data?.name === 'doubleArrows'"
239
+ class="double-arrow-wrap"
240
+ :class="{
241
+ 'arrow-selected':
242
+ isShowHiddenInfo &&
243
+ item2.id === selectedRow,
244
+ }"
245
+ >
246
+ <atoms-the-icon
247
+ v-if="item2.data?.name === 'doubleArrows'"
248
+ name="doubleArrows"
249
+ class="double-arrow"
250
+ :class="{
251
+ 'arrow-selected':
252
+ isShowHiddenInfo &&
253
+ item2.id === selectedRow,
254
+ }"
255
+ @click="doubleArrowClick"
256
+ />
257
+ </div>
258
+ <!-- <span-->
259
+ <!-- v-if="item2.text && item2.data?.iconClassName"-->
260
+ <!-- class="vertical-divider"-->
261
+ <!-- />-->
262
+ <slot :name="item2.key" :item="item2">
263
+ <span
264
+ class="text-ellipsis"
265
+ :title="item2.text"
266
+ >{{ item2.text }}</span
267
+ >
268
+
269
+ <Teleport
270
+ v-if="
271
+ item2.id === selectedRow &&
272
+ !item2.data?.text &&
273
+ isShowHiddenInfo
274
+ "
275
+ :to="`#${tableWrapperId}`"
276
+ @click.stop
277
+ >
278
+ <div
279
+ id="hidden-features"
280
+ class="hidden-features"
281
+ :class="{
282
+ 'show-hidden-info': isShowHiddenInfo,
283
+ }"
284
+ >
285
+ <div class="header">
286
+ <slot
287
+ name="hiddenInfoHeader"
288
+ :item="item"
289
+ />
290
+ <button
291
+ :id="`${props.testId}-hidden-info-toggle-icon-${key}-${key2}`"
292
+ class="signpost-action close"
293
+ @click="isShowHiddenInfo = false"
294
+ >
295
+ <atoms-the-icon
296
+ class="close-icon"
297
+ name="close"
298
+ />
299
+ </button>
300
+ </div>
301
+ <slot name="hiddenInfoBody" />
302
+ </div>
303
+ </Teleport>
304
+ </slot>
305
+ </div>
306
+ </div>
307
+ </div>
308
+ <div
309
+ v-show="toggedItems[key]"
310
+ class="datagrid-row-flex datagrid-row-detail datagrid-container"
311
+ >
312
+ <slot name="toggleBlock" />
313
+ </div>
314
+ </div>
315
+ </div>
316
+ </div>
317
+ </div>
318
+ </template>
319
+ <template v-else>
320
+ <div class="datagrid-placeholder-container">
321
+ <div class="datagrid-placeholder datagrid-empty">
322
+ <div class="datagrid-placeholder-image"></div>
323
+
324
+ <span>No items found</span>
325
+ </div>
326
+ </div>
327
+ </template>
328
+ </div>
329
+ </div>
330
+ </div>
331
+
332
+ <div v-if="!hideFooter" class="datagrid-footer">
333
+ <div
334
+ v-if="props.type === 'checkbox' && props.selectedRow?.length"
335
+ class="clr-form-control-disabled"
336
+ >
337
+ <div class="clr-checkbox-wrapper">
338
+ <input
339
+ :id="`${props.testId}-check-all`"
340
+ type="checkbox"
341
+ checked
342
+ />
343
+ <label class="clr-control-label">
344
+ {{ props.selectedRow?.length }}
345
+ </label>
346
+ </div>
347
+ </div>
348
+ <div class="datagrid-footer-description flex-align-center">
349
+ <atoms-table-data-grid-column-switch
350
+ v-if="columnKeys"
351
+ v-model:column-keys="columnKeys"
352
+ :test-id="`${props.testId}-footer-description`"
353
+ class="switch-icon"
354
+ />
355
+
356
+ <div v-if="$slots.action" class="datagrid-footer__action">
357
+ <slot name="action" />
358
+ </div>
359
+ </div>
360
+
361
+ <atoms-table-data-grid-pagination
362
+ test-id="props.testId"
363
+ :page-size="props.pageSize"
364
+ :page="props.page"
365
+ :options="mergeOptions"
366
+ :total-items="props.totalItems"
367
+ :total-pages="props.totalPages"
368
+ :hide-pagination="props.hidePagination"
369
+ :hide-page-size="props.hidePageSize"
370
+ :show-page-info="props.showPageInfo"
371
+ :page-items-count="props.bodyItems.length"
372
+ @change-page-size="changePageSize"
373
+ @change-page="changePage"
374
+ />
375
+ </div>
376
+
377
+ <atoms-loader v-show="props.loading" class="datagrid-spinner" />
378
+ </div>
379
+ </div>
380
+ </div>
381
+ </template>
382
+
383
+ <script setup lang="ts">
384
+ import { UI_I_HTMLSelectElement } from '~/models/interfaces'
385
+ import { itemsPerPage } from '~/components/atoms/table/dataGrid/config/itemsPerPage'
386
+ import {
387
+ UI_I_HeadItem,
388
+ UI_I_BodyItem,
389
+ UI_I_ColumnKey,
390
+ } from '~/components/atoms/table/dataGrid/models/interfaces'
391
+ import { UI_I_OptionItem } from '~/components/atoms/models/interfaces'
392
+ import {
393
+ UI_T_ColumnKeys,
394
+ UI_T_DataGridType,
395
+ UI_T_SelectedRow,
396
+ } from '~/components/atoms/table/dataGrid/models/types'
397
+
398
+ const props = withDefaults(
399
+ defineProps<{
400
+ headItems: UI_I_HeadItem[]
401
+ bodyItems: UI_I_BodyItem[][]
402
+ pageSize: number
403
+ page: number
404
+ totalItems: number
405
+ totalPages: number
406
+ loading?: boolean
407
+ columnKeys?: UI_I_ColumnKey[]
408
+ selectedRow?: UI_T_SelectedRow
409
+ type?: UI_T_DataGridType
410
+ itemsPerPage?: UI_I_OptionItem[]
411
+ offSelectByRow?: boolean
412
+ hidePageSize?: boolean
413
+ showPageInfo?: boolean
414
+ serverOff?: boolean
415
+ fillWidth?: boolean
416
+ hideFooter?: boolean
417
+ hidePagination?: boolean
418
+ testId?: string
419
+ }>(),
420
+ {
421
+ columnKeys: undefined,
422
+ selectedRow: undefined,
423
+ type: undefined,
424
+ itemsPerPage: undefined,
425
+ fillWidth: true,
426
+ testId: 'ui-data-grid',
427
+ }
428
+ )
429
+
430
+ const emits = defineEmits<{
431
+ (event: 'update:column-keys', value: UI_T_ColumnKeys): void
432
+ (event: 'update:selected-row', value: UI_T_SelectedRow): void
433
+ (event: 'update:page-size', value: number): void
434
+ (event: 'update:page', value: number): void
435
+ (event: 'filtering', value: any): void
436
+ (event: 'sorting', value: [string, boolean]): void
437
+ (event: 'change', value: any): void
438
+ (event: 'row-detail', value: number): void
439
+ }>()
440
+
441
+ const mergeOptions = computed(() => props.itemsPerPage || itemsPerPage)
442
+
443
+ const inputId = ref(`radio-input-${useUniqueId()}`)
444
+
445
+ const columnKeys = computed<UI_T_ColumnKeys>({
446
+ get() {
447
+ return props.columnKeys
448
+ },
449
+ set(newValue) {
450
+ emits('update:column-keys', newValue)
451
+ },
452
+ })
453
+
454
+ const selectedAll = ref<boolean>(false)
455
+ const changeAll = (e: UI_I_HTMLSelectElement): void => {
456
+ const newSelectedRow: (number | string)[] = []
457
+ if (e.target.checked) {
458
+ bodyItemsPresent.value.forEach((row) => {
459
+ newSelectedRow.push(row[0].id)
460
+ })
461
+ }
462
+
463
+ emits('update:selected-row', newSelectedRow)
464
+ }
465
+
466
+ const selectedRowLocal = ref<UI_T_SelectedRow>([])
467
+ const isShowHiddenInfo = ref<boolean>(false)
468
+ const tableWrapperId = `table-wrapper-${useUniqueId()}`
469
+ let memoryWidth = '0'
470
+ const doubleArrowClick = () => {
471
+ if (!isShowHiddenInfo.value) {
472
+ memoryWidth = columnsWidth.value[1][0]
473
+ columnsWidth.value[1][0] = '162px'
474
+ // min width of 1st column
475
+ // columnsWidth.value[1][1]
476
+ } else {
477
+ columnsWidth.value[1][0] = memoryWidth
478
+ }
479
+ isShowHiddenInfo.value = !isShowHiddenInfo.value
480
+ }
481
+
482
+ watch(
483
+ () => props.selectedRow,
484
+ (val) => {
485
+ if (val === undefined) return
486
+
487
+ selectedRowLocal.value = val
488
+ },
489
+ { immediate: true }
490
+ )
491
+ const selectRowById = (id: number | string): void => {
492
+ if (props.offSelectByRow) return
493
+
494
+ if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
495
+ const has = selectedRowLocal.value.includes(id)
496
+ if (has) {
497
+ selectedRowLocal.value = selectedRowLocal.value.filter(
498
+ (rowId: string | number) => rowId !== id
499
+ )
500
+ } else {
501
+ selectedRowLocal.value.push(id)
502
+ }
503
+
504
+ emits('change', selectedRowLocal.value)
505
+ emits('update:selected-row', selectedRowLocal.value)
506
+
507
+ changeSelectedAll(!has)
508
+ return
509
+ }
510
+
511
+ emits('change', id)
512
+ emits('update:selected-row', id)
513
+ }
514
+ const changeSelectedRow = (
515
+ e: UI_I_HTMLSelectElement,
516
+ id: number | string
517
+ ): void => {
518
+ if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
519
+ const newSelectedRow = [...selectedRowLocal.value]
520
+ emits('change', newSelectedRow)
521
+ emits('update:selected-row', newSelectedRow)
522
+
523
+ changeSelectedAll(e.target.checked)
524
+ return
525
+ }
526
+
527
+ emits('change', id)
528
+ emits('update:selected-row', id)
529
+ }
530
+ const changeSelectedAll = (checked: boolean): void => {
531
+ if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
532
+ const newSelectedRow = [...selectedRowLocal.value]
533
+
534
+ if (!checked) {
535
+ selectedAll.value = false
536
+ } else if (newSelectedRow.length === bodyItemsPresent.value.length) {
537
+ selectedAll.value = true
538
+ }
539
+ }
540
+ }
541
+
542
+ const checkIsSelectedRow = (id: number | string): boolean => {
543
+ if (props.type === 'checkbox' && Array.isArray(props.selectedRow)) {
544
+ return props.selectedRow.includes(id)
545
+ }
546
+ return props.selectedRow === id
547
+ }
548
+
549
+ // Sorting
550
+ const sortInfo = ref<[string, boolean]>(['', true])
551
+ const sortedColumnIndex = computed<number>(() => {
552
+ let index = -1
553
+ headItemsPresent.value.forEach((item, key) => {
554
+ if (item.sortColumn === sortInfo.value[0]) index = key
555
+ })
556
+
557
+ return index
558
+ })
559
+ const sortTable = (sortName: string): void => {
560
+ if (!sortName) return
561
+
562
+ emits('update:selected-row', selectedRowLocal.value)
563
+
564
+ if (sortInfo.value[0] === sortName) {
565
+ sortInfo.value[1] = !sortInfo.value[1]
566
+
567
+ emits('sorting', sortInfo.value)
568
+ return
569
+ }
570
+ sortInfo.value[0] = sortName
571
+ sortInfo.value[1] = true
572
+
573
+ emits('sorting', sortInfo.value)
574
+ }
575
+
576
+ // Filtering
577
+ const filterShow = ref<boolean[]>([])
578
+ const filterTerm = ref<string[]>([])
579
+ const filtering = (): void => {
580
+ const filter = headItemsPresent.value
581
+ .filter((_, key) => filterTerm.value[key])
582
+ .map((item, key) => {
583
+ return [item.key, filterTerm.value[key]]
584
+ })
585
+
586
+ emits('filtering', filter)
587
+ }
588
+
589
+ // Pagination
590
+ const changePageSize = (value: number): void => {
591
+ emits('update:page-size', value)
592
+ }
593
+ const changePage = (value: number): void => {
594
+ emits('update:page', value)
595
+ }
596
+
597
+ const headItemsPresent = computed<UI_I_HeadItem[]>(() => {
598
+ if (!columnKeys.value) {
599
+ return props.headItems
600
+ }
601
+
602
+ return props.headItems.filter((item, key) => {
603
+ return columnKeys.value?.find(
604
+ (item2, key2) => item2.key === item.key && key === key2
605
+ )?.show
606
+ })
607
+ })
608
+
609
+ const bodyItemsPresent = computed<UI_I_BodyItem[][]>(() => {
610
+ let items: UI_I_BodyItem[][] = props.bodyItems
611
+
612
+ // Filtering by column
613
+ if (columnKeys.value) {
614
+ items = items.map((arr) => {
615
+ arr = arr.filter((item, key) => {
616
+ return columnKeys.value?.find(
617
+ (item2, key2) => item2.key === item.key && key === key2
618
+ )?.show
619
+ })
620
+ return arr
621
+ })
622
+ }
623
+
624
+ if (props.serverOff) {
625
+ // Sorting
626
+ if (sortInfo.value[0] !== '') {
627
+ items = useDeepCopy(items).sort(
628
+ (a: UI_I_BodyItem[], b: UI_I_BodyItem[]) => {
629
+ const first = a[sortedColumnIndex.value].text
630
+ const second = b[sortedColumnIndex.value].text
631
+
632
+ if (sortInfo.value[1]) {
633
+ return first > second ? 1 : first < second ? -1 : 0
634
+ } else {
635
+ return first < second ? 1 : first > second ? -1 : 0
636
+ }
637
+ }
638
+ )
639
+ }
640
+ // Filtering
641
+ const hasFilter = headItemsPresent.value.some(
642
+ (_, key) => filterTerm.value[key]
643
+ )
644
+ if (hasFilter) {
645
+ items = items.filter((arr) => {
646
+ let hasItem = true
647
+ headItemsPresent.value.forEach((item, key) => {
648
+ if (!filterTerm.value[key]) return
649
+ const term = filterTerm.value[key].toLowerCase()
650
+
651
+ hasItem = arr.some(
652
+ (bodyItem) =>
653
+ bodyItem.key === item.key &&
654
+ bodyItem.text.toLowerCase().includes(term)
655
+ )
656
+ })
657
+
658
+ return hasItem
659
+ })
660
+ }
661
+ }
662
+
663
+ return items
664
+ })
665
+
666
+ const toggedItems = ref<boolean[]>([])
667
+
668
+ const toggle = (key: number): void => {
669
+ toggedItems.value[key] = !toggedItems.value[key]
670
+ if (!toggedItems.value[key]) return
671
+ emits('row-detail', key)
672
+ }
673
+
674
+ const outerWrapper = `datagrid-outer-wrapper${useUniqueId()}`
675
+ const expandableCaret = `datagrid-expandable-caret${useUniqueId()}`
676
+
677
+ // Resize
678
+ let helper = false
679
+ let setColumnWidth = (): void => {
680
+ if (!helper) {
681
+ columnsWidth.value = []
682
+ headItemsPresent.value.forEach((item) => {
683
+ columnsWidth.value.push([
684
+ item.width, // width
685
+ item.width, // min-width
686
+ ])
687
+ })
688
+
689
+ helper = true
690
+ setTimeout(() => setColumnWidth(), 0)
691
+ return
692
+ }
693
+ // Не продолжаем, чтобы ширина калонок была так как заданно в headItemsPresent
694
+ if (!props.fillWidth) return
695
+
696
+ const dataGridWidth = document.getElementById(outerWrapper)?.clientWidth || 0
697
+ const leftColumnWidth =
698
+ document.getElementById(expandableCaret)?.clientWidth || 0
699
+ const bordersWidth = 2
700
+ const columnWidth =
701
+ (dataGridWidth - leftColumnWidth - bordersWidth) /
702
+ headItemsPresent.value.length
703
+
704
+ headItemsPresent.value.forEach((item) => {
705
+ columnsWidth.value.push([
706
+ `${columnWidth}px`, // width
707
+ item.width, // min-width
708
+ ])
709
+ })
710
+ }
711
+ setColumnWidth = useThrottle(setColumnWidth)
712
+
713
+ const columnsWidth = ref<[string, string][]>([])
714
+ watch(
715
+ bodyItemsPresent,
716
+ (items: UI_I_BodyItem[][]) => {
717
+ items.forEach(() => {
718
+ toggedItems.value.push(false)
719
+ })
720
+ setColumnWidth()
721
+ },
722
+ {
723
+ immediate: true,
724
+ deep: true,
725
+ }
726
+ )
727
+
728
+ watch(
729
+ headItemsPresent,
730
+ (items: UI_I_HeadItem[]) => {
731
+ filterShow.value = items.map(() => false)
732
+ filterTerm.value = items.map(() => '')
733
+ },
734
+ {
735
+ immediate: true,
736
+ deep: true,
737
+ }
738
+ )
739
+
740
+ const grabColumn = ref<number>(-1)
741
+ const grabStartX = ref<number>(0)
742
+ const setGrab = (key: number, e: MouseEvent): void => {
743
+ grabColumn.value = key
744
+ const currentWidth = parseInt(columnsWidth.value[grabColumn.value][0])
745
+ grabStartX.value = e.clientX - currentWidth
746
+ }
747
+
748
+ const isDrag = ref<boolean>(false)
749
+
750
+ const mouseup = (): void => {
751
+ if (grabColumn.value === -1) {
752
+ return
753
+ }
754
+
755
+ grabColumn.value = -1
756
+ isDrag.value = false
757
+ }
758
+
759
+ let resizeObserve: ResizeObserver
760
+ let mousemove = (e: MouseEvent): void => {
761
+ if (grabColumn.value === -1) return
762
+
763
+ e.preventDefault()
764
+ isDrag.value = true
765
+ resizeObserve.disconnect()
766
+
767
+ const minWidth = parseInt(columnsWidth.value[grabColumn.value][1])
768
+ const changeX = Math.max(e.clientX - grabStartX.value, minWidth)
769
+
770
+ columnsWidth.value[grabColumn.value] = [`${changeX}px`, `${minWidth}px`]
771
+ }
772
+ mousemove = useThrottle(mousemove)
773
+
774
+ const setResizeObserve = (): void => {
775
+ const el = document.getElementById(outerWrapper)
776
+
777
+ if (!el) {
778
+ setTimeout(setResizeObserve, 0)
779
+ return
780
+ }
781
+
782
+ resizeObserve = new ResizeObserver(setColumnWidth)
783
+ resizeObserve.observe(el)
784
+ }
785
+ onMounted(() => {
786
+ window.addEventListener('mousemove', mousemove)
787
+ window.addEventListener('mouseup', mouseup)
788
+
789
+ setResizeObserve()
790
+ })
791
+ onUnmounted(() => {
792
+ window.removeEventListener('mouseup', mouseup)
793
+ window.removeEventListener('mousemove', mousemove)
794
+ })
795
+ </script>
796
+
797
+ <style scoped lang="scss">
798
+ @import '~/assets/scss/common/mixins';
799
+ .datagrid-outer-wrapper {
800
+ @include flex($dir: row);
801
+ padding-top: 12px;
802
+ flex-grow: 1;
803
+ overflow: auto;
804
+
805
+ & * {
806
+ box-sizing: border-box;
807
+ }
808
+
809
+ & svg {
810
+ fill: var(--table-color);
811
+ }
812
+
813
+ .datagrid-inner-wrapper {
814
+ @include flex($dir: column);
815
+ flex-grow: 1;
816
+ overflow: auto;
817
+
818
+ .datagrid {
819
+ overflow: auto;
820
+ flex: 1 1 auto;
821
+ border-radius: 0.125rem 0.125rem 0 0;
822
+ background-color: var(--block-view-bg-color);
823
+ border-color: var(--global-border-color);
824
+
825
+ .datagrid-table-wrapper {
826
+ display: flex;
827
+ flex: 1 1 auto;
828
+ min-height: 100%;
829
+
830
+ .datagrid-table {
831
+ @include flex($dir: column);
832
+ flex: 1 1 auto;
833
+ align-content: flex-start;
834
+ position: relative;
835
+
836
+ .datagrid-header {
837
+ position: sticky;
838
+ top: 0;
839
+ z-index: 501;
840
+ width: auto;
841
+
842
+ .datagrid-row-scrollable {
843
+ flex-direction: row;
844
+
845
+ .datagrid-column-separator {
846
+ user-select: none;
847
+
848
+ &::after {
849
+ cursor: col-resize;
850
+ }
851
+ }
852
+ }
853
+
854
+ .datagrid-row {
855
+ color: var(--table-color);
856
+ background-color: var(--block-view-bg-color);
857
+
858
+ &.datagrid-selected {
859
+ background-color: var(--row-selected-bg-color);
860
+ border-bottom: 1px solid var(--global-border-color);
861
+
862
+ & :deep(*) {
863
+ color: var(--table-active-color);
864
+ }
865
+ }
866
+
867
+ .datagrid-column {
868
+ background-color: var(--block-view-bg-color);
869
+ border-bottom: 1px solid var(--global-border-color);
870
+ padding: 6px 12px 5px;
871
+ //flex: 1 1 auto;
872
+
873
+ &:last-child {
874
+ flex: 1 1 auto;
875
+ }
876
+
877
+ &.datagrid-toggle-block {
878
+ width: 38px;
879
+ min-width: 38px;
880
+
881
+ .datagrid-column-separator {
882
+ cursor: default;
883
+
884
+ &::after {
885
+ cursor: default;
886
+ }
887
+ }
888
+ }
889
+ }
890
+
891
+ .datagrid-column-title {
892
+ align-self: auto;
893
+ color: var(--table-color);
894
+ background-color: var(--block-view-bg-color);
895
+ border-bottom-color: var(--global-border-color);
896
+ font-size: 11px;
897
+ @include flex($align: center);
898
+ display: flex;
899
+ flex-direction: row;
900
+ justify-content: flex-start;
901
+ align-items: center;
902
+ //line-height: 24px;
903
+ line-height: normal;
904
+
905
+ .title-column {
906
+ font-weight: bold;
907
+ font-size: 11px;
908
+ }
909
+
910
+ .sort-arrow-wrap {
911
+ margin-left: auto;
912
+ height: 14px;
913
+ width: 14px;
914
+ vertical-align: middle;
915
+
916
+ .sort-arrow {
917
+ &.down {
918
+ transform: rotate(180deg);
919
+ }
920
+ }
921
+ }
922
+ .title-icon {
923
+ width: 24px;
924
+ height: 24px;
925
+ }
926
+ }
927
+
928
+ .datagrid-filter-toggle {
929
+ background: unset;
930
+
931
+ .filter-icon {
932
+ width: 16px;
933
+ height: 16px;
934
+ }
935
+ }
936
+ }
937
+ }
938
+
939
+ .datagrid-placeholder-container {
940
+ .datagrid-placeholder.datagrid-empty {
941
+ background: var(--block-view-bg-color);
942
+ }
943
+ span {
944
+ font-size: 16px;
945
+ color: var(--global-font-color4);
946
+ }
947
+ }
948
+
949
+ .datagrid-row {
950
+ width: 100%;
951
+ min-width: max-content;
952
+ border-top: none;
953
+ color: var(--table-color);
954
+ background-color: var(--block-view-bg-color);
955
+ border-bottom: 1px solid var(--global-border-color);
956
+
957
+ &.datagrid-selected {
958
+ & :deep(*) {
959
+ color: var(--table-active-color);
960
+ }
961
+
962
+ .datagrid-cell {
963
+ background-color: var(--row-selected-bg-color);
964
+ border-bottom: 1px solid var(--global-border-color);
965
+ position: relative;
966
+ line-height: 1rem;
967
+
968
+ &.hidden-text-triangle::after {
969
+ content: '';
970
+ margin-right: -5%;
971
+ position: absolute;
972
+ transform: rotate(225deg);
973
+ border-bottom: 15px solid transparent;
974
+ border-right: 15px solid var(--global-bg-color);
975
+ bottom: 26%;
976
+ right: 0;
977
+ z-index: 1000003;
978
+ }
979
+ &.hidden-text-triangle::before {
980
+ content: '';
981
+ margin-right: -5%;
982
+ transform: rotate(-135deg);
983
+ position: absolute;
984
+ border-bottom: 16px solid transparent;
985
+ border-right: 16px solid var(--global-border-color);
986
+ bottom: 23%;
987
+ right: 0%;
988
+ z-index: 1000002;
989
+ }
990
+ }
991
+
992
+ .datagrid-row-detail {
993
+ background-color: var(--row-selected-bg-color);
994
+ border-bottom: 1px solid var(--global-border-color);
995
+ }
996
+ }
997
+
998
+ .datagrid-cell {
999
+ min-width: 38px;
1000
+ min-height: 28px;
1001
+ padding: 2px 12px 3px 12px;
1002
+
1003
+ &:last-child {
1004
+ flex: 1 1 auto;
1005
+ }
1006
+
1007
+ button {
1008
+ height: 0.9rem;
1009
+ width: 0.9rem;
1010
+
1011
+ .arrow-icon {
1012
+ width: 16px;
1013
+ height: 16px;
1014
+ transform: rotate(90deg);
1015
+ }
1016
+ }
1017
+
1018
+ .datagrid-cell-icon {
1019
+ display: inline-block;
1020
+ width: 16px;
1021
+ height: 16px;
1022
+ }
1023
+
1024
+ .datagrid-expandable-caret-button {
1025
+ cursor: pointer;
1026
+ width: 100%;
1027
+
1028
+ .datagrid-expandable-caret-icon {
1029
+ width: 16px;
1030
+ height: 16px;
1031
+ transform: rotate(90deg);
1032
+ fill: var(--table-caret-color);
1033
+
1034
+ &.toggle {
1035
+ transform: rotate(180deg);
1036
+ }
1037
+ }
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ .datagrid-row-sticky {
1043
+ @include flex($w: nowrap);
1044
+ position: sticky;
1045
+ left: 0;
1046
+ z-index: 500;
1047
+ background-color: var(--block-view-bg-color);
1048
+
1049
+ .datagrid-column {
1050
+ color: var(--table-color);
1051
+ background-color: var(--block-view-bg-color);
1052
+ border-bottom-color: var(--global-border-color);
1053
+ text-align: left;
1054
+ display: flex;
1055
+ flex: 1 1 auto;
1056
+ vertical-align: top;
1057
+ border: none;
1058
+
1059
+ &.datagrid-expandable-caret {
1060
+ .datagrid-column-separator {
1061
+ display: block;
1062
+
1063
+ &::after {
1064
+ top: 0;
1065
+ height: 18px;
1066
+ }
1067
+ }
1068
+
1069
+ .radio-btn {
1070
+ width: 16px;
1071
+ height: 16px;
1072
+ }
1073
+ }
1074
+
1075
+ .datagrid-column-separator {
1076
+ position: relative;
1077
+ //left: 0.6rem;
1078
+ flex: 0 0 auto;
1079
+ width: 0.05rem;
1080
+ order: 100;
1081
+ margin-left: auto;
1082
+ height: 100%;
1083
+ }
1084
+ }
1085
+
1086
+ .datagrid-fixed-column {
1087
+ background-color: var(--block-view-bg-color);
1088
+
1089
+ &::after {
1090
+ content: '';
1091
+ width: 0.05rem;
1092
+ height: calc(100% - 0.5rem);
1093
+ position: absolute;
1094
+ right: 0;
1095
+ top: 0.25rem;
1096
+ background-color: var(--global-border-color);
1097
+ }
1098
+ }
1099
+ }
1100
+
1101
+ .datagrid-row-scrollable {
1102
+ @include flex($ff: row nowrap);
1103
+ flex: 1 1 auto;
1104
+
1105
+ .datagrid-scrolling-cells {
1106
+ @include flex($ff: row nowrap);
1107
+ flex: 1 1 auto;
1108
+ }
1109
+ }
1110
+ .datagrid-body-row {
1111
+ .datagrid-row-scrollable {
1112
+ @include flex($ff: column nowrap);
1113
+
1114
+ .datagrid-row-detail {
1115
+ flex: 1;
1116
+ }
1117
+ }
1118
+
1119
+ &:not(.datagrid-selected):hover {
1120
+ border-bottom: 1px solid var(--table-hover-row-border-color);
1121
+ background-color: var(--table-hover-row-background-color);
1122
+ color: var(--table-hover-row-color);
1123
+
1124
+ .datagrid-fixed-column {
1125
+ background-color: var(--table-hover-row-background-color);
1126
+ }
1127
+ .datagrid-cell {
1128
+ background-color: var(--table-hover-row-background-color);
1129
+ }
1130
+ }
1131
+ }
1132
+ }
1133
+ }
1134
+ }
1135
+
1136
+ .datagrid-footer {
1137
+ flex: 0 0 auto;
1138
+ @include flex($ff: row nowrap, $just: space-between, $align: stretch);
1139
+ font-size: 0.55rem;
1140
+ background-color: var(--block-view-bg-color);
1141
+ border: 0.05rem solid var(--global-border-color);
1142
+ border-top: none;
1143
+ border-radius: 0 0 0.15rem 0.15rem;
1144
+ padding: 0 0.6rem;
1145
+ height: 28px;
1146
+
1147
+ .clr-form-control-disabled {
1148
+ opacity: 1;
1149
+
1150
+ .clr-checkbox-wrapper {
1151
+ label {
1152
+ color: #8c8c8c;
1153
+ margin-right: 9px;
1154
+ padding-left: 22px;
1155
+
1156
+ &:before {
1157
+ position: absolute;
1158
+ top: 4px;
1159
+ left: 0;
1160
+ content: '';
1161
+ display: inline-block;
1162
+ height: 16px;
1163
+ width: 16px;
1164
+ border: none;
1165
+ border-radius: 3px;
1166
+ background-color: var(--table-checkbox-color);
1167
+ }
1168
+
1169
+ &:after {
1170
+ position: absolute;
1171
+ content: '';
1172
+ display: inline-block;
1173
+ height: 5px;
1174
+ width: 8px;
1175
+ border-left: 2px solid #fff;
1176
+ border-bottom: 2px solid #fff;
1177
+ top: 4px;
1178
+ left: 4px;
1179
+ transform: translateY(4px) rotate(-45deg);
1180
+ }
1181
+ }
1182
+ }
1183
+ }
1184
+ }
1185
+
1186
+ .datagrid-spinner {
1187
+ top: 0.6rem;
1188
+ height: calc(100% - 0.6rem);
1189
+ }
1190
+
1191
+ .datagrid-footer-description {
1192
+ flex: 1 1 auto;
1193
+
1194
+ :deep(svg) {
1195
+ fill: var(--table-switch-color);
1196
+ }
1197
+ }
1198
+
1199
+ .clr-radio-wrapper,
1200
+ .clr-checkbox-wrapper {
1201
+ height: 18px;
1202
+ }
1203
+
1204
+ .clr-radio-wrapper label,
1205
+ .clr-checkbox-wrapper label {
1206
+ padding-left: 16px;
1207
+ }
1208
+ }
1209
+ }
1210
+ //.vertical-divider {
1211
+ // width: 1px;
1212
+ // height: 22px;
1213
+ // background: #bbb;
1214
+ // margin: 2px 2px 0 -5px;
1215
+ //}
1216
+
1217
+ .hidden-features {
1218
+ padding: 9px 14px;
1219
+ position: absolute;
1220
+ top: 8.5%;
1221
+ right: 0%;
1222
+ left: 25.35%;
1223
+ bottom: 0%;
1224
+ z-index: 1000001;
1225
+ background-color: var(--global-bg-color);
1226
+ color: var(--global-font-color2);
1227
+ border: 1px solid var(--global-border-color);
1228
+ overflow-y: auto;
1229
+ overflow-x: hidden;
1230
+
1231
+ .header {
1232
+ display: flex;
1233
+ align-items: center;
1234
+ justify-content: space-between;
1235
+ background-color: inherit;
1236
+
1237
+ h3 {
1238
+ font-size: 1rem;
1239
+ color: var(--global-font-color2) !important;
1240
+ line-height: 1.7rem;
1241
+ }
1242
+ button {
1243
+ line-height: 24px;
1244
+
1245
+ .close-icon {
1246
+ margin-left: 10px;
1247
+ width: 24px;
1248
+ height: 24px;
1249
+ }
1250
+ }
1251
+ }
1252
+ }
1253
+ .double-arrow-width {
1254
+ width: 47px;
1255
+ }
1256
+ .double-arrow-wrap {
1257
+ width: 30px;
1258
+ height: 20px;
1259
+ padding-top: 1px;
1260
+ padding-left: 5px;
1261
+ cursor: pointer;
1262
+ background-color: transparent;
1263
+
1264
+ .double-arrow {
1265
+ background-color: transparent;
1266
+ transform: rotate(90deg);
1267
+ width: 16px;
1268
+ height: 16px;
1269
+ }
1270
+
1271
+ .double-arrow.arrow-selected {
1272
+ transform: rotate(-90deg) !important;
1273
+ background-color: #0079b8;
1274
+ }
1275
+ }
1276
+ .double-arrow-wrap.arrow-selected {
1277
+ background-color: #0079b8;
1278
+ border-radius: 3px;
1279
+ }
1280
+ </style>
1281
+
1282
+ <style>
1283
+ :root {
1284
+ --table-color: #565656;
1285
+ --table-active-color: #fff;
1286
+ --table-checkbox-color: #454545;
1287
+ --table-caret-color: #454545;
1288
+ --table-switch-color: #575757;
1289
+ --table-hover-row-border-color: #666;
1290
+ --table-hover-row-background-color: #e8e8e8;
1291
+ --table-hover-row-color: #454545;
1292
+ --table-spinner-bg-color: #ffffff99;
1293
+ }
1294
+
1295
+ :root.dark-theme {
1296
+ --table-color: #fff;
1297
+ --table-active-color: #565656;
1298
+ --table-checkbox-color: #49aeda;
1299
+ --table-caret-color: #ffffff;
1300
+ --table-switch-color: #b3b3b3;
1301
+ --table-hover-row-border-color: #fff;
1302
+ --table-hover-row-background-color: #324f61;
1303
+ --table-hover-row-color: #e9ecef;
1304
+ --table-spinner-bg-color: rgba(0, 0, 0, 0.5);
1305
+ }
1306
+ </style>