@vc-shell/framework 1.0.56 → 1.0.59

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 (283) hide show
  1. package/core/plugins/validation/rules.ts +67 -24
  2. package/core/types/index.ts +19 -2
  3. package/dist/framework.mjs +1964 -4899
  4. package/dist/index.css +1 -1
  5. package/dist/types/core/plugins/validation/rules.d.ts +8 -30
  6. package/dist/types/core/plugins/validation/rules.d.ts.map +1 -1
  7. package/dist/types/core/types/index.d.ts +17 -2
  8. package/dist/types/core/types/index.d.ts.map +1 -1
  9. package/dist/types/index.d.ts +1 -1
  10. package/dist/types/index.d.ts.map +1 -1
  11. package/dist/types/shared/components/app-switcher/components/index.d.ts +2 -0
  12. package/dist/types/shared/components/app-switcher/components/index.d.ts.map +1 -0
  13. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts +22 -0
  14. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -0
  15. package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue.d.ts +1 -1
  16. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -0
  17. package/dist/types/shared/components/app-switcher/composables/index.d.ts.map +1 -0
  18. package/dist/types/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.d.ts +1 -1
  19. package/dist/types/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -0
  20. package/dist/types/shared/components/app-switcher/index.d.ts +13 -0
  21. package/dist/types/shared/components/app-switcher/index.d.ts.map +1 -0
  22. package/dist/types/shared/components/blade-navigation/components/index.d.ts +2 -0
  23. package/dist/types/shared/components/blade-navigation/components/index.d.ts.map +1 -0
  24. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts +66 -0
  25. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -0
  26. package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -1
  27. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -0
  28. package/dist/types/shared/components/blade-navigation/composables/index.d.ts.map +1 -0
  29. package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.d.ts +1 -1
  30. package/dist/types/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -0
  31. package/dist/types/shared/components/blade-navigation/index.d.ts +14 -0
  32. package/dist/types/shared/components/blade-navigation/index.d.ts.map +1 -0
  33. package/dist/types/shared/{blade-navigation → components/blade-navigation}/types/index.d.ts +1 -1
  34. package/dist/types/shared/components/blade-navigation/types/index.d.ts.map +1 -0
  35. package/dist/types/shared/index.d.ts +4 -3
  36. package/dist/types/shared/index.d.ts.map +1 -1
  37. package/dist/types/shared/{assets → modules/assets}/components/assets-details/assets-details.vue.d.ts +4 -13
  38. package/dist/types/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -0
  39. package/dist/types/shared/modules/assets/components/assets-details/index.d.ts +45 -0
  40. package/dist/types/shared/modules/assets/components/assets-details/index.d.ts.map +1 -0
  41. package/dist/types/shared/modules/assets/components/index.d.ts +2 -0
  42. package/dist/types/shared/modules/assets/components/index.d.ts.map +1 -0
  43. package/dist/types/shared/modules/assets/index.d.ts +12 -0
  44. package/dist/types/shared/modules/assets/index.d.ts.map +1 -0
  45. package/dist/types/shared/modules/assets/locales/index.d.ts +3 -0
  46. package/dist/types/shared/modules/assets/locales/index.d.ts.map +1 -0
  47. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +58 -0
  48. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -0
  49. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts +59 -0
  50. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -0
  51. package/dist/types/shared/modules/assets-manager/components/index.d.ts +2 -0
  52. package/dist/types/shared/modules/assets-manager/components/index.d.ts.map +1 -0
  53. package/dist/types/shared/modules/assets-manager/index.d.ts +12 -0
  54. package/dist/types/shared/modules/assets-manager/index.d.ts.map +1 -0
  55. package/dist/types/shared/modules/assets-manager/locales/index.d.ts.map +1 -0
  56. package/dist/types/shared/utilities/assets.d.ts +5 -0
  57. package/dist/types/shared/utilities/assets.d.ts.map +1 -0
  58. package/dist/types/ui/components/atoms/vc-badge/index.d.ts +106 -9
  59. package/dist/types/ui/components/atoms/vc-badge/index.d.ts.map +1 -1
  60. package/dist/types/ui/components/atoms/vc-button/index.d.ts +153 -6
  61. package/dist/types/ui/components/atoms/vc-button/index.d.ts.map +1 -1
  62. package/dist/types/ui/components/atoms/vc-card/index.d.ts +163 -7
  63. package/dist/types/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  64. package/dist/types/ui/components/atoms/vc-checkbox/index.d.ts +143 -7
  65. package/dist/types/ui/components/atoms/vc-checkbox/index.d.ts.map +1 -1
  66. package/dist/types/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  67. package/dist/types/ui/components/atoms/vc-col/index.d.ts +81 -6
  68. package/dist/types/ui/components/atoms/vc-col/index.d.ts.map +1 -1
  69. package/dist/types/ui/components/atoms/vc-container/index.d.ts +112 -6
  70. package/dist/types/ui/components/atoms/vc-container/index.d.ts.map +1 -1
  71. package/dist/types/ui/components/atoms/vc-hint/index.d.ts +51 -6
  72. package/dist/types/ui/components/atoms/vc-hint/index.d.ts.map +1 -1
  73. package/dist/types/ui/components/atoms/vc-icon/index.d.ts +26 -7
  74. package/dist/types/ui/components/atoms/vc-icon/index.d.ts.map +1 -1
  75. package/dist/types/ui/components/atoms/vc-image/index.d.ts +67 -7
  76. package/dist/types/ui/components/atoms/vc-image/index.d.ts.map +1 -1
  77. package/dist/types/ui/components/atoms/vc-info-row/index.d.ts +33 -7
  78. package/dist/types/ui/components/atoms/vc-info-row/index.d.ts.map +1 -1
  79. package/dist/types/ui/components/atoms/vc-label/index.d.ts +95 -7
  80. package/dist/types/ui/components/atoms/vc-label/index.d.ts.map +1 -1
  81. package/dist/types/ui/components/atoms/vc-link/index.d.ts +103 -6
  82. package/dist/types/ui/components/atoms/vc-link/index.d.ts.map +1 -1
  83. package/dist/types/ui/components/atoms/vc-loading/index.d.ts +9 -7
  84. package/dist/types/ui/components/atoms/vc-loading/index.d.ts.map +1 -1
  85. package/dist/types/ui/components/atoms/vc-progress/index.d.ts +100 -6
  86. package/dist/types/ui/components/atoms/vc-progress/index.d.ts.map +1 -1
  87. package/dist/types/ui/components/atoms/vc-row/index.d.ts +51 -6
  88. package/dist/types/ui/components/atoms/vc-row/index.d.ts.map +1 -1
  89. package/dist/types/ui/components/atoms/vc-status/index.d.ts +116 -6
  90. package/dist/types/ui/components/atoms/vc-status/index.d.ts.map +1 -1
  91. package/dist/types/ui/components/atoms/vc-status-icon/index.d.ts +9 -7
  92. package/dist/types/ui/components/atoms/vc-status-icon/index.d.ts.map +1 -1
  93. package/dist/types/ui/components/atoms/vc-switch/index.d.ts +39 -7
  94. package/dist/types/ui/components/atoms/vc-switch/index.d.ts.map +1 -1
  95. package/dist/types/ui/components/atoms/vc-widget/index.d.ts +31 -7
  96. package/dist/types/ui/components/atoms/vc-widget/index.d.ts.map +1 -1
  97. package/dist/types/ui/components/index.d.ts +39 -39
  98. package/dist/types/ui/components/index.d.ts.map +1 -1
  99. package/dist/types/ui/components/molecules/vc-breadcrumbs/index.d.ts +33 -7
  100. package/dist/types/ui/components/molecules/vc-breadcrumbs/index.d.ts.map +1 -1
  101. package/dist/types/ui/components/molecules/vc-code-editor/index.d.ts +188 -6
  102. package/dist/types/ui/components/molecules/vc-code-editor/index.d.ts.map +1 -1
  103. package/dist/types/ui/components/molecules/vc-editor/index.d.ts +204 -6
  104. package/dist/types/ui/components/molecules/vc-editor/index.d.ts.map +1 -1
  105. package/dist/types/ui/components/molecules/vc-file-upload/index.d.ts +175 -6
  106. package/dist/types/ui/components/molecules/vc-file-upload/index.d.ts.map +1 -1
  107. package/dist/types/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  108. package/dist/types/ui/components/molecules/vc-form/index.d.ts +51 -6
  109. package/dist/types/ui/components/molecules/vc-form/index.d.ts.map +1 -1
  110. package/dist/types/ui/components/molecules/vc-input/index.d.ts +371 -46
  111. package/dist/types/ui/components/molecules/vc-input/index.d.ts.map +1 -1
  112. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts +1 -1
  113. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  114. package/dist/types/ui/components/molecules/vc-input-currency/index.d.ts +365 -12
  115. package/dist/types/ui/components/molecules/vc-input-currency/index.d.ts.map +1 -1
  116. package/dist/types/ui/components/molecules/vc-notification/index.d.ts +101 -6
  117. package/dist/types/ui/components/molecules/vc-notification/index.d.ts.map +1 -1
  118. package/dist/types/ui/components/molecules/vc-pagination/index.d.ts +36 -7
  119. package/dist/types/ui/components/molecules/vc-pagination/index.d.ts.map +1 -1
  120. package/dist/types/ui/components/molecules/vc-rating/index.d.ts +156 -6
  121. package/dist/types/ui/components/molecules/vc-rating/index.d.ts.map +1 -1
  122. package/dist/types/ui/components/molecules/vc-select/index.d.ts +566 -69
  123. package/dist/types/ui/components/molecules/vc-select/index.d.ts.map +1 -1
  124. package/dist/types/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  125. package/dist/types/ui/components/molecules/vc-slider/index.d.ts +159 -10
  126. package/dist/types/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
  127. package/dist/types/ui/components/molecules/vc-textarea/index.d.ts +204 -6
  128. package/dist/types/ui/components/molecules/vc-textarea/index.d.ts.map +1 -1
  129. package/dist/types/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts.map +1 -1
  130. package/dist/types/ui/components/organisms/vc-app/index.d.ts +302 -9
  131. package/dist/types/ui/components/organisms/vc-app/index.d.ts.map +1 -1
  132. package/dist/types/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  133. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +2 -19
  134. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  135. package/dist/types/ui/components/organisms/vc-blade/index.d.ts +201 -7
  136. package/dist/types/ui/components/organisms/vc-blade/index.d.ts.map +1 -1
  137. package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts +59 -7
  138. package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts.map +1 -1
  139. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +2 -20
  140. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  141. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts +154 -7
  142. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts.map +1 -1
  143. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +2 -6
  144. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  145. package/dist/types/ui/components/organisms/vc-login-form/index.d.ts +113 -6
  146. package/dist/types/ui/components/organisms/vc-login-form/index.d.ts.map +1 -1
  147. package/dist/types/ui/components/organisms/vc-popup/index.d.ts +129 -6
  148. package/dist/types/ui/components/organisms/vc-popup/index.d.ts.map +1 -1
  149. package/dist/types/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +1 -15
  150. package/dist/types/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  151. package/dist/types/ui/components/organisms/vc-table/index.d.ts +661 -27
  152. package/dist/types/ui/components/organisms/vc-table/index.d.ts.map +1 -1
  153. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts +110 -99
  154. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
  155. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts +40 -29
  156. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  157. package/dist/types/ui/types/index.d.ts +46 -0
  158. package/dist/types/ui/types/index.d.ts.map +1 -0
  159. package/package.json +7 -8
  160. package/shared/components/app-switcher/components/index.ts +1 -0
  161. package/shared/components/app-switcher/components/vc-app-switcher/index.ts +3 -0
  162. package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue +1 -1
  163. package/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.ts +2 -2
  164. package/shared/components/app-switcher/index.ts +14 -0
  165. package/shared/components/blade-navigation/components/index.ts +1 -0
  166. package/shared/components/blade-navigation/components/vc-blade-navigation/index.ts +3 -0
  167. package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue +2 -2
  168. package/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.ts +6 -5
  169. package/shared/components/blade-navigation/index.ts +15 -0
  170. package/shared/{blade-navigation → components/blade-navigation}/types/index.ts +1 -1
  171. package/shared/index.ts +10 -7
  172. package/shared/modules/assets/components/assets-details/assets-details.vue +166 -0
  173. package/shared/modules/assets/components/assets-details/index.ts +3 -0
  174. package/shared/modules/assets/components/index.ts +1 -0
  175. package/shared/modules/assets/index.ts +14 -0
  176. package/shared/{assets → modules/assets}/locales/en.json +7 -5
  177. package/shared/modules/assets/locales/index.ts +2 -0
  178. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +372 -0
  179. package/shared/modules/assets-manager/components/assets-manager/index.ts +3 -0
  180. package/shared/modules/assets-manager/components/index.ts +1 -0
  181. package/shared/modules/assets-manager/index.ts +14 -0
  182. package/shared/modules/assets-manager/locales/en.json +28 -0
  183. package/shared/utilities/assets.ts +40 -0
  184. package/ui/components/atoms/vc-badge/index.ts +10 -9
  185. package/ui/components/atoms/vc-button/index.ts +7 -6
  186. package/ui/components/atoms/vc-card/index.ts +8 -7
  187. package/ui/components/atoms/vc-checkbox/index.ts +8 -7
  188. package/ui/components/atoms/vc-checkbox/vc-checkbox.vue +1 -11
  189. package/ui/components/atoms/vc-col/index.ts +7 -6
  190. package/ui/components/atoms/vc-container/index.ts +7 -6
  191. package/ui/components/atoms/vc-hint/index.ts +7 -6
  192. package/ui/components/atoms/vc-icon/index.ts +2 -8
  193. package/ui/components/atoms/vc-image/index.ts +2 -8
  194. package/ui/components/atoms/vc-info-row/index.ts +2 -8
  195. package/ui/components/atoms/vc-label/index.ts +8 -7
  196. package/ui/components/atoms/vc-link/index.ts +7 -6
  197. package/ui/components/atoms/vc-loading/index.ts +2 -8
  198. package/ui/components/atoms/vc-progress/index.ts +7 -6
  199. package/ui/components/atoms/vc-row/index.ts +7 -6
  200. package/ui/components/atoms/vc-status/index.ts +7 -6
  201. package/ui/components/atoms/vc-status-icon/index.ts +2 -8
  202. package/ui/components/atoms/vc-switch/index.ts +2 -8
  203. package/ui/components/atoms/vc-widget/index.ts +2 -8
  204. package/ui/components/index.ts +39 -39
  205. package/ui/components/molecules/vc-breadcrumbs/index.ts +2 -8
  206. package/ui/components/molecules/vc-code-editor/index.ts +7 -6
  207. package/ui/components/molecules/vc-editor/index.ts +7 -6
  208. package/ui/components/molecules/vc-file-upload/index.ts +7 -6
  209. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +19 -4
  210. package/ui/components/molecules/vc-form/index.ts +7 -6
  211. package/ui/components/molecules/vc-input/index.ts +57 -56
  212. package/ui/components/molecules/vc-input/vc-input.vue +1 -1
  213. package/ui/components/molecules/vc-input-currency/index.ts +15 -14
  214. package/ui/components/molecules/vc-notification/index.ts +7 -6
  215. package/ui/components/molecules/vc-pagination/index.ts +2 -8
  216. package/ui/components/molecules/vc-rating/index.ts +7 -6
  217. package/ui/components/molecules/vc-select/index.ts +84 -84
  218. package/ui/components/molecules/vc-select/vc-select.vue +2 -2
  219. package/ui/components/molecules/vc-slider/index.ts +10 -9
  220. package/ui/components/molecules/vc-textarea/index.ts +7 -6
  221. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +3 -2
  222. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +3 -6
  223. package/ui/components/organisms/vc-app/index.ts +10 -9
  224. package/ui/components/organisms/vc-app/vc-app.vue +7 -0
  225. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +2 -6
  226. package/ui/components/organisms/vc-blade/index.ts +8 -7
  227. package/ui/components/organisms/vc-dynamic-property/index.ts +2 -8
  228. package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +6 -0
  229. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +5 -11
  230. package/ui/components/organisms/vc-gallery/index.ts +2 -8
  231. package/ui/components/organisms/vc-gallery/vc-gallery.vue +164 -49
  232. package/ui/components/organisms/vc-login-form/index.ts +7 -6
  233. package/ui/components/organisms/vc-popup/index.ts +7 -6
  234. package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +1 -4
  235. package/ui/components/organisms/vc-table/index.ts +16 -14
  236. package/ui/components/organisms/vc-table/vc-table.vue +271 -131
  237. package/ui/types/index.ts +53 -0
  238. package/dist/types/shared/app-switcher/components/index.d.ts +0 -2
  239. package/dist/types/shared/app-switcher/components/index.d.ts.map +0 -1
  240. package/dist/types/shared/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +0 -1
  241. package/dist/types/shared/app-switcher/composables/index.d.ts.map +0 -1
  242. package/dist/types/shared/app-switcher/composables/useAppSwitcher/index.d.ts.map +0 -1
  243. package/dist/types/shared/app-switcher/index.d.ts +0 -7
  244. package/dist/types/shared/app-switcher/index.d.ts.map +0 -1
  245. package/dist/types/shared/assets/components/assets-details/assets-details.vue.d.ts.map +0 -1
  246. package/dist/types/shared/assets/components/index.d.ts +0 -2
  247. package/dist/types/shared/assets/components/index.d.ts.map +0 -1
  248. package/dist/types/shared/assets/index.d.ts +0 -6
  249. package/dist/types/shared/assets/index.d.ts.map +0 -1
  250. package/dist/types/shared/assets/locales/index.d.ts.map +0 -1
  251. package/dist/types/shared/blade-navigation/components/index.d.ts +0 -2
  252. package/dist/types/shared/blade-navigation/components/index.d.ts.map +0 -1
  253. package/dist/types/shared/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +0 -1
  254. package/dist/types/shared/blade-navigation/composables/index.d.ts.map +0 -1
  255. package/dist/types/shared/blade-navigation/composables/useBladeNavigation/index.d.ts.map +0 -1
  256. package/dist/types/shared/blade-navigation/index.d.ts +0 -8
  257. package/dist/types/shared/blade-navigation/index.d.ts.map +0 -1
  258. package/dist/types/shared/blade-navigation/types/index.d.ts.map +0 -1
  259. package/dist/types/ui/services/components.d.ts +0 -2
  260. package/dist/types/ui/services/components.d.ts.map +0 -1
  261. package/dist/types/ui/services/types/components.d.ts +0 -14
  262. package/dist/types/ui/services/types/components.d.ts.map +0 -1
  263. package/dist/types/ui/services/types/index.d.ts +0 -7
  264. package/dist/types/ui/services/types/index.d.ts.map +0 -1
  265. package/dist/types/ui/services/types/ts-helpers.d.ts +0 -8
  266. package/dist/types/ui/services/types/ts-helpers.d.ts.map +0 -1
  267. package/shared/app-switcher/components/index.ts +0 -1
  268. package/shared/app-switcher/index.ts +0 -7
  269. package/shared/assets/components/assets-details/assets-details.vue +0 -116
  270. package/shared/assets/components/index.ts +0 -1
  271. package/shared/assets/index.ts +0 -7
  272. package/shared/blade-navigation/components/index.ts +0 -1
  273. package/shared/blade-navigation/index.ts +0 -8
  274. package/ui/services/components.ts +0 -40
  275. package/ui/services/types/components.ts +0 -14
  276. package/ui/services/types/index.ts +0 -9
  277. package/ui/services/types/ts-helpers.ts +0 -18
  278. /package/dist/types/shared/{app-switcher → components/app-switcher}/composables/index.d.ts +0 -0
  279. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/index.d.ts +0 -0
  280. /package/dist/types/shared/{assets → modules/assets-manager}/locales/index.d.ts +0 -0
  281. /package/shared/{app-switcher → components/app-switcher}/composables/index.ts +0 -0
  282. /package/shared/{blade-navigation → components/blade-navigation}/composables/index.ts +0 -0
  283. /package/shared/{assets → modules/assets-manager}/locales/index.ts +0 -0
