bfg-common 1.2.71 → 1.2.73

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