From 2797fcd0c5850651d39d5cf71942110a70e8c274 Mon Sep 17 00:00:00 2001 From: connoratrug Date: Thu, 5 Mar 2026 13:57:59 +0100 Subject: [PATCH 1/6] feat: drag explorer header column edge to resize column width Hover over the column edge and drag to resize column - add composable to do size calculations - use request animation frame to deduplicate drag events and avoid direct repaints ( performance ) - pass the container to allow calculating drag indicator line for table with dynamic content and horizontal scroll - move column sort down to label to avoid confusion with drag --- .../app/components/table/TableEMX2.vue | 44 +++++++- .../components/table/TableHeaderAction.vue | 11 +- .../app/composables/useColumnResize.ts | 89 +++++++++++++++ .../composables/useColumnResize.spec.ts | 104 ++++++++++++++++++ 4 files changed, 239 insertions(+), 9 deletions(-) create mode 100644 apps/tailwind-components/app/composables/useColumnResize.ts create mode 100644 apps/tailwind-components/tests/vitest/composables/useColumnResize.spec.ts diff --git a/apps/tailwind-components/app/components/table/TableEMX2.vue b/apps/tailwind-components/app/components/table/TableEMX2.vue index cac2ee45351..e59a2075507 100644 --- a/apps/tailwind-components/app/components/table/TableEMX2.vue +++ b/apps/tailwind-components/app/components/table/TableEMX2.vue @@ -26,8 +26,15 @@
+
+
@@ -43,11 +50,17 @@ +
+
+
(); const refSourceTableId = ref(props.tableId); const columns = ref([]); +const tableContainer = ref(null); + +const { columnWidths, guideX, startResize, setInitialWidths } = + useColumnResize(tableContainer); + const settings = defineModel("settings", { required: false, default: () => ({ @@ -286,6 +306,22 @@ const { data, refresh } = useAsyncData( } ); +watch( + () => data.value?.tableMetadata, + (newMetadata) => { + if (newMetadata) { + columns.value = newMetadata.columns.filter( + (c) => + !c.id.startsWith("mg") && + !["HEADING", "SECTION"].includes(c.columnType) + ); + + setInitialWidths(columns.value); + } + }, + { immediate: true } +); + const rows = computed(() => Array.isArray(data.value?.tableData?.rows) ? data.value?.tableData?.rows : [] ); diff --git a/apps/tailwind-components/app/components/table/TableHeaderAction.vue b/apps/tailwind-components/app/components/table/TableHeaderAction.vue index 98888adc6de..022b9088536 100644 --- a/apps/tailwind-components/app/components/table/TableHeaderAction.vue +++ b/apps/tailwind-components/app/components/table/TableHeaderAction.vue @@ -27,10 +27,7 @@ const emit = defineEmits<{ }>();