@vscode-elements/elements 2.4.0 → 2.4.1-pre.1
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/LICENSE +1 -1
- package/custom-elements.json +1220 -120
- package/dist/bundled.js +163 -164
- package/dist/includes/VscElement.d.ts +1 -0
- package/dist/includes/VscElement.d.ts.map +1 -1
- package/dist/includes/VscElement.js +16 -3
- package/dist/includes/VscElement.js.map +1 -1
- package/dist/includes/helpers.d.ts +1 -0
- package/dist/includes/helpers.d.ts.map +1 -1
- package/dist/includes/helpers.js +3 -0
- package/dist/includes/helpers.js.map +1 -1
- package/dist/includes/sizes.d.ts +12 -0
- package/dist/includes/sizes.d.ts.map +1 -0
- package/dist/includes/sizes.js +30 -0
- package/dist/includes/sizes.js.map +1 -0
- package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
- package/dist/includes/vscode-select/vscode-select-base.js +1 -4
- package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
- package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
- package/dist/vscode-icon/vscode-icon.js +2 -3
- package/dist/vscode-icon/vscode-icon.js.map +1 -1
- package/dist/vscode-table/ColumnResizeController.d.ts +38 -0
- package/dist/vscode-table/ColumnResizeController.d.ts.map +1 -0
- package/dist/vscode-table/ColumnResizeController.js +146 -0
- package/dist/vscode-table/ColumnResizeController.js.map +1 -0
- package/dist/vscode-table/calculations.d.ts +3 -0
- package/dist/vscode-table/calculations.d.ts.map +1 -0
- package/dist/vscode-table/calculations.js +54 -0
- package/dist/vscode-table/calculations.js.map +1 -0
- package/dist/vscode-table/vscode-table.d.ts +11 -14
- package/dist/vscode-table/vscode-table.d.ts.map +1 -1
- package/dist/vscode-table/vscode-table.js +109 -118
- package/dist/vscode-table/vscode-table.js.map +1 -1
- package/dist/vscode-table/vscode-table.styles.d.ts +2 -0
- package/dist/vscode-table/vscode-table.styles.d.ts.map +1 -1
- package/dist/vscode-table/vscode-table.styles.js +6 -5
- package/dist/vscode-table/vscode-table.styles.js.map +1 -1
- package/dist/vscode-table-header-cell/vscode-table-header-cell.d.ts +12 -1
- package/dist/vscode-table-header-cell/vscode-table-header-cell.d.ts.map +1 -1
- package/dist/vscode-table-header-cell/vscode-table-header-cell.js +18 -0
- package/dist/vscode-table-header-cell/vscode-table-header-cell.js.map +1 -1
- package/dist/vscode-tree-item/vscode-tree-item.d.ts +13 -0
- package/dist/vscode-tree-item/vscode-tree-item.d.ts.map +1 -1
- package/dist/vscode-tree-item/vscode-tree-item.js +13 -0
- package/dist/vscode-tree-item/vscode-tree-item.js.map +1 -1
- package/package.json +3 -3
- package/vscode.html-custom-data.json +3 -3
- package/dist/vscode-table/helpers.d.ts +0 -2
- package/dist/vscode-table/helpers.d.ts.map +0 -1
- package/dist/vscode-table/helpers.js +0 -20
- package/dist/vscode-table/helpers.js.map +0 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { percent, px, toPercent, toPx } from '../includes/sizes.js';
|
|
2
|
+
import { calculateColumnWidths } from './calculations.js';
|
|
3
|
+
export class ColumnResizeController {
|
|
4
|
+
constructor(host) {
|
|
5
|
+
this._hostWidth = px(0);
|
|
6
|
+
this._hostX = px(0);
|
|
7
|
+
this._activeSplitter = null;
|
|
8
|
+
this._columnMinWidths = new Map();
|
|
9
|
+
this._columnWidths = [];
|
|
10
|
+
this._dragState = null;
|
|
11
|
+
this._cachedSplitterPositions = null;
|
|
12
|
+
(this._host = host).addController(this);
|
|
13
|
+
}
|
|
14
|
+
hostConnected() {
|
|
15
|
+
this.saveHostDimensions();
|
|
16
|
+
}
|
|
17
|
+
get isDragging() {
|
|
18
|
+
return this._dragState !== null;
|
|
19
|
+
}
|
|
20
|
+
get splitterPositions() {
|
|
21
|
+
if (this._cachedSplitterPositions) {
|
|
22
|
+
return this._cachedSplitterPositions;
|
|
23
|
+
}
|
|
24
|
+
const result = [];
|
|
25
|
+
let acc = percent(0);
|
|
26
|
+
for (let i = 0; i < this._columnWidths.length - 1; i++) {
|
|
27
|
+
acc = percent(acc + this._columnWidths[i]);
|
|
28
|
+
result.push(acc);
|
|
29
|
+
}
|
|
30
|
+
this._cachedSplitterPositions = result;
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
getActiveSplitterCalculatedPosition() {
|
|
34
|
+
const splitterPositions = this.splitterPositions;
|
|
35
|
+
if (!this._dragState) {
|
|
36
|
+
return px(0);
|
|
37
|
+
}
|
|
38
|
+
const activeSplitterPos = splitterPositions[this._dragState.splitterIndex];
|
|
39
|
+
const activeSplitterPosPx = this._toPx(activeSplitterPos);
|
|
40
|
+
return activeSplitterPosPx;
|
|
41
|
+
}
|
|
42
|
+
get columnWidths() {
|
|
43
|
+
return this._columnWidths;
|
|
44
|
+
}
|
|
45
|
+
get columnMinWidths() {
|
|
46
|
+
return new Map(this._columnMinWidths);
|
|
47
|
+
}
|
|
48
|
+
saveHostDimensions() {
|
|
49
|
+
const cr = this._host.getBoundingClientRect();
|
|
50
|
+
const { width, x } = cr;
|
|
51
|
+
this._hostWidth = px(width);
|
|
52
|
+
this._hostX = px(x);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
setActiveSplitter(splitter) {
|
|
56
|
+
this._activeSplitter = splitter;
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
getActiveSplitter() {
|
|
60
|
+
return this._activeSplitter;
|
|
61
|
+
}
|
|
62
|
+
setColumnMinWidthAt(colIndex, value) {
|
|
63
|
+
this._columnMinWidths.set(colIndex, value);
|
|
64
|
+
this._host.requestUpdate();
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
setColumWidths(widths) {
|
|
68
|
+
this._columnWidths = widths;
|
|
69
|
+
this._cachedSplitterPositions = null;
|
|
70
|
+
this._host.requestUpdate();
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
shouldDrag(event) {
|
|
74
|
+
return (+event.currentTarget.dataset.index ===
|
|
75
|
+
this._dragState?.splitterIndex);
|
|
76
|
+
}
|
|
77
|
+
startDrag(event) {
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
if (this._dragState) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this._activeSplitter?.setPointerCapture(event.pointerId);
|
|
83
|
+
const mouseX = event.pageX;
|
|
84
|
+
const splitter = event.currentTarget;
|
|
85
|
+
const splitterX = splitter.getBoundingClientRect().x;
|
|
86
|
+
const xOffset = px(mouseX - splitterX);
|
|
87
|
+
this._dragState = {
|
|
88
|
+
dragOffset: px(xOffset),
|
|
89
|
+
pointerId: event.pointerId,
|
|
90
|
+
splitterIndex: +splitter.dataset.index,
|
|
91
|
+
prevX: px(mouseX - xOffset),
|
|
92
|
+
};
|
|
93
|
+
this._host.requestUpdate();
|
|
94
|
+
}
|
|
95
|
+
drag(event) {
|
|
96
|
+
event.stopPropagation();
|
|
97
|
+
if (!event?.currentTarget?.hasPointerCapture?.(event.pointerId)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!this._dragState) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (event.pointerId !== this._dragState.pointerId) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (!this.shouldDrag(event)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const mouseX = event.pageX;
|
|
110
|
+
const x = px(mouseX - this._dragState.dragOffset);
|
|
111
|
+
const deltaPx = px(x - this._dragState.prevX);
|
|
112
|
+
const delta = this._toPercent(deltaPx);
|
|
113
|
+
this._dragState.prevX = x;
|
|
114
|
+
const splitterPos = this.getActiveSplitterCalculatedPosition();
|
|
115
|
+
if ((deltaPx <= 0 && mouseX > splitterPos + this._hostX) ||
|
|
116
|
+
(deltaPx > 0 && mouseX < splitterPos + this._hostX)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this._columnWidths = calculateColumnWidths(this._columnWidths, this._dragState.splitterIndex, delta, this._columnMinWidths);
|
|
120
|
+
this._cachedSplitterPositions = null;
|
|
121
|
+
this._host.requestUpdate();
|
|
122
|
+
}
|
|
123
|
+
stopDrag(event) {
|
|
124
|
+
event.stopPropagation();
|
|
125
|
+
if (!this._dragState) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const el = event.currentTarget;
|
|
129
|
+
try {
|
|
130
|
+
el.releasePointerCapture(this._dragState.pointerId);
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
// ignore
|
|
134
|
+
}
|
|
135
|
+
this._dragState = null;
|
|
136
|
+
this._activeSplitter = null;
|
|
137
|
+
this._host.requestUpdate();
|
|
138
|
+
}
|
|
139
|
+
_toPercent(px) {
|
|
140
|
+
return toPercent(px, this._hostWidth);
|
|
141
|
+
}
|
|
142
|
+
_toPx(percent) {
|
|
143
|
+
return toPx(percent, this._hostWidth);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=ColumnResizeController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnResizeController.js","sourceRoot":"","sources":["../../src/vscode-table/ColumnResizeController.ts"],"names":[],"mappings":"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","sourcesContent":["import {ReactiveController} from 'lit';\nimport {type VscodeTable} from './vscode-table.js';\nimport {Percent, percent, Px, px, toPercent, toPx} from '../includes/sizes.js';\nimport {calculateColumnWidths} from './calculations.js';\n\ntype SplitterElement = HTMLDivElement & {\n dataset: DOMStringMap & {\n index: string;\n };\n};\n\nexport class ColumnResizeController implements ReactiveController {\n private _host: VscodeTable;\n private _hostWidth = px(0);\n private _hostX = px(0);\n private _activeSplitter: SplitterElement | null = null;\n private _columnMinWidths = new Map<number, Percent>();\n private _columnWidths: Percent[] = [];\n private _dragState: {\n splitterIndex: number;\n pointerId: number;\n prevX: Px;\n dragOffset: Px;\n } | null = null;\n private _cachedSplitterPositions: Percent[] | null = null;\n\n constructor(host: VscodeTable) {\n (this._host = host).addController(this);\n }\n\n hostConnected(): void {\n this.saveHostDimensions();\n }\n\n get isDragging(): boolean {\n return this._dragState !== null;\n }\n\n get splitterPositions(): Percent[] {\n if (this._cachedSplitterPositions) {\n return this._cachedSplitterPositions;\n }\n\n const result: Percent[] = [];\n\n let acc = percent(0);\n\n for (let i = 0; i < this._columnWidths.length - 1; i++) {\n acc = percent(acc + this._columnWidths[i]);\n result.push(acc);\n }\n\n this._cachedSplitterPositions = result;\n\n return result;\n }\n\n getActiveSplitterCalculatedPosition() {\n const splitterPositions = this.splitterPositions;\n\n if (!this._dragState) {\n return px(0);\n }\n\n const activeSplitterPos = splitterPositions[this._dragState.splitterIndex];\n const activeSplitterPosPx = this._toPx(activeSplitterPos);\n\n return activeSplitterPosPx;\n }\n\n get columnWidths() {\n return this._columnWidths;\n }\n\n get columnMinWidths() {\n return new Map(this._columnMinWidths);\n }\n\n saveHostDimensions() {\n const cr = this._host.getBoundingClientRect();\n const {width, x} = cr;\n this._hostWidth = px(width);\n this._hostX = px(x);\n return this;\n }\n\n setActiveSplitter(splitter: HTMLElement) {\n this._activeSplitter = splitter as SplitterElement;\n return this;\n }\n\n getActiveSplitter() {\n return this._activeSplitter;\n }\n\n setColumnMinWidthAt(colIndex: number, value: Percent) {\n this._columnMinWidths.set(colIndex, value);\n this._host.requestUpdate();\n return this;\n }\n\n setColumWidths(widths: Percent[]) {\n this._columnWidths = widths;\n this._cachedSplitterPositions = null;\n this._host.requestUpdate();\n return this;\n }\n\n shouldDrag(event: PointerEvent) {\n return (\n +(event.currentTarget as SplitterElement).dataset.index ===\n this._dragState?.splitterIndex\n );\n }\n\n startDrag(event: PointerEvent) {\n event.stopPropagation();\n\n if (this._dragState) {\n return;\n }\n\n this._activeSplitter?.setPointerCapture(event.pointerId);\n\n const mouseX = event.pageX;\n const splitter = event.currentTarget as SplitterElement;\n const splitterX = splitter!.getBoundingClientRect().x;\n const xOffset = px(mouseX - splitterX);\n\n this._dragState = {\n dragOffset: px(xOffset),\n pointerId: event.pointerId,\n splitterIndex: +splitter.dataset.index,\n prevX: px(mouseX - xOffset),\n };\n\n this._host.requestUpdate();\n }\n\n drag(event: PointerEvent) {\n event.stopPropagation();\n\n if (\n !(event?.currentTarget as SplitterElement)?.hasPointerCapture?.(\n event.pointerId\n )\n ) {\n return;\n }\n\n if (!this._dragState) {\n return;\n }\n\n if (event.pointerId !== this._dragState.pointerId) {\n return;\n }\n\n if (!this.shouldDrag(event)) {\n return;\n }\n\n const mouseX = event.pageX;\n const x = px(mouseX - this._dragState.dragOffset);\n const deltaPx = px(x - this._dragState.prevX);\n const delta = this._toPercent(deltaPx);\n this._dragState.prevX = x;\n\n const splitterPos = this.getActiveSplitterCalculatedPosition();\n\n if (\n (deltaPx <= 0 && mouseX > splitterPos + this._hostX) ||\n (deltaPx > 0 && mouseX < splitterPos + this._hostX)\n ) {\n return;\n }\n\n this._columnWidths = calculateColumnWidths(\n this._columnWidths,\n this._dragState.splitterIndex,\n delta,\n this._columnMinWidths\n );\n this._cachedSplitterPositions = null;\n\n this._host.requestUpdate();\n }\n\n stopDrag(event: PointerEvent) {\n event.stopPropagation();\n\n if (!this._dragState) {\n return;\n }\n\n const el = event.currentTarget as SplitterElement;\n\n try {\n el.releasePointerCapture(this._dragState.pointerId);\n } catch (e) {\n // ignore\n }\n\n this._dragState = null;\n this._activeSplitter = null;\n this._host.requestUpdate();\n }\n\n private _toPercent(px: Px) {\n return toPercent(px, this._hostWidth);\n }\n\n private _toPx(percent: Percent) {\n return toPx(percent, this._hostWidth);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../src/vscode-table/calculations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAU,MAAM,sBAAsB,CAAC;AAEtD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EAAE,EACjB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,EAAE,CAmEX"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { percent } from '../includes/sizes.js';
|
|
2
|
+
export function calculateColumnWidths(widths, splitterIndex, delta, minWidths) {
|
|
3
|
+
const result = [...widths];
|
|
4
|
+
// No-op for invalid splitter position or zero delta
|
|
5
|
+
if (delta === 0 || splitterIndex < 0 || splitterIndex >= widths.length - 1) {
|
|
6
|
+
return result;
|
|
7
|
+
}
|
|
8
|
+
const absDelta = Math.abs(delta);
|
|
9
|
+
let remaining = percent(absDelta);
|
|
10
|
+
const leftIndices = [];
|
|
11
|
+
const rightIndices = [];
|
|
12
|
+
// Collect column indices to the left of the splitter (inclusive)
|
|
13
|
+
for (let i = splitterIndex; i >= 0; i--) {
|
|
14
|
+
leftIndices.push(i);
|
|
15
|
+
}
|
|
16
|
+
// Collect column indices to the right of the splitter
|
|
17
|
+
for (let i = splitterIndex + 1; i < widths.length; i++) {
|
|
18
|
+
rightIndices.push(i);
|
|
19
|
+
}
|
|
20
|
+
// One side shrinks, the other grows depending on drag direction
|
|
21
|
+
const shrinkingSide = delta > 0 ? rightIndices : leftIndices;
|
|
22
|
+
const growingSide = delta > 0 ? leftIndices : rightIndices;
|
|
23
|
+
// Calculate total shrinkable space respecting minWidth
|
|
24
|
+
let totalAvailable = percent(0);
|
|
25
|
+
for (const i of shrinkingSide) {
|
|
26
|
+
const available = Math.max(0, result[i] - (minWidths.get(i) ?? 0));
|
|
27
|
+
totalAvailable = percent(totalAvailable + available);
|
|
28
|
+
}
|
|
29
|
+
// Abort if the requested delta cannot be fully satisfied
|
|
30
|
+
if (totalAvailable < remaining) {
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
// Shrink columns sequentially until the delta is fully consumed
|
|
34
|
+
for (const i of shrinkingSide) {
|
|
35
|
+
if (remaining === 0) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
const available = Math.max(0, result[i] - (minWidths.get(i) ?? 0));
|
|
39
|
+
const take = Math.min(available, remaining);
|
|
40
|
+
result[i] = percent(result[i] - take);
|
|
41
|
+
remaining = percent(remaining - take);
|
|
42
|
+
}
|
|
43
|
+
// Apply the exact opposite delta to the growing side
|
|
44
|
+
let toAdd = percent(absDelta);
|
|
45
|
+
for (const i of growingSide) {
|
|
46
|
+
if (toAdd === 0) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
result[i] = percent(result[i] + toAdd);
|
|
50
|
+
toAdd = percent(0); // all growth is applied to the nearest column
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=calculations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../src/vscode-table/calculations.ts"],"names":[],"mappings":"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","sourcesContent":["import {Percent, percent} from '../includes/sizes.js';\n\nexport function calculateColumnWidths(\n widths: Percent[],\n splitterIndex: number,\n delta: Percent,\n minWidths: Map<number, Percent>\n): Percent[] {\n const result = [...widths];\n\n // No-op for invalid splitter position or zero delta\n if (delta === 0 || splitterIndex < 0 || splitterIndex >= widths.length - 1) {\n return result;\n }\n\n const absDelta = Math.abs(delta);\n let remaining: Percent = percent(absDelta);\n\n const leftIndices: number[] = [];\n const rightIndices: number[] = [];\n\n // Collect column indices to the left of the splitter (inclusive)\n for (let i = splitterIndex; i >= 0; i--) {\n leftIndices.push(i);\n }\n\n // Collect column indices to the right of the splitter\n for (let i = splitterIndex + 1; i < widths.length; i++) {\n rightIndices.push(i);\n }\n\n // One side shrinks, the other grows depending on drag direction\n const shrinkingSide = delta > 0 ? rightIndices : leftIndices;\n const growingSide = delta > 0 ? leftIndices : rightIndices;\n\n // Calculate total shrinkable space respecting minWidth\n let totalAvailable: Percent = percent(0);\n\n for (const i of shrinkingSide) {\n const available = Math.max(0, result[i] - (minWidths.get(i) ?? 0));\n totalAvailable = percent(totalAvailable + available);\n }\n\n // Abort if the requested delta cannot be fully satisfied\n if (totalAvailable < remaining) {\n return result;\n }\n\n // Shrink columns sequentially until the delta is fully consumed\n for (const i of shrinkingSide) {\n if (remaining === 0) {\n break;\n }\n\n const available = Math.max(0, result[i] - (minWidths.get(i) ?? 0));\n const take = Math.min(available, remaining);\n\n result[i] = percent(result[i] - take);\n remaining = percent(remaining - take);\n }\n\n // Apply the exact opposite delta to the growing side\n let toAdd: Percent = percent(absDelta);\n\n for (const i of growingSide) {\n if (toAdd === 0) {\n break;\n }\n\n result[i] = percent(result[i] + toAdd);\n toAdd = percent(0); // all growth is applied to the nearest column\n }\n\n return result;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TemplateResult } from 'lit';
|
|
1
|
+
import { PropertyValues, TemplateResult } from 'lit';
|
|
2
2
|
import { VscElement } from '../includes/VscElement.js';
|
|
3
3
|
import '../vscode-scrollable/index.js';
|
|
4
4
|
/**
|
|
@@ -62,7 +62,6 @@ export declare class VscodeTable extends VscElement {
|
|
|
62
62
|
* Zebra stripes, odd rows are tinted.
|
|
63
63
|
*/
|
|
64
64
|
zebraOdd: boolean;
|
|
65
|
-
private _bodySlot;
|
|
66
65
|
private _headerElement;
|
|
67
66
|
private _scrollableElement;
|
|
68
67
|
private _sashVisibleElements;
|
|
@@ -83,8 +82,6 @@ export declare class VscodeTable extends VscElement {
|
|
|
83
82
|
private _headerResizeObserver?;
|
|
84
83
|
private _bodyResizeObserver?;
|
|
85
84
|
private _activeSashElementIndex;
|
|
86
|
-
private _activeSashCursorOffset;
|
|
87
|
-
private _componentX;
|
|
88
85
|
private _componentH;
|
|
89
86
|
private _componentW;
|
|
90
87
|
/**
|
|
@@ -97,14 +94,13 @@ export declare class VscodeTable extends VscElement {
|
|
|
97
94
|
* It shouldn't be used directly, check the "_getCellsOfFirstRow" function.
|
|
98
95
|
*/
|
|
99
96
|
private _cellsOfFirstRow;
|
|
100
|
-
private _cellsToResize;
|
|
101
|
-
private _headerCellsToResize;
|
|
102
97
|
private _prevHeaderHeight;
|
|
103
98
|
private _prevComponentHeight;
|
|
99
|
+
private _columnResizeController;
|
|
100
|
+
constructor();
|
|
104
101
|
connectedCallback(): void;
|
|
105
102
|
disconnectedCallback(): void;
|
|
106
|
-
|
|
107
|
-
private _percent2Px;
|
|
103
|
+
protected willUpdate(changedProperties: PropertyValues): void;
|
|
108
104
|
private _memoizeComponentDimensions;
|
|
109
105
|
private _queryHeaderCells;
|
|
110
106
|
/**
|
|
@@ -121,7 +117,7 @@ export declare class VscodeTable extends VscElement {
|
|
|
121
117
|
private _componentResizeObserverCallback;
|
|
122
118
|
private _headerResizeObserverCallback;
|
|
123
119
|
private _bodyResizeObserverCallback;
|
|
124
|
-
private
|
|
120
|
+
private _calculateInitialColumnWidths;
|
|
125
121
|
private _initHeaderCellSizes;
|
|
126
122
|
private _initBodyColumnSizes;
|
|
127
123
|
private _initSashes;
|
|
@@ -130,17 +126,18 @@ export declare class VscodeTable extends VscElement {
|
|
|
130
126
|
private _applyCompactViewColumnLabels;
|
|
131
127
|
private _clearCompactViewColumnLabels;
|
|
132
128
|
private _toggleCompactView;
|
|
129
|
+
private _stopDrag;
|
|
133
130
|
private _onDefaultSlotChange;
|
|
134
131
|
private _onHeaderSlotChange;
|
|
135
132
|
private _onBodySlotChange;
|
|
136
133
|
private _onSashMouseOver;
|
|
137
134
|
private _onSashMouseOut;
|
|
138
|
-
private _onSashMouseDown;
|
|
139
|
-
private _updateActiveSashPosition;
|
|
140
|
-
private _getSashPositions;
|
|
141
135
|
private _resizeColumns;
|
|
142
|
-
private
|
|
143
|
-
private
|
|
136
|
+
private _handleSplitterPointerDown;
|
|
137
|
+
private _handleSplitterPointerMove;
|
|
138
|
+
private _handleSplitterPointerUp;
|
|
139
|
+
private _handleSplitterPointerCancel;
|
|
140
|
+
private _handleMinColumnWidthChange;
|
|
144
141
|
render(): TemplateResult;
|
|
145
142
|
}
|
|
146
143
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-table.d.ts","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode-table.d.ts","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"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"}
|