@@ -91,7 +91,8 @@
91
91
  <!-- Desktop table view -->
92
92
  <table
93
93
  v-else
94
- class="[border-spacing:0] tw-border-collapse tw-relative tw-pt-[43px] tw-table-fixed tw-box-border tw-w-full tw-relative"
94
+ ref="tableRef"
95
+ class="[border-spacing:0] tw-border-collapse tw-relative tw-pt-[43px] tw-table-fixed tw-box-border tw-w-full"
95
96
  :class="{
96
97
  'vc-table_empty': !items || !items.length,
97
98
  'vc-table_multiselect': multiselect,
@@ -99,7 +100,7 @@
99
100
  >
100
101
  <thead
101
102
  v-if="filteredCols"
102
- class="vc-table__header"
103
+ class="vc-table__header tw-relative"
103
104
  >
104
105
  <tr class="vc-table__header-row">
105
106
  <th
@@ -108,8 +109,7 @@
108
109
  >
109
110
  <div class="tw-flex tw-justify-center tw-items-center">
110
111
  <VcCheckbox
111
- :modelValue="headerCheckbox"
112
- @update:modelValue="processHeaderCheckbox"
112
+ v-model="headerCheckbox"
113
113
  @click.stop
114
114
  ></VcCheckbox>
115
115
  </div>
