@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.
- package/core/plugins/validation/rules.ts +67 -24
- package/core/types/index.ts +19 -2
- package/dist/framework.mjs +1964 -4899
- package/dist/index.css +1 -1
- package/dist/types/core/plugins/validation/rules.d.ts +8 -30
- package/dist/types/core/plugins/validation/rules.d.ts.map +1 -1
- package/dist/types/core/types/index.d.ts +17 -2
- package/dist/types/core/types/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/shared/components/app-switcher/components/index.d.ts +2 -0
- package/dist/types/shared/components/app-switcher/components/index.d.ts.map +1 -0
- package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts +22 -0
- package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -0
- package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue.d.ts +1 -1
- package/dist/types/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -0
- package/dist/types/shared/components/app-switcher/composables/index.d.ts.map +1 -0
- package/dist/types/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.d.ts +1 -1
- package/dist/types/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -0
- package/dist/types/shared/components/app-switcher/index.d.ts +13 -0
- package/dist/types/shared/components/app-switcher/index.d.ts.map +1 -0
- package/dist/types/shared/components/blade-navigation/components/index.d.ts +2 -0
- package/dist/types/shared/components/blade-navigation/components/index.d.ts.map +1 -0
- package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts +66 -0
- package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -0
- package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -1
- package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -0
- package/dist/types/shared/components/blade-navigation/composables/index.d.ts.map +1 -0
- package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.d.ts +1 -1
- package/dist/types/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -0
- package/dist/types/shared/components/blade-navigation/index.d.ts +14 -0
- package/dist/types/shared/components/blade-navigation/index.d.ts.map +1 -0
- package/dist/types/shared/{blade-navigation → components/blade-navigation}/types/index.d.ts +1 -1
- package/dist/types/shared/components/blade-navigation/types/index.d.ts.map +1 -0
- package/dist/types/shared/index.d.ts +4 -3
- package/dist/types/shared/index.d.ts.map +1 -1
- package/dist/types/shared/{assets → modules/assets}/components/assets-details/assets-details.vue.d.ts +4 -13
- package/dist/types/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -0
- package/dist/types/shared/modules/assets/components/assets-details/index.d.ts +45 -0
- package/dist/types/shared/modules/assets/components/assets-details/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets/components/index.d.ts +2 -0
- package/dist/types/shared/modules/assets/components/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets/index.d.ts +12 -0
- package/dist/types/shared/modules/assets/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets/locales/index.d.ts +3 -0
- package/dist/types/shared/modules/assets/locales/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +58 -0
- package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -0
- package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts +59 -0
- package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets-manager/components/index.d.ts +2 -0
- package/dist/types/shared/modules/assets-manager/components/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets-manager/index.d.ts +12 -0
- package/dist/types/shared/modules/assets-manager/index.d.ts.map +1 -0
- package/dist/types/shared/modules/assets-manager/locales/index.d.ts.map +1 -0
- package/dist/types/shared/utilities/assets.d.ts +5 -0
- package/dist/types/shared/utilities/assets.d.ts.map +1 -0
- package/dist/types/ui/components/atoms/vc-badge/index.d.ts +106 -9
- package/dist/types/ui/components/atoms/vc-badge/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-button/index.d.ts +153 -6
- package/dist/types/ui/components/atoms/vc-button/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-card/index.d.ts +163 -7
- package/dist/types/ui/components/atoms/vc-card/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-checkbox/index.d.ts +143 -7
- package/dist/types/ui/components/atoms/vc-checkbox/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-col/index.d.ts +81 -6
- package/dist/types/ui/components/atoms/vc-col/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-container/index.d.ts +112 -6
- package/dist/types/ui/components/atoms/vc-container/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-hint/index.d.ts +51 -6
- package/dist/types/ui/components/atoms/vc-hint/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-icon/index.d.ts +26 -7
- package/dist/types/ui/components/atoms/vc-icon/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-image/index.d.ts +67 -7
- package/dist/types/ui/components/atoms/vc-image/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-info-row/index.d.ts +33 -7
- package/dist/types/ui/components/atoms/vc-info-row/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-label/index.d.ts +95 -7
- package/dist/types/ui/components/atoms/vc-label/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-link/index.d.ts +103 -6
- package/dist/types/ui/components/atoms/vc-link/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-loading/index.d.ts +9 -7
- package/dist/types/ui/components/atoms/vc-loading/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-progress/index.d.ts +100 -6
- package/dist/types/ui/components/atoms/vc-progress/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-row/index.d.ts +51 -6
- package/dist/types/ui/components/atoms/vc-row/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-status/index.d.ts +116 -6
- package/dist/types/ui/components/atoms/vc-status/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-status-icon/index.d.ts +9 -7
- package/dist/types/ui/components/atoms/vc-status-icon/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-switch/index.d.ts +39 -7
- package/dist/types/ui/components/atoms/vc-switch/index.d.ts.map +1 -1
- package/dist/types/ui/components/atoms/vc-widget/index.d.ts +31 -7
- package/dist/types/ui/components/atoms/vc-widget/index.d.ts.map +1 -1
- package/dist/types/ui/components/index.d.ts +39 -39
- package/dist/types/ui/components/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-breadcrumbs/index.d.ts +33 -7
- package/dist/types/ui/components/molecules/vc-breadcrumbs/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-code-editor/index.d.ts +188 -6
- package/dist/types/ui/components/molecules/vc-code-editor/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-editor/index.d.ts +204 -6
- package/dist/types/ui/components/molecules/vc-editor/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-file-upload/index.d.ts +175 -6
- package/dist/types/ui/components/molecules/vc-file-upload/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-form/index.d.ts +51 -6
- package/dist/types/ui/components/molecules/vc-form/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-input/index.d.ts +371 -46
- package/dist/types/ui/components/molecules/vc-input/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts +1 -1
- package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-input-currency/index.d.ts +365 -12
- package/dist/types/ui/components/molecules/vc-input-currency/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-notification/index.d.ts +101 -6
- package/dist/types/ui/components/molecules/vc-notification/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-pagination/index.d.ts +36 -7
- package/dist/types/ui/components/molecules/vc-pagination/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-rating/index.d.ts +156 -6
- package/dist/types/ui/components/molecules/vc-rating/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-select/index.d.ts +566 -69
- package/dist/types/ui/components/molecules/vc-select/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-slider/index.d.ts +159 -10
- package/dist/types/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
- package/dist/types/ui/components/molecules/vc-textarea/index.d.ts +204 -6
- package/dist/types/ui/components/molecules/vc-textarea/index.d.ts.map +1 -1
- 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
- package/dist/types/ui/components/organisms/vc-app/index.d.ts +302 -9
- package/dist/types/ui/components/organisms/vc-app/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +2 -19
- package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-blade/index.d.ts +201 -7
- package/dist/types/ui/components/organisms/vc-blade/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts +59 -7
- package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +2 -20
- package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-gallery/index.d.ts +154 -7
- package/dist/types/ui/components/organisms/vc-gallery/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +2 -6
- package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-login-form/index.d.ts +113 -6
- package/dist/types/ui/components/organisms/vc-login-form/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-popup/index.d.ts +129 -6
- package/dist/types/ui/components/organisms/vc-popup/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +1 -15
- package/dist/types/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-table/index.d.ts +661 -27
- package/dist/types/ui/components/organisms/vc-table/index.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts +110 -99
- package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
- package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts +40 -29
- package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/dist/types/ui/types/index.d.ts +46 -0
- package/dist/types/ui/types/index.d.ts.map +1 -0
- package/package.json +7 -8
- package/shared/components/app-switcher/components/index.ts +1 -0
- package/shared/components/app-switcher/components/vc-app-switcher/index.ts +3 -0
- package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue +1 -1
- package/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.ts +2 -2
- package/shared/components/app-switcher/index.ts +14 -0
- package/shared/components/blade-navigation/components/index.ts +1 -0
- package/shared/components/blade-navigation/components/vc-blade-navigation/index.ts +3 -0
- package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue +2 -2
- package/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.ts +6 -5
- package/shared/components/blade-navigation/index.ts +15 -0
- package/shared/{blade-navigation → components/blade-navigation}/types/index.ts +1 -1
- package/shared/index.ts +10 -7
- package/shared/modules/assets/components/assets-details/assets-details.vue +166 -0
- package/shared/modules/assets/components/assets-details/index.ts +3 -0
- package/shared/modules/assets/components/index.ts +1 -0
- package/shared/modules/assets/index.ts +14 -0
- package/shared/{assets → modules/assets}/locales/en.json +7 -5
- package/shared/modules/assets/locales/index.ts +2 -0
- package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +372 -0
- package/shared/modules/assets-manager/components/assets-manager/index.ts +3 -0
- package/shared/modules/assets-manager/components/index.ts +1 -0
- package/shared/modules/assets-manager/index.ts +14 -0
- package/shared/modules/assets-manager/locales/en.json +28 -0
- package/shared/utilities/assets.ts +40 -0
- package/ui/components/atoms/vc-badge/index.ts +10 -9
- package/ui/components/atoms/vc-button/index.ts +7 -6
- package/ui/components/atoms/vc-card/index.ts +8 -7
- package/ui/components/atoms/vc-checkbox/index.ts +8 -7
- package/ui/components/atoms/vc-checkbox/vc-checkbox.vue +1 -11
- package/ui/components/atoms/vc-col/index.ts +7 -6
- package/ui/components/atoms/vc-container/index.ts +7 -6
- package/ui/components/atoms/vc-hint/index.ts +7 -6
- package/ui/components/atoms/vc-icon/index.ts +2 -8
- package/ui/components/atoms/vc-image/index.ts +2 -8
- package/ui/components/atoms/vc-info-row/index.ts +2 -8
- package/ui/components/atoms/vc-label/index.ts +8 -7
- package/ui/components/atoms/vc-link/index.ts +7 -6
- package/ui/components/atoms/vc-loading/index.ts +2 -8
- package/ui/components/atoms/vc-progress/index.ts +7 -6
- package/ui/components/atoms/vc-row/index.ts +7 -6
- package/ui/components/atoms/vc-status/index.ts +7 -6
- package/ui/components/atoms/vc-status-icon/index.ts +2 -8
- package/ui/components/atoms/vc-switch/index.ts +2 -8
- package/ui/components/atoms/vc-widget/index.ts +2 -8
- package/ui/components/index.ts +39 -39
- package/ui/components/molecules/vc-breadcrumbs/index.ts +2 -8
- package/ui/components/molecules/vc-code-editor/index.ts +7 -6
- package/ui/components/molecules/vc-editor/index.ts +7 -6
- package/ui/components/molecules/vc-file-upload/index.ts +7 -6
- package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +19 -4
- package/ui/components/molecules/vc-form/index.ts +7 -6
- package/ui/components/molecules/vc-input/index.ts +57 -56
- package/ui/components/molecules/vc-input/vc-input.vue +1 -1
- package/ui/components/molecules/vc-input-currency/index.ts +15 -14
- package/ui/components/molecules/vc-notification/index.ts +7 -6
- package/ui/components/molecules/vc-pagination/index.ts +2 -8
- package/ui/components/molecules/vc-rating/index.ts +7 -6
- package/ui/components/molecules/vc-select/index.ts +84 -84
- package/ui/components/molecules/vc-select/vc-select.vue +2 -2
- package/ui/components/molecules/vc-slider/index.ts +10 -9
- package/ui/components/molecules/vc-textarea/index.ts +7 -6
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +3 -2
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +3 -6
- package/ui/components/organisms/vc-app/index.ts +10 -9
- package/ui/components/organisms/vc-app/vc-app.vue +7 -0
- package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +2 -6
- package/ui/components/organisms/vc-blade/index.ts +8 -7
- package/ui/components/organisms/vc-dynamic-property/index.ts +2 -8
- package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +6 -0
- package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +5 -11
- package/ui/components/organisms/vc-gallery/index.ts +2 -8
- package/ui/components/organisms/vc-gallery/vc-gallery.vue +164 -49
- package/ui/components/organisms/vc-login-form/index.ts +7 -6
- package/ui/components/organisms/vc-popup/index.ts +7 -6
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +1 -4
- package/ui/components/organisms/vc-table/index.ts +16 -14
- package/ui/components/organisms/vc-table/vc-table.vue +271 -131
- package/ui/types/index.ts +53 -0
- package/dist/types/shared/app-switcher/components/index.d.ts +0 -2
- package/dist/types/shared/app-switcher/components/index.d.ts.map +0 -1
- package/dist/types/shared/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +0 -1
- package/dist/types/shared/app-switcher/composables/index.d.ts.map +0 -1
- package/dist/types/shared/app-switcher/composables/useAppSwitcher/index.d.ts.map +0 -1
- package/dist/types/shared/app-switcher/index.d.ts +0 -7
- package/dist/types/shared/app-switcher/index.d.ts.map +0 -1
- package/dist/types/shared/assets/components/assets-details/assets-details.vue.d.ts.map +0 -1
- package/dist/types/shared/assets/components/index.d.ts +0 -2
- package/dist/types/shared/assets/components/index.d.ts.map +0 -1
- package/dist/types/shared/assets/index.d.ts +0 -6
- package/dist/types/shared/assets/index.d.ts.map +0 -1
- package/dist/types/shared/assets/locales/index.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/components/index.d.ts +0 -2
- package/dist/types/shared/blade-navigation/components/index.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/composables/index.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/composables/useBladeNavigation/index.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/index.d.ts +0 -8
- package/dist/types/shared/blade-navigation/index.d.ts.map +0 -1
- package/dist/types/shared/blade-navigation/types/index.d.ts.map +0 -1
- package/dist/types/ui/services/components.d.ts +0 -2
- package/dist/types/ui/services/components.d.ts.map +0 -1
- package/dist/types/ui/services/types/components.d.ts +0 -14
- package/dist/types/ui/services/types/components.d.ts.map +0 -1
- package/dist/types/ui/services/types/index.d.ts +0 -7
- package/dist/types/ui/services/types/index.d.ts.map +0 -1
- package/dist/types/ui/services/types/ts-helpers.d.ts +0 -8
- package/dist/types/ui/services/types/ts-helpers.d.ts.map +0 -1
- package/shared/app-switcher/components/index.ts +0 -1
- package/shared/app-switcher/index.ts +0 -7
- package/shared/assets/components/assets-details/assets-details.vue +0 -116
- package/shared/assets/components/index.ts +0 -1
- package/shared/assets/index.ts +0 -7
- package/shared/blade-navigation/components/index.ts +0 -1
- package/shared/blade-navigation/index.ts +0 -8
- package/ui/services/components.ts +0 -40
- package/ui/services/types/components.ts +0 -14
- package/ui/services/types/index.ts +0 -9
- package/ui/services/types/ts-helpers.ts +0 -18
- /package/dist/types/shared/{app-switcher → components/app-switcher}/composables/index.d.ts +0 -0
- /package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/index.d.ts +0 -0
- /package/dist/types/shared/{assets → modules/assets-manager}/locales/index.d.ts +0 -0
- /package/shared/{app-switcher → components/app-switcher}/composables/index.ts +0 -0
- /package/shared/{blade-navigation → components/blade-navigation}/composables/index.ts +0 -0
- /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
|
-
|
|
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
|
-
|
|
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-
|
|
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,
|
|
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]':
|
|
211
|
-
'!tw-bg-[#dfeef9] hover:tw-bg-[#dfeef9]':
|
|
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
|
-
:
|
|
223
|
-
|
|
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="!(
|
|
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-
|
|
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
|
|
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,
|
|
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:
|
|
403
|
-
itemActionBuilder?: (item:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
491
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
523
|
-
|
|
524
|
-
|
|
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
|
|
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
|
-
|
|
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 (
|
|
551
|
-
|
|
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
|
-
|
|
562
|
-
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
|
|
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
|
|
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(
|
|
677
|
+
async function calculateActions(items: TableItemType[]) {
|
|
637
678
|
if (typeof props.itemActionBuilder === "function") {
|
|
638
|
-
|
|
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
|
|
666
|
-
columnResizeListener
|
|
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
|
|
673
|
-
columnResizeEndListener
|
|
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
|
|
684
|
-
document.removeEventListener("document", columnResizeListener
|
|
685
|
-
columnResizeListener
|
|
731
|
+
if (columnResizeListener) {
|
|
732
|
+
document.removeEventListener("document", columnResizeListener);
|
|
733
|
+
columnResizeListener = null;
|
|
686
734
|
}
|
|
687
|
-
if (columnResizeEndListener
|
|
688
|
-
document.removeEventListener("document", columnResizeEndListener
|
|
689
|
-
columnResizeEndListener
|
|
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 (
|
|
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 =
|
|
807
|
-
let dropIndex =
|
|
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(
|
|
880
|
+
reorderArray(defaultColumns.value, dragIndex, dropIndex);
|
|
821
881
|
|
|
822
882
|
if (isStateful()) {
|
|
823
883
|
saveState();
|
|
824
884
|
}
|
|
825
885
|
}
|
|
826
886
|
|
|
827
|
-
|
|
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 =
|
|
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
|
-
|
|
907
|
+
defaultColumns.value = state.value;
|
|
847
908
|
}
|
|
848
909
|
}
|
|
849
910
|
|
|
850
|
-
function reorderArray(value:
|
|
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
|
-
|
|
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
|
-
|
|
883
|
-
|
|
943
|
+
function onRowMouseDown(event: MouseEvent & { currentTarget?: { draggable: boolean } }) {
|
|
944
|
+
if (props.reorderableRows) {
|
|
945
|
+
event.currentTarget.draggable = true;
|
|
946
|
+
}
|
|
947
|
+
}
|
|
884
948
|
|
|
885
|
-
|
|
886
|
-
|
|
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
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
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>
|