vue2-excel-grid 2.6.3 → 2.6.5
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/package.json
CHANGED
|
@@ -1273,10 +1273,13 @@ const ExcelGridComponent = {
|
|
|
1273
1273
|
* shrinking columns illegibly thin.
|
|
1274
1274
|
*
|
|
1275
1275
|
* Highest-priority width control: overrides `col.width` as an absolute
|
|
1276
|
-
* value, `autoWidth`,
|
|
1277
|
-
*
|
|
1278
|
-
*
|
|
1279
|
-
*
|
|
1276
|
+
* value, `autoWidth`, and double-click auto-fit (still disabled while
|
|
1277
|
+
* this is on). Manual column resize (drag handle) IS allowed — dragging
|
|
1278
|
+
* a column's handle turns that column into a fixed px width, excluded
|
|
1279
|
+
* from the fit; the rest keep scaling proportionally to fill what's
|
|
1280
|
+
* left, which can reintroduce horizontal scroll if the fixed column(s)
|
|
1281
|
+
* alone exceed the viewport. Pinned columns count toward the fit too —
|
|
1282
|
+
* the goal is the whole row fitting, regardless of pin state.
|
|
1280
1283
|
* @type {Boolean}
|
|
1281
1284
|
* @default false
|
|
1282
1285
|
* @example
|
|
@@ -1648,6 +1651,13 @@ const ExcelGridComponent = {
|
|
|
1648
1651
|
// resized/auto-fit — see startColResize/autoFitColumn/_applyAutoWidth.
|
|
1649
1652
|
relativeColSpecs: {},
|
|
1650
1653
|
|
|
1654
|
+
// col.key → true, for columns manually resized while fitColumns is on.
|
|
1655
|
+
// Such a column becomes a fixed px width (excluded from the proportional
|
|
1656
|
+
// fit); the rest keep scaling among themselves to fill what's left — see
|
|
1657
|
+
// _applyFitColumns(). Keyed by col.key (not flat index) so it survives
|
|
1658
|
+
// column reorders, same convention as relativeColSpecs preservation.
|
|
1659
|
+
fitColumnsOverrides: {},
|
|
1660
|
+
|
|
1651
1661
|
// Row heights (row index → px)
|
|
1652
1662
|
rowHeights: {},
|
|
1653
1663
|
|
|
@@ -2438,6 +2448,7 @@ const ExcelGridComponent = {
|
|
|
2438
2448
|
|
|
2439
2449
|
fitColumns(v) {
|
|
2440
2450
|
if (v) {
|
|
2451
|
+
this.fitColumnsOverrides = {}
|
|
2441
2452
|
this._applyFitColumns()
|
|
2442
2453
|
} else {
|
|
2443
2454
|
// Back to normal per-column resolution (same as the columns
|
|
@@ -2452,6 +2463,7 @@ const ExcelGridComponent = {
|
|
|
2452
2463
|
})
|
|
2453
2464
|
this.colWidths = newColWidths
|
|
2454
2465
|
this.relativeColSpecs = newRelativeSpecs
|
|
2466
|
+
this.fitColumnsOverrides = {}
|
|
2455
2467
|
this._applyAutoWidth()
|
|
2456
2468
|
}
|
|
2457
2469
|
},
|
|
@@ -2482,8 +2494,17 @@ const ExcelGridComponent = {
|
|
|
2482
2494
|
// fitColumns is the highest-priority width control — it overrides
|
|
2483
2495
|
// even remembered manual-resize widths (keyToWidth above), so it
|
|
2484
2496
|
// deliberately does NOT participate in that preservation logic.
|
|
2497
|
+
// fitColumnsOverrides (per-column fixed-width overrides set by
|
|
2498
|
+
// manually resizing while fitColumns is on) IS preserved, by key,
|
|
2499
|
+
// dropping any keys that no longer exist in the new column set.
|
|
2485
2500
|
this.colWidths = {}
|
|
2486
2501
|
this.relativeColSpecs = {}
|
|
2502
|
+
const validKeys = new Set(this.leafCols.map(c => c.key))
|
|
2503
|
+
const newOverrides = {}
|
|
2504
|
+
Object.keys(this.fitColumnsOverrides).forEach(k => {
|
|
2505
|
+
if (validKeys.has(k)) newOverrides[k] = true
|
|
2506
|
+
})
|
|
2507
|
+
this.fitColumnsOverrides = newOverrides
|
|
2487
2508
|
this._applyFitColumns()
|
|
2488
2509
|
} else {
|
|
2489
2510
|
// Rebuild colWidths by new flat index, using col.key to look up saved widths
|
|
@@ -4055,6 +4076,10 @@ const ExcelGridComponent = {
|
|
|
4055
4076
|
if (dc !== 0) farCol = this._extendAxis(anchor.col, farCol, dc, this.leafCols.length - 1)
|
|
4056
4077
|
this.selectionRanges = [buildRange(anchor, { row: farRow, col: farCol })]
|
|
4057
4078
|
this.emitSelectionChange()
|
|
4079
|
+
// Unlike moveActive(), this doesn't move the active cell — but the newly
|
|
4080
|
+
// extended (far) corner of the range must still be scrolled into view,
|
|
4081
|
+
// exactly like moveActive() does for the active cell itself.
|
|
4082
|
+
this.scrollToCell(farRow, farCol)
|
|
4058
4083
|
},
|
|
4059
4084
|
|
|
4060
4085
|
_extendAxis(anchorIdx, farIdx, delta, maxIdx) {
|
|
@@ -5917,9 +5942,12 @@ const ExcelGridComponent = {
|
|
|
5917
5942
|
// RESIZE (3.5)
|
|
5918
5943
|
// =========================================================
|
|
5919
5944
|
startColResize(e, ci) {
|
|
5920
|
-
// fitColumns
|
|
5921
|
-
//
|
|
5922
|
-
|
|
5945
|
+
// Under fitColumns, resizing a column turns IT into a fixed px
|
|
5946
|
+
// override (see commitResize/_applyFitColumns) — the rest keep
|
|
5947
|
+
// scaling proportionally to fill what's left, so this can reintroduce
|
|
5948
|
+
// horizontal scroll. That's an accepted tradeoff for letting a column
|
|
5949
|
+
// be pinned to an exact width while fitColumns is on.
|
|
5950
|
+
if (this.internalLocked) return
|
|
5923
5951
|
const rect = this.$refs.container.getBoundingClientRect()
|
|
5924
5952
|
this.resizing = {
|
|
5925
5953
|
active: true,
|
|
@@ -5991,6 +6019,11 @@ const ExcelGridComponent = {
|
|
|
5991
6019
|
if (this.resizing.type === 'col') {
|
|
5992
6020
|
this._cellStyleCache = Object.create(null)
|
|
5993
6021
|
const newSize = this.colWidths[this.resizing.index]
|
|
6022
|
+
if (this.fitColumns) {
|
|
6023
|
+
const col = this.leafCols[this.resizing.index]
|
|
6024
|
+
if (col) this.$set(this.fitColumnsOverrides, col.key, true)
|
|
6025
|
+
this._applyFitColumns()
|
|
6026
|
+
}
|
|
5994
6027
|
this.$emit('column-resize', { index: this.resizing.index, newSize })
|
|
5995
6028
|
} else {
|
|
5996
6029
|
this._rowStyleCache = Object.create(null)
|
|
@@ -6042,6 +6075,13 @@ const ExcelGridComponent = {
|
|
|
6042
6075
|
// naturalGridWidth's formula in reverse: that computed derives the
|
|
6043
6076
|
// grid's natural width FROM the column widths; this derives the column
|
|
6044
6077
|
// widths FROM the available width.
|
|
6078
|
+
//
|
|
6079
|
+
// Columns in fitColumnsOverrides (manually resized while fitColumns was
|
|
6080
|
+
// on — see commitResize) are excluded from the scaling pool and keep
|
|
6081
|
+
// their current colWidths px value untouched; the remaining columns
|
|
6082
|
+
// scale to fill whatever space is left after subtracting the overrides'
|
|
6083
|
+
// total width, which can go negative (horizontal scroll returns) if the
|
|
6084
|
+
// overrides alone exceed the available width.
|
|
6045
6085
|
_applyFitColumns() {
|
|
6046
6086
|
if (!this.fitColumns || !this.leafCols.length) return
|
|
6047
6087
|
const containerWidth = this._relativeWidthContainer
|
|
@@ -6052,15 +6092,22 @@ const ExcelGridComponent = {
|
|
|
6052
6092
|
|
|
6053
6093
|
const visible = []
|
|
6054
6094
|
let totalWeight = 0
|
|
6095
|
+
let overriddenWidth = 0
|
|
6055
6096
|
this.leafCols.forEach((col, ci) => {
|
|
6056
6097
|
if (this.isColHidden(ci)) return
|
|
6098
|
+
if (this.fitColumnsOverrides[col.key]) {
|
|
6099
|
+
const w = this.colWidths[ci] !== undefined ? this.colWidths[ci] : this.resolveColWidth(col.width, containerWidth)
|
|
6100
|
+
overriddenWidth += w
|
|
6101
|
+
return
|
|
6102
|
+
}
|
|
6057
6103
|
const w = this.resolveColWidth(col.width, containerWidth)
|
|
6058
6104
|
visible.push({ ci, weight: w })
|
|
6059
6105
|
totalWeight += w
|
|
6060
6106
|
})
|
|
6061
6107
|
if (!visible.length || totalWeight <= 0) return
|
|
6062
6108
|
|
|
6063
|
-
const
|
|
6109
|
+
const remaining = available - overriddenWidth
|
|
6110
|
+
const scale = remaining > 0 ? remaining / totalWeight : 0
|
|
6064
6111
|
visible.forEach(({ ci, weight }) => {
|
|
6065
6112
|
this.$set(this.colWidths, ci, Math.max(FIT_COLUMNS_MIN_WIDTH, weight * scale))
|
|
6066
6113
|
this.$delete(this.relativeColSpecs, ci)
|