@@ -194,7 +194,11 @@
194
194
  </tr>
195
195
  <div
196
196
  ref="resizer"
197
- class="tw-w-[1px] tw-absolute tw-z-10 tw-hidden tw-h-full tw-bg-[#e5e7eb] tw-cursor-col-resize"
197
+ class="tw-w-px tw-absolute tw-z-10 tw-hidden tw-h-full tw-bg-[#e5e7eb] tw-cursor-col-resize"
198
+ ></div>
199
+ <div
200
+ ref="reorderRef"
201
+ class="tw-w-0.5 tw-bg-[#41afe6] tw-h-full tw-absolute tw-top-0 tw-bottom-0 tw-z-[2] tw-hidden"
198
202
  ></div>
199
203
  </thead>
200
204
 
@@ -203,31 +207,39 @@
203
207
  class="vc-table__body"
204
208
  >
205
209
  <tr
206
- v-for="(item, i) in calculatedItems"
207
- :key="item.id"
210
+ v-for="(item, itemIndex) in items"
211
+ :key="(typeof item === 'object' && 'id' in item && item.id) || itemIndex"
208
212
  class="vc-table__body-row tw-h-[60px] tw-bg-white hover:tw-bg-[#dfeef9] tw-cursor-pointer"
209
213
  :class="{
