From fafc94237e92e68089bba0b21601547bdee652d6 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 13 Sep 2025 18:48:39 +0530 Subject: [PATCH 1/6] fix: dual sided resizing. --- v2/pink-sb/src/lib/spreadsheet/Root.svelte | 22 ++++++- .../spreadsheet/Spreadsheet.stories.svelte | 57 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/v2/pink-sb/src/lib/spreadsheet/Root.svelte b/v2/pink-sb/src/lib/spreadsheet/Root.svelte index 6b2d86e6f1..78b7a0a026 100644 --- a/v2/pink-sb/src/lib/spreadsheet/Root.svelte +++ b/v2/pink-sb/src/lib/spreadsheet/Root.svelte @@ -243,7 +243,27 @@ } } - if (!hasFlexibleColumn && scrollable.length > 0) { + let flexCount = scrollable.filter((col) => col.includes('1fr')).length; + + if (flexCount > 1) { + let flexSeen = 0; + for (let i = 0; i < scrollable.length; i++) { + if (scrollable[i].includes('1fr')) { + flexSeen++; + if (flexSeen < flexCount) { + const column = nonActionCols[i]; + const minWidth = + column.width && + typeof column.width === 'object' && + 'min' in column.width + ? column.width.min + : ESTIMATED_ROW_HEIGHT; + scrollable[i] = `${minWidth}px`; + } + } + } + hasFlexibleColumn = true; + } else if (!hasFlexibleColumn && scrollable.length > 0) { const lastIndex = scrollable.length - 1; const lastColumn = nonActionCols[lastIndex]; const minWidth = diff --git a/v2/pink-sb/src/stories/spreadsheet/Spreadsheet.stories.svelte b/v2/pink-sb/src/stories/spreadsheet/Spreadsheet.stories.svelte index e213b0d3b6..a4b8bfd841 100644 --- a/v2/pink-sb/src/stories/spreadsheet/Spreadsheet.stories.svelte +++ b/v2/pink-sb/src/stories/spreadsheet/Spreadsheet.stories.svelte @@ -1043,6 +1043,63 @@ + + {@const columns = baseColumnsInternal} + {@const resizeRows = baseDataInternal.slice(0, 5)} + {@const resizeColumns = [...columns.slice(0, 4), columns[columns.length - 1]]} + + + + {#each resizeColumns as col} + + {#if col.meta?.isPrimary} + + {#if col.meta?.icon} + + {/if} + {col.meta?.label ?? col.id} + + {:else if col.isAction} + + + + {:else} + {col.meta?.label ?? col.id} + {/if} + + {/each} + + + {#each resizeRows as row} + + {#each resizeColumns as col} + + {#if col.isAction} + + + + {:else} + {getCellValue(row, col.id)} + {/if} + + {/each} + + {/each} + + + + Resize the middle columns. Left neighbors won't shrink; only the last data column + flexes. + + + + +