210
- 'tw-bg-[#f8f8f8]': i % 2 === 1,
211
- '!tw-bg-[#dfeef9] hover:tw-bg-[#dfeef9]': item && item.id ? selectedItemId === item.id : false,
214
+ 'tw-bg-[#f8f8f8]': itemIndex % 2 === 1,
215
+ '!tw-bg-[#dfeef9] hover:tw-bg-[#dfeef9]':
216
+ typeof item === 'object' && 'id' in item && item.id ? selectedItemId === item.id : false,
212
217
  }"
213
218
  @click="$emit('itemClick', item)"
214
219
  @mouseleave="closeActions"
220
+ @mousedown="onRowMouseDown"
221
+ @dragstart="onRowDragStart($event, item)"
222
+ @dragover="onRowDragOver($event, item)"
223
+ @dragleave="onRowDragLeave"
224
+ @dragend="onRowDragEnd"
225
+ @drop="onRowDrop"
215
226
  >
216
227
  <td
217
- v-if="multiselect"
228
+ v-if="multiselect && typeof item === 'object'"
218
229
  class="tw-w-[50px] tw-max-w-[50px] tw-min-w-[50px]"
230
+ @click.stop
219
231
  >
220
232
  <div class="tw-flex tw-justify-center tw-items-center">
221
233
  <VcCheckbox
222
- :modelValue="checkboxes[item.id]"
223
- @update:modelValue="processCheckbox(item.id, $event)"
224
- @click.stop
234
+ @update:model-value="rowCheckbox(item)"
235
+ :model-value="isSelected(item)"
225
236
  ></VcCheckbox>
226
237
  </div>
227
238
  </td>
228
239
  <td
229
240
  class="tw-box-border tw-overflow-visible tw-px-3 tw-w-[44px] tw-max-w-[44px] tw-min-w-[44px]"
230
- v-if="itemActionBuilder"
241
+ v-if="itemActionBuilder && typeof item === 'object'"
242
+ @click.stop
231
243
  >
232
244
  <div class="vc-table__body-actions-container tw-relative tw-flex tw-justify-center tw-items-center">
233
245
  <button
@@ -235,7 +247,7 @@
235
247
  @click.stop="showActions(item, item.id)"
236
248
  :ref="(el: Element) => setActionToggleRefs(el, item.id)"
237
249
  aria-describedby="tooltip"
238
- :disabled="!(item.actions && item.actions.length)"
250
+ :disabled="!(itemActions[itemIndex] && itemActions[itemIndex].length)"
239
251
  >
240
252
  <VcIcon
241
253
  icon="fas fa-ellipsis-v"
@@ -250,10 +262,10 @@
250
262
  role="tooltip"
251
263
  >
252
264
  <div
253
- class="tw-flex tw-items-center tw-flex-row tw-text-[#3f3f3f] tw-font-normal not-italic tw-text-base tw-leading-[20px] tw-gap-[25px]"
265
+ class="tw-flex tw-items-start tw-flex-col tw-text-[#3f3f3f] tw-font-normal not-italic tw-text-base tw-leading-[20px] tw-gap-[25px]"
254
266
  >
255
267
  <div
256
- v-for="(itemAction, i) in item.actions"
268
+ v-for="(itemAction, i) in itemActions[itemIndex]"
257
269
  :key="i"
258
270
  :class="[
259
271
  'tw-flex tw-flex-row tw-items-center tw-text-[#319ed4] tw-cursor-pointer',
@@ -281,8 +293,8 @@
281
293
  </td>
282
294
  <td
283
295
  v-for="cell in filteredCols"
284
- :key="`${item.id}_${cell.id}`"
285
- class="tw-box-border tw-overflow-hidden tw-px-3"
296
+ :key="`${(typeof item === 'object' && 'id' in item && item.id) || itemIndex}_${cell.id}`"
297
+ class="tw-box-border tw-overflow-hidden tw-px-3 tw-truncate"
286
298
  :class="cell.class"
287
299
  :style="{ maxWidth: cell.width, width: cell.width }"
288
300
  >
@@ -292,6 +304,7 @@
292
304
  :cell="cell"
293
305
  >
294
306
  <VcTableCell
307
+ v-if="typeof item === 'object'"
295
308
  :cell="cell"
296
309
  :item="item"
297
310
  ></VcTableCell>
@@ -379,7 +392,7 @@
379
392
  </template>
380
393
 
381
394
  <script lang="ts" setup>
382
- import { computed, nextTick, ref, watch, onBeforeUpdate, onBeforeUnmount, Ref } from "vue";
395
+ import { computed, nextTick, ref, watch, onBeforeUpdate, onBeforeUnmount, Ref, onUpdated, onBeforeMount } from "vue";
383
396
  import VcTableCounter from "./_internal/vc-table-counter/vc-table-counter.vue";
384
397
  import VcTableFilter from "./_internal/vc-table-filter/vc-table-filter.vue";
385
398
  import VcTableMobileItem from "./_internal/vc-table-mobile-item/vc-table-mobile-item.vue";
@@ -387,7 +400,7 @@ import VcTableCell from "./_internal/vc-table-cell/vc-table-cell.vue";
387
400
  import VcTableColumnSwitcher from "./_internal/vc-table-column-switcher/vc-table-column-switcher.vue";
388
401
  import { createPopper, Instance } from "@popperjs/core";
389
402
  import { IActionBuilderResult, ITableColumns } from "./../../../../core/types";
390
- import { useLocalStorage, computedAsync, useCurrentElement } from "@vueuse/core";
403
+ import { useLocalStorage, useCurrentElement } from "@vueuse/core";
391
404
  import VcContainer from "./../../atoms/vc-container/vc-container.vue";
392
405
 
393
406
  export interface StatusImage {
@@ -397,12 +410,26 @@ export interface StatusImage {
397
410
  clickHandler?: () => void;
398
411
  }
399
412
 
413
+ export interface TableItem {
414
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
415
+ [x: string]: any;
416
+ id?: string;
417
+ actions?: IActionBuilderResult[];
418
+ }
419
+
420
+ export type TableItemType = TableItem | string;
421
+
400
422
  export interface Props {
401
423
  columns: ITableColumns[];
402
- items: { id?: string }[] | string[];
403
- itemActionBuilder?: (item: { id?: string }) => IActionBuilderResult[];
424
+ items: TableItemType[];
425
+ itemActionBuilder?: (item: TableItem) => IActionBuilderResult[];
404
426
  sort?: string;
405
427
  multiselect?: boolean;
428
+ /**
429
+ * Emit whole item instead of {id: boolean} while prop multiselect = true
430
+ * @default false
431
+ */
432
+ multiselectEmitItem?: boolean;
406
433
  expanded?: boolean;
407
434
  totalLabel?: string;
408
435
  totalCount?: number;
@@ -420,20 +447,21 @@ export interface Props {
420
447
  scrolling?: boolean;
421
448
  resizableColumns?: boolean;
422
449
  reorderableColumns?: boolean;
450
+ reorderableRows?: boolean;
423
451
  stateKey: string;
424
452
  }
425
453
 
426
454
  export interface Emits {
427
455
  (event: "paginationClick", page: number): void;
428
- (event: "selectionChanged", values: Record<string, boolean>): void;
456
+ (event: "selectionChanged", values: TableItemType[]): void;
429
457
  (event: "search:change", value: string): void;
430
458
  (event: "headerClick", value: Record<string, unknown>): void;
431
- (event: "itemClick", item: { id?: string }): void;
459
+ (event: "itemClick", item: TableItemType): void;
432
460
  (event: "scroll:ptr"): void;
461
+ (event: "row:reorder", args: { dragIndex: number; dropIndex: number; value: TableItemType[] }): void;
433
462
  }
434
463
 
435
464
  const props = withDefaults(defineProps<Props>(), {
436
- columns: () => [],
437
465
  items: () => [],
438
466
  totalLabel: "Totals:",
439
467
  totalCount: 0,
@@ -461,34 +489,61 @@ interface ITableItemRef {
461
489
 
462
490
  const emit = defineEmits<Emits>();
463
491
 
464
- const checkboxes = ref<Record<string, boolean>>({});
492
+ // template refs
493
+ const tooltipRefs = ref<ITableItemRef[]>([]);
494
+ const reorderRef = ref<HTMLElement | null>();
495
+ const tableRef = ref<HTMLElement | null>();
496
+
497
+ // event listeners
498
+ let columnResizeListener = null;
499
+ let columnResizeEndListener = null;
500
+
501
+ const selection = ref<TableItemType[]>([]);
502
+
465
503
  const selectedRow = ref<string>();
466
504
  const tooltip = ref<Instance>();
467
505
  const scrollContainer = ref<typeof VcContainer>();
468
506
  const actionToggleRefs = ref<ITableItemRef[]>([]);
469
- const tooltipRefs = ref<ITableItemRef[]>([]);
507
+
508
+ const itemActions = ref<IActionBuilderResult[][]>([]);
470
509
  const mobileSwipeItem = ref<string>();
471
510
  const columnResizing = ref(false);
472
511
  const resizeColumnElement = ref<ITableColumns>();
473
512
  const nextColumn = ref<ITableColumns>();
474
513
  const lastResize = ref<number>();
475
514
  const table = useCurrentElement();
476
- const columnResizeListener = ref(null);
477
- const columnResizeEndListener = ref(null);
478
515
  const resizer = ref();
479
- const state = useLocalStorage(props.stateKey, []);
480
- const cols: Ref<ITableColumns[]> = ref([]);
516
+ const state = useLocalStorage("VC_TABLE_STATE_" + props.stateKey.toUpperCase(), []);
517
+ const defaultColumns: Ref<ITableColumns[]> = ref([]);
481
518
  const draggedColumn = ref();
519
+ const draggedElement = ref<HTMLElement>();
482
520
  const dropPosition = ref();
483
- const calculatedItems = computedAsync(async () => await populateWithActions(props.items), []);
521
+
522
+ // row reordering variables
523
+ const draggedRow = ref<TableItemType>();
524
+ const rowDragged = ref(false);
525
+ const droppedRowIndex = ref<number>();
526
+ const draggedRowIndex = ref<number>();
527
+
528
+ onBeforeMount(() => {
529
+ if (isStateful()) {
530
+ restoreState();
531
+ }
532
+ });
533
+
534
+ onBeforeUnmount(() => {
535
+ unbindColumnResizeEvents();
536
+ });
484
537
 
485
538
  onBeforeUpdate(() => {
486
539
  actionToggleRefs.value = [];
487
540
  tooltipRefs.value = [];
488
541
  });
489
542
 
490
- onBeforeUnmount(() => {
491
- unbindColumnResizeEvents();
543
+ onUpdated(() => {
544
+ if (isStateful()) {
545
+ saveState();
546
+ }
492
547
  });
493
548
 
494
549
  const sortDirection = computed(() => {
@@ -503,7 +558,7 @@ const sortField = computed(() => {
503
558
 
504
559
  const toggleCols = computed(() => {
505
560
  return props.columns.map((item) => {
506
- return cols.value.find((mutatedItem) => item.id === mutatedItem.id);
561
+ return defaultColumns.value.find((mutatedItem) => item.id === mutatedItem.id);
507
562
  });
508
563
  });
509
564
 
@@ -516,16 +571,25 @@ const tableAlignment = {
516
571
  evenly: "tw-justify-evenly",
517
572
  };
518
573
 
519
- const headerCheckbox = computed(() => {
520
- const checkboxList = Object.values(checkboxes.value);
574
+ const headerCheckbox = computed({
575
+ get() {
576
+ return props.items ? selection.value.length === props.items.length : false;
577
+ },
578
+ set(checked: boolean) {
579
+ let _selected = [];
521
580
 
522
- if (checkboxList.length) {
523
- return checkboxList.every((value) => value);
524
- } else return false;
581
+ if (checked) {
582
+ _selected = props.items;
583
+ }
584
+
585
+ selection.value = _selected;
586
+
587
+ emit("selectionChanged", selection.value);
588
+ },
525
589
  });
526
590
 
527
591
  const filteredCols = computed(() => {
528
- return cols.value.filter((x) => {
592
+ return defaultColumns.value.filter((x) => {
529
593
  if (("visible" in x && x.visible) || !("visible" in x)) {
530
594
  return props.expanded ? x : x.alwaysVisible;
531
595
  }
@@ -534,12 +598,10 @@ const filteredCols = computed(() => {
534
598
 
535
599
  watch(
536
600
  () => props.items,
537
- async (value: { id: string }[]) => {
538
- checkboxes.value = {};
539
- value?.forEach((item) => {
540
- checkboxes.value[item.id] = false;
541
- });
601
+ (newVal) => {
542
602
  scrollContainer.value?.scrollTop();
603
+
604
+ calculateActions(newVal);
543
605
  },
544
606
  { deep: true, immediate: true }
545
607
  );
@@ -547,37 +609,27 @@ watch(
547
609
  watch(
548
610
  () => props.columns,
549
611
  (newVal) => {
550
- if (isStateful()) {
551
- nextTick(() => restoreState());
552
- }
553
-
554
- if (!cols.value.length) {
555
- cols.value = newVal;
612
+ if (!defaultColumns.value.length) {
613
+ defaultColumns.value = newVal;
556
614
  }
557
615
  },
558
616
  { deep: true, immediate: true }
559
617
  );
560
618
 
561
- async function populateWithActions(value: { id?: string }[] | string[]) {
562
- const populatedItems = [];
563
-
564
- if (value && typeof value === "object") {
565
- if (props.itemActionBuilder && typeof props.itemActionBuilder === "function") {
566
- for (let index = 0; index < value.length; index++) {
567
- const element = value[index] as Record<string, unknown>;
568
-
569
- if (!("actions" in element && element.actions))
570
- populatedItems.push({
571
- actions: await calculateActions(element),
572
- ...element,
573
- });
574
- }
619
+ function isSelected(item: TableItemType) {
620
+ return selection.value.indexOf(item) > -1;
621
+ }
575
622
 
576
- return populatedItems;
577
- } else {
578
- return props.items;
579
- }
623
+ function rowCheckbox(item: TableItemType) {
624
+ const clear = item;
625
+ const index = selection.value.indexOf(clear);
626
+ if (index > -1) {
627
+ selection.value = selection.value.filter((x) => x !== clear);
628
+ } else {
629
+ selection.value.push(clear);
580
630
  }
631
+
632
+ emit("selectionChanged", selection.value);
581
633
  }
582
634
 
583
635
  function setTooltipRefs(el: Element, id: string) {
@@ -598,18 +650,7 @@ function setActionToggleRefs(el: Element, id: string) {
598
650
  }
599
651
  }
600
652
 
601
- function processHeaderCheckbox() {
602
- const currentState = Object.values(checkboxes.value).every((value) => value);
603
- Object.keys(checkboxes.value).forEach((key) => (checkboxes.value[key] = !currentState));
604
- emit("selectionChanged", checkboxes.value);
605
- }
606
-
607
- function processCheckbox(id: string, state: boolean) {
608
- checkboxes.value[id] = state;
609
- emit("selectionChanged", checkboxes.value);
610
- }
611
-
612
- function showActions(item: { id?: string }, index: string) {
653
+ function showActions(item: TableItem, index: string) {
613
654
  selectedRow.value = item.id;
614
655
 
615
656
  const toggleRef = actionToggleRefs.value.find((item) => item.id === index);
@@ -633,9 +674,16 @@ function showActions(item: { id?: string }, index: string) {
633
674
  }
634
675
  }
635
676
 
636
- async function calculateActions(item: { id?: string }) {
677
+ async function calculateActions(items: TableItemType[]) {
637
678
  if (typeof props.itemActionBuilder === "function") {
638
- return await props.itemActionBuilder(item);
679
+ let populatedItems = [];
680
+ for (let index = 0; index < items.length; index++) {
681
+ if (typeof items[index] === "object") {
682
+ const elementWithActions = await props.itemActionBuilder(items[index] as TableItem);
683
+ populatedItems.push(elementWithActions);
684
+ }
685
+ }
686
+ itemActions.value = populatedItems;
639
687
  }
640
688
  }
641
689
 
@@ -662,15 +710,15 @@ function handleMouseDown(e: MouseEvent, item: ITableColumns) {
662
710
  }
663
711
 
664
712
  function bindColumnResizeEvents() {
665
- if (!columnResizeListener.value) {
666
- columnResizeListener.value = document.addEventListener("mousemove", (event: MouseEvent) => {
713
+ if (!columnResizeListener) {
714
+ columnResizeListener = document.addEventListener("mousemove", (event: MouseEvent) => {
667
715
  if (columnResizing.value) {
668
716
  onColumnResize(event);
669
717
  }
670
718
  });
671
719
  }
672
- if (!columnResizeEndListener.value) {
673
- columnResizeEndListener.value = document.addEventListener("mouseup", () => {
720
+ if (!columnResizeEndListener) {
721
+ columnResizeEndListener = document.addEventListener("mouseup", () => {
674
722
  if (columnResizing.value) {
675
723
  columnResizing.value = false;
676
724
  onColumnResizeEnd();
@@ -680,13 +728,13 @@ function bindColumnResizeEvents() {
680
728
  }
681
729
 
682
730
  function unbindColumnResizeEvents() {
683
- if (columnResizeListener.value) {
684
- document.removeEventListener("document", columnResizeListener.value);
685
- columnResizeListener.value = null;
731
+ if (columnResizeListener) {
732
+ document.removeEventListener("document", columnResizeListener);
733
+ columnResizeListener = null;
686
734
  }
687
- if (columnResizeEndListener.value) {
688
- document.removeEventListener("document", columnResizeEndListener.value);
689
- columnResizeEndListener.value = null;
735
+ if (columnResizeEndListener) {
736
+ document.removeEventListener("document", columnResizeEndListener);
737
+ columnResizeEndListener = null;
690
738
  }
691
739
  }
692
740
 
@@ -756,6 +804,7 @@ function onColumnHeaderDragStart(event: DragEvent, item: ITableColumns) {
756
804
  }
757
805
 
758
806
  draggedColumn.value = item;
807
+ draggedElement.value = event.target as HTMLElement
759
808
  event.dataTransfer.setData("text", "reorder");
760
809
  }
761
810
 
@@ -779,16 +828,25 @@ function onColumnHeaderDragOver(event: DragEvent) {
779
828
 
780
829
  if (props.reorderableColumns && draggedColumn.value && dropHeader) {
781
830
  event.preventDefault();
831
+ let containerOffset = getOffset(table.value as HTMLElement);
782
832
  let dropHeaderOffset = getOffset(dropHeader);
783
833
 
784
- if (draggedColumn.value !== dropHeader) {
834
+ if (draggedElement.value !== dropHeader) {
835
+ let targetLeft = dropHeaderOffset.left - containerOffset.left;
785
836
  let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
786
837
 
838
+ reorderRef.value.style.top = dropHeaderOffset.top - getOffset(tableRef.value).top + "px";
839
+
787
840
  if (event.pageX > columnCenter) {
841
+ reorderRef.value.style.left = targetLeft + dropHeader.offsetWidth + "px";
842
+
788
843
  dropPosition.value = 1;
789
844
  } else {
845
+ reorderRef.value.style.left = targetLeft + "px";
790
846
  dropPosition.value = -1;
791
847
  }
848
+
849
+ reorderRef.value.style.display = "block";
792
850
  }
793
851
  }
794
852
  }
@@ -796,6 +854,8 @@ function onColumnHeaderDragOver(event: DragEvent) {
796
854
  function onColumnHeaderDragLeave(event: DragEvent) {
797
855
  if (props.reorderableColumns && draggedColumn.value) {
798
856
  event.preventDefault();
857
+
858
+ reorderRef.value.style.display = "none";
799
859
  }
800
860
  }
801
861
 
@@ -803,8 +863,8 @@ function onColumnHeaderDrop(event: DragEvent, item: ITableColumns) {
803
863
  event.preventDefault();
804
864
 
805
865
  if (draggedColumn.value) {
806
- let dragIndex = cols.value.indexOf(draggedColumn.value);
807
- let dropIndex = cols.value.indexOf(item);
866
+ let dragIndex = defaultColumns.value.indexOf(draggedColumn.value);
867
+ let dropIndex = defaultColumns.value.indexOf(item);
808
868
 
809
869
  let allowDrop = dragIndex !== dropIndex;
810
870
 
@@ -817,14 +877,15 @@ function onColumnHeaderDrop(event: DragEvent, item: ITableColumns) {
817
877
  }
818
878
 
819
879
  if (allowDrop) {
820
- reorderArray(cols.value, dragIndex, dropIndex);
880
+ reorderArray(defaultColumns.value, dragIndex, dropIndex);
821
881
 
822
882
  if (isStateful()) {
823
883
  saveState();
824
884
  }
825
885
  }
826
886
 
827
- draggedColumn.value.draggable = false;
887
+ reorderRef.value.style.display = "none";
888
+ draggedElement.value.draggable = false;
828
889
  draggedColumn.value = null;
829
890
  dropPosition.value = null;
830
891
  }
@@ -837,17 +898,17 @@ function isStateful() {
837
898
  function saveState() {
838
899
  console.debug("[@vc-shell/framewok#vc-table.vue] - Save state");
839
900
 
840
- state.value = cols.value;
901
+ state.value = defaultColumns.value;
841
902
  }
842
903
 
843
904
  function restoreState() {
844
905
  console.debug("[@vc-shell/framewok#vc-table.vue] - Restore state");
845
906
  if (Object.keys(state.value).length) {
846
- cols.value = state.value;
907
+ defaultColumns.value = state.value;
847
908
  }
848
909
  }
849
910
 
850
- function reorderArray(value: Record<string, unknown>[], from: number, to: number) {
911
+ function reorderArray(value: unknown[], from: number, to: number) {
851
912
  if (value && from !== to) {
852
913
  if (to >= value.length) {
853
914
  to %= value.length;
@@ -866,7 +927,7 @@ function onColumnHeaderMouseDown(event: MouseEvent & { currentTarget?: { draggab
866
927
 
867
928
  function toggleColumn(item: ITableColumns) {
868
929
  if (item) {
869
- cols.value = cols.value.map((x) => {
930
+ defaultColumns.value = defaultColumns.value.map((x) => {
870
931
  if (x === item) {
871
932
  x = item;
872
933
  }
@@ -879,36 +940,111 @@ function toggleColumn(item: ITableColumns) {
879
940
  }
880
941
  }
881
942
 
882
- const generatedColumns = computed(() => {
883
- const test = props.items[0];
943
+ function onRowMouseDown(event: MouseEvent & { currentTarget?: { draggable: boolean } }) {
944
+ if (props.reorderableRows) {
945
+ event.currentTarget.draggable = true;
946
+ }
947
+ }
884
948
 
885
- // return Object.keys(Object.fromEntries(Object.entries(test).filter(([key, value]) => typeof value !== "object"))).map(
886
- // (x) => camelToSnake(x)
887
- // );
949
+ function onRowDragStart(event: DragEvent, item: TableItem | string) {
950
+ if (!props.reorderableRows) {
951
+ return;
952
+ }
953
+ rowDragged.value = true;
954
+ draggedRow.value = item;
955
+ draggedRowIndex.value = props.items.indexOf(item);
956
+ event.dataTransfer.setData("text", "row-reorder");
957
+ }
888
958
 
889
- return Object.keys(Object.fromEntries(Object.entries(test).filter(([key, value]) => typeof value !== "object")))
890
- .filter((x) => !props.columns.some((t) => t.id === x))
891
- .map((x) => ({
892
- id: x,
893
- title: camelToSnake(x),
894
- width: "auto",
895
- visible: false,
896
- }));
897
- });
959
+ function onRowDragOver(event: DragEvent, item: TableItem | string) {
960
+ if (!props.reorderableRows) {
961
+ return;
962
+ }
963
+ const index = props.items.indexOf(item);
964
+
965
+ if (rowDragged.value && draggedRow.value !== item) {
966
+ let rowElement = event.currentTarget as HTMLElement;
967
+ let rowY = getOffset(rowElement).top;
968
+ let pageY = event.pageY;
969
+ let rowMidY = rowY + rowElement.offsetHeight / 2;
970
+ let previousRowElement = rowElement.previousElementSibling;
971
+
972
+ if (pageY < rowMidY) {
973
+ rowElement.classList.remove("vc-table__drag-row-bottom");
974
+ droppedRowIndex.value = index;
975
+
976
+ if (previousRowElement) {
977
+ previousRowElement.classList.add("vc-table__drag-row-bottom");
978
+ } else {
979
+ rowElement.classList.add("vc-table__drag-row-top");
980
+ }
981
+ } else {
982
+ if (previousRowElement) {
983
+ previousRowElement.classList.remove("vc-table__drag-row-bottom");
984
+ } else {
985
+ rowElement.classList.add("vc-table__drag-row-top");
986
+ }
987
+ droppedRowIndex.value = index + 1;
988
+ rowElement.classList.add("vc-table__drag-row-bottom");
989
+ }
990
+
991
+ event.preventDefault();
992
+ }
993
+ }
994
+
995
+ function onRowDragLeave(event: DragEvent) {
996
+ event.preventDefault();
997
+
998
+ let rowElement = event.currentTarget as HTMLElement;
999
+ let previousRowElement = rowElement.previousElementSibling;
1000
+
1001
+ if (previousRowElement) {
1002
+ previousRowElement.classList.remove("vc-table__drag-row-bottom");
1003
+ }
898
1004
 
899
- function camelToSnake(str: string): string {
900
- return (
901
- str
902
- .replace(/([A-Z])/g, " $1")
903
- // uppercase the first character
904
- .replace(/^./, function (str) {
905
- return str.toUpperCase();
906
- })
907
- );
1005
+ rowElement.classList.remove("vc-table__drag-row-top");
1006
+ rowElement.classList.remove("vc-table__drag-row-bottom");
1007
+ }
1008
+
1009
+ function onRowDragEnd(event: DragEvent & { currentTarget?: { draggable: boolean } }) {
1010
+ rowDragged.value = false;
1011
+ draggedRowIndex.value = null;
1012
+ droppedRowIndex.value = null;
1013
+ event.currentTarget.draggable = false;
1014
+ }
1015
+
1016
+ function onRowDrop(event: DragEvent) {
1017
+ if (droppedRowIndex.value != null) {
1018
+ let dropIndex =
1019
+ draggedRowIndex.value > droppedRowIndex.value
1020
+ ? droppedRowIndex.value
1021
+ : droppedRowIndex.value === 0
1022
+ ? 0
1023
+ : droppedRowIndex.value - 1;
1024
+
1025
+ let processedItems = [...props.items];
1026
+
1027
+ reorderArray(processedItems, draggedRowIndex.value, dropIndex);
1028
+
1029
+ emit("row:reorder", {
1030
+ dragIndex: draggedRowIndex.value,
1031
+ dropIndex: dropIndex,
1032
+ value: processedItems as TableItemType[],
1033
+ });
1034
+ }
1035
+
1036
+ // cleanup
1037
+ onRowDragLeave(event);
1038
+ onRowDragEnd(event as DragEvent & { currentTarget?: { draggable: boolean } });
1039
+ event.preventDefault();
908
1040
  }
909
1041
  </script>
910
1042
 
911
1043
  <style lang="scss">
1044
+ :root {
1045
+ --row-drag-color: #41afe6;
1046
+ }
1047
+
912
1048
  $variants: (
913
1049
  danger: #ff4a4a,
914
1050
  success: #87b563,
@@ -952,10 +1088,6 @@ $variants: (
952
1088
  top: -5px;
953
1089
  }
954
1090
 
955
- // &-row:hover .vc-table__body-actions-container {
956
- // @apply tw-flex #{!important};
957
- // }
958
-
959
1091
  &-actions-item {
960
1092
  @each $name, $variant in $variants {
961
1093
  &_#{$name} {
@@ -981,5 +1113,13 @@ $variants: (
981
1113
  @apply tw-top-[-5px];
982
1114
  }
983
1115
  }
1116
+
1117
+ &__drag-row-bottom {
1118
+ box-shadow: inset 0 -2px 0 0 var(--row-drag-color);
1119
+ }
1120
+
1121
+ &__drag-row-top {
1122
+ box-shadow: inset 0 2px 0 0 var(--row-drag-color);
1123
+ }
984
1124
  }
985
1125
  </style>