@vscode-elements/elements 2.4.0 → 2.4.1-pre.0

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.
Files changed (43) hide show
  1. package/custom-elements.json +1370 -314
  2. package/dist/bundled.js +163 -164
  3. package/dist/includes/VscElement.d.ts +1 -0
  4. package/dist/includes/VscElement.d.ts.map +1 -1
  5. package/dist/includes/VscElement.js +16 -3
  6. package/dist/includes/VscElement.js.map +1 -1
  7. package/dist/includes/helpers.d.ts +1 -0
  8. package/dist/includes/helpers.d.ts.map +1 -1
  9. package/dist/includes/helpers.js +3 -0
  10. package/dist/includes/helpers.js.map +1 -1
  11. package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
  12. package/dist/includes/vscode-select/vscode-select-base.js +1 -4
  13. package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
  14. package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
  15. package/dist/vscode-icon/vscode-icon.js +2 -3
  16. package/dist/vscode-icon/vscode-icon.js.map +1 -1
  17. package/dist/vscode-table/ColumnResizeController.d.ts +37 -0
  18. package/dist/vscode-table/ColumnResizeController.d.ts.map +1 -0
  19. package/dist/vscode-table/ColumnResizeController.js +141 -0
  20. package/dist/vscode-table/ColumnResizeController.js.map +1 -0
  21. package/dist/vscode-table/calculations.d.ts +13 -0
  22. package/dist/vscode-table/calculations.d.ts.map +1 -0
  23. package/dist/vscode-table/calculations.js +82 -0
  24. package/dist/vscode-table/calculations.js.map +1 -0
  25. package/dist/vscode-table/vscode-table.d.ts +9 -14
  26. package/dist/vscode-table/vscode-table.d.ts.map +1 -1
  27. package/dist/vscode-table/vscode-table.js +62 -98
  28. package/dist/vscode-table/vscode-table.js.map +1 -1
  29. package/dist/vscode-table/vscode-table.styles.d.ts +2 -0
  30. package/dist/vscode-table/vscode-table.styles.d.ts.map +1 -1
  31. package/dist/vscode-table/vscode-table.styles.js +6 -5
  32. package/dist/vscode-table/vscode-table.styles.js.map +1 -1
  33. package/dist/vscode-tree-item/vscode-tree-item.d.ts +13 -0
  34. package/dist/vscode-tree-item/vscode-tree-item.d.ts.map +1 -1
  35. package/dist/vscode-tree-item/vscode-tree-item.js +13 -0
  36. package/dist/vscode-tree-item/vscode-tree-item.js.map +1 -1
  37. package/package.json +3 -3
  38. package/vscode.css-custom-data.json +15 -15
  39. package/vscode.html-custom-data.json +19 -19
  40. package/dist/vscode-table/helpers.d.ts +0 -2
  41. package/dist/vscode-table/helpers.d.ts.map +0 -1
  42. package/dist/vscode-table/helpers.js +0 -20
  43. package/dist/vscode-table/helpers.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ export type Px = number & {
2
+ readonly __unit: 'px';
3
+ };
4
+ export type Percent = number & {
5
+ readonly __unit: '%';
6
+ };
7
+ export declare const px: (value: number) => Px;
8
+ export declare const percent: (value: number) => Percent;
9
+ export declare const toPercent: (px: Px, container: Px) => Percent;
10
+ export declare const toPx: (p: Percent, container: Px) => Px;
11
+ export declare function calculateColumnWidths(widths: Percent[], splitterIndex: number, delta: Percent, minWidth: Percent): Percent[];
12
+ export declare const parseSizeAttributeToPercent: (raw: string | number, base: number) => number | null;
13
+ //# sourceMappingURL=calculations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../src/vscode-table/calculations.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,EAAE,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAC,CAAC;AAClD,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAA;CAAC,CAAC;AAEtD,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,EAAiB,CAAC;AACrD,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,KAAG,OAA2B,CAAC;AAEpE,eAAO,MAAM,SAAS,GAAI,IAAI,EAAE,EAAE,WAAW,EAAE,KAAG,OACjB,CAAC;AAElC,eAAO,MAAM,IAAI,GAAI,GAAG,OAAO,EAAE,WAAW,EAAE,KAAG,EACtB,CAAC;AAE5B,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EAAE,EACjB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,OAAO,GAChB,OAAO,EAAE,CAmEX;AAsBD,eAAO,MAAM,2BAA2B,GACtC,KAAK,MAAM,GAAG,MAAM,EACpB,MAAM,MAAM,KACX,MAAM,GAAG,IAaX,CAAC"}
@@ -0,0 +1,82 @@
1
+ export const px = (value) => value;
2
+ export const percent = (value) => value;
3
+ export const toPercent = (px, container) => percent((px / container) * 100);
4
+ export const toPx = (p, container) => px((p / 100) * container);
5
+ export function calculateColumnWidths(widths, splitterIndex, delta, minWidth) {
6
+ const result = [...widths];
7
+ // No-op for invalid splitter position or zero delta
8
+ if (delta === 0 || splitterIndex < 0 || splitterIndex >= widths.length - 1) {
9
+ return result;
10
+ }
11
+ const absDelta = Math.abs(delta);
12
+ let remaining = percent(absDelta);
13
+ const leftIndices = [];
14
+ const rightIndices = [];
15
+ // Collect column indices to the left of the splitter (inclusive)
16
+ for (let i = splitterIndex; i >= 0; i--) {
17
+ leftIndices.push(i);
18
+ }
19
+ // Collect column indices to the right of the splitter
20
+ for (let i = splitterIndex + 1; i < widths.length; i++) {
21
+ rightIndices.push(i);
22
+ }
23
+ // One side shrinks, the other grows depending on drag direction
24
+ const shrinkingSide = delta > 0 ? rightIndices : leftIndices;
25
+ const growingSide = delta > 0 ? leftIndices : rightIndices;
26
+ // Calculate total shrinkable space respecting minWidth
27
+ let totalAvailable = percent(0);
28
+ for (const i of shrinkingSide) {
29
+ const available = Math.max(0, result[i] - minWidth);
30
+ totalAvailable = percent(totalAvailable + available);
31
+ }
32
+ // Abort if the requested delta cannot be fully satisfied
33
+ if (totalAvailable < remaining) {
34
+ return result;
35
+ }
36
+ // Shrink columns sequentially until the delta is fully consumed
37
+ for (const i of shrinkingSide) {
38
+ if (remaining === 0) {
39
+ break;
40
+ }
41
+ const available = Math.max(0, result[i] - minWidth);
42
+ const take = Math.min(available, remaining);
43
+ result[i] = percent(result[i] - take);
44
+ remaining = percent(remaining - take);
45
+ }
46
+ // Apply the exact opposite delta to the growing side
47
+ let toAdd = percent(absDelta);
48
+ for (const i of growingSide) {
49
+ if (toAdd === 0) {
50
+ break;
51
+ }
52
+ result[i] = percent(result[i] + toAdd);
53
+ toAdd = percent(0); // all growth is applied to the nearest column
54
+ }
55
+ return result;
56
+ }
57
+ const parsers = [
58
+ {
59
+ test: (v) => /^-?\d+(\.\d+)?%$/.test(v),
60
+ parse: (v) => Number(v.slice(0, -1)),
61
+ },
62
+ {
63
+ test: (v) => /^-?\d+(\.\d+)?px$/.test(v),
64
+ parse: (v, base) => (Number(v.slice(0, -2)) / base) * 100,
65
+ },
66
+ {
67
+ test: (v) => /^-?\d+(\.\d+)?$/.test(v),
68
+ parse: (v, base) => (Number(v) / base) * 100,
69
+ },
70
+ ];
71
+ export const parseSizeAttributeToPercent = (raw, base) => {
72
+ if (!Number.isFinite(base) || base === 0) {
73
+ return null;
74
+ }
75
+ if (typeof raw === 'number') {
76
+ return Number.isFinite(raw) ? (raw / base) * 100 : null;
77
+ }
78
+ const value = raw.trim();
79
+ const parser = parsers.find((p) => p.test(value));
80
+ return parser ? parser.parse(value, base) : null;
81
+ };
82
+ //# 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":["export type Px = number & {readonly __unit: 'px'};\nexport type Percent = number & {readonly __unit: '%'};\n\nexport const px = (value: number): Px => value as Px;\nexport const percent = (value: number): Percent => value as Percent;\n\nexport const toPercent = (px: Px, container: Px): Percent =>\n percent((px / container) * 100);\n\nexport const toPx = (p: Percent, container: Px): Px =>\n px((p / 100) * container);\n\nexport function calculateColumnWidths(\n widths: Percent[],\n splitterIndex: number,\n delta: Percent,\n minWidth: 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] - minWidth);\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] - minWidth);\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\ntype Parser = {\n test: (value: string) => boolean;\n parse: (value: string, base: number) => number;\n};\n\nconst parsers: Parser[] = [\n {\n test: (v) => /^-?\\d+(\\.\\d+)?%$/.test(v),\n parse: (v) => Number(v.slice(0, -1)),\n },\n {\n test: (v) => /^-?\\d+(\\.\\d+)?px$/.test(v),\n parse: (v, base) => (Number(v.slice(0, -2)) / base) * 100,\n },\n {\n test: (v) => /^-?\\d+(\\.\\d+)?$/.test(v),\n parse: (v, base) => (Number(v) / base) * 100,\n },\n];\n\nexport const parseSizeAttributeToPercent = (\n raw: string | number,\n base: number\n): number | null => {\n if (!Number.isFinite(base) || base === 0) {\n return null;\n }\n\n if (typeof raw === 'number') {\n return Number.isFinite(raw) ? (raw / base) * 100 : null;\n }\n\n const value = raw.trim();\n const parser = parsers.find((p) => p.test(value));\n\n return parser ? parser.parse(value, base) : null;\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,12 @@ 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;
104
100
  connectedCallback(): void;
105
101
  disconnectedCallback(): void;
106
- private _px2Percent;
107
- private _percent2Px;
102
+ protected willUpdate(changedProperties: PropertyValues): void;
108
103
  private _memoizeComponentDimensions;
109
104
  private _queryHeaderCells;
110
105
  /**
@@ -121,7 +116,7 @@ export declare class VscodeTable extends VscElement {
121
116
  private _componentResizeObserverCallback;
122
117
  private _headerResizeObserverCallback;
123
118
  private _bodyResizeObserverCallback;
124
- private _calcColWidthPercentages;
119
+ private _calculateInitialColumnWidths;
125
120
  private _initHeaderCellSizes;
126
121
  private _initBodyColumnSizes;
127
122
  private _initSashes;
@@ -130,17 +125,17 @@ export declare class VscodeTable extends VscElement {
130
125
  private _applyCompactViewColumnLabels;
131
126
  private _clearCompactViewColumnLabels;
132
127
  private _toggleCompactView;
128
+ private _stopDrag;
133
129
  private _onDefaultSlotChange;
134
130
  private _onHeaderSlotChange;
135
131
  private _onBodySlotChange;
136
132
  private _onSashMouseOver;
137
133
  private _onSashMouseOut;
138
- private _onSashMouseDown;
139
- private _updateActiveSashPosition;
140
- private _getSashPositions;
141
134
  private _resizeColumns;
142
- private _onResizingMouseMove;
143
- private _onResizingMouseUp;
135
+ private _handleSplitterPointerDown;
136
+ private _handleSplitterPointerMove;
137
+ private _handleSplitterPointerUp;
138
+ private _handleSplitterPointerCancel;
144
139
  render(): TemplateResult;
145
140
  }
146
141
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-table.d.ts","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vscode-table.d.ts","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AASzD,OAAO,EAAgB,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAEpE,OAAO,+BAA+B,CAAC;AAWvC;;;;;;GAMG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,+BAAU;IAEhC,gBAAgB;IAEP,IAAI,SAAW;IAGxB,SAAS,UAAS;IAGlB,UAAU,UAAS;IAEnB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,eAAe,UAAS;IAExB;;OAEG;IAEH,YAAY,UAAS;IAGrB,UAAU,SAAO;IAEjB;;;;;;;;;OASG;IACH,IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAaxB;IACD,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED;;;;;;;;OAQG;IAEH,cAAc,SAAU;IAGxB,eAAe,UAAS;IAExB;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IAEH,KAAK,UAAS;IAEd;;OAEG;IAEH,QAAQ,UAAS;IAGjB,OAAO,CAAC,cAAc,CAAkB;IAGxC,OAAO,CAAC,kBAAkB,CAAoB;IAG9C,OAAO,CAAC,oBAAoB,CAAoB;IAMhD,OAAO,CAAC,iBAAiB,CAA2B;IAOpD,OAAO,CAAC,uBAAuB,CAAiC;IAOhE,OAAO,CAAC,qBAAqB,CAA+B;IAE5D;;OAEG;IAEH,OAAO,CAAC,cAAc,CAAgB;IAGtC,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACH,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,wBAAwB,CAAC,CAAiB;IAClD,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAC7C,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA+B;IACnD;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,uBAAuB,CAAoC;IAE1D,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;cAOlB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAStE,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,gCAAgC,CAStC;IAEF,OAAO,CAAC,6BAA6B,CAEnC;IAEF,OAAO,CAAC,2BAA2B,CAEjC;IAEF,OAAO,CAAC,6BAA6B;IAoCrC,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,6BAA6B;IAerC,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,0BAA0B;IAqBlC,OAAO,CAAC,0BAA0B,CAWhC;IAEF,OAAO,CAAC,wBAAwB,CAE9B;IAEF,OAAO,CAAC,4BAA4B,CAElC;IAEO,MAAM,IAAI,cAAc;CA4DlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
@@ -10,9 +10,10 @@ import { classMap } from 'lit/directives/class-map.js';
10
10
  import { customElement, VscElement } from '../includes/VscElement.js';
11
11
  import { stylePropertyMap } from '../includes/style-property-map.js';
12
12
  import '../vscode-scrollable/index.js';
13
- import { rawValueToPercentage } from './helpers.js';
13
+ import { parseSizeAttributeToPercent } from './calculations.js';
14
14
  import styles from './vscode-table.styles.js';
15
- const COMPONENT_WIDTH_PERCENTAGE = 100;
15
+ import { ColumnResizeController } from './ColumnResizeController.js';
16
+ import { percent } from './calculations.js';
16
17
  /**
17
18
  * @tag vscode-table
18
19
  *
@@ -74,8 +75,6 @@ let VscodeTable = class VscodeTable extends VscElement {
74
75
  this._sashHovers = [];
75
76
  this._columns = [];
76
77
  this._activeSashElementIndex = -1;
77
- this._activeSashCursorOffset = 0;
78
- this._componentX = 0;
79
78
  this._componentH = 0;
80
79
  this._componentW = 0;
81
80
  /**
@@ -90,6 +89,7 @@ let VscodeTable = class VscodeTable extends VscElement {
90
89
  this._cellsOfFirstRow = [];
91
90
  this._prevHeaderHeight = 0;
92
91
  this._prevComponentHeight = 0;
92
+ this._columnResizeController = new ColumnResizeController(this);
93
93
  this._componentResizeObserverCallback = () => {
94
94
  this._memoizeComponentDimensions();
95
95
  this._updateResizeHandlersSize();
@@ -104,9 +104,11 @@ let VscodeTable = class VscodeTable extends VscElement {
104
104
  this._bodyResizeObserverCallback = () => {
105
105
  this._resizeTableBody();
106
106
  };
107
- this._onResizingMouseMove = (event) => {
108
- event.stopPropagation();
109
- this._updateActiveSashPosition(event.pageX);
107
+ this._handleSplitterPointerMove = (event) => {
108
+ if (!this._columnResizeController.shouldDrag(event)) {
109
+ return;
110
+ }
111
+ this._columnResizeController.drag(event);
110
112
  if (!this.delayedResizing) {
111
113
  this._resizeColumns(true);
112
114
  }
@@ -114,14 +116,11 @@ let VscodeTable = class VscodeTable extends VscElement {
114
116
  this._resizeColumns(false);
115
117
  }
116
118
  };
117
- this._onResizingMouseUp = (event) => {
118
- this._resizeColumns(true);
119
- this._updateActiveSashPosition(event.pageX);
120
- this._sashHovers[this._activeSashElementIndex] = false;
121
- this._isDragging = false;
122
- this._activeSashElementIndex = -1;
123
- document.removeEventListener('mousemove', this._onResizingMouseMove);
124
- document.removeEventListener('mouseup', this._onResizingMouseUp);
119
+ this._handleSplitterPointerUp = (event) => {
120
+ this._stopDrag(event);
121
+ };
122
+ this._handleSplitterPointerCancel = (event) => {
123
+ this._stopDrag(event);
125
124
  };
126
125
  }
127
126
  /**
@@ -135,6 +134,11 @@ let VscodeTable = class VscodeTable extends VscElement {
135
134
  * - "auto" keyword
136
135
  */
137
136
  set columns(val) {
137
+ if (!Array.isArray(val)) {
138
+ this.warn('Invalid value for "columns": expected an array.');
139
+ this._columns = [];
140
+ return;
141
+ }
138
142
  this._columns = val;
139
143
  if (this.isConnected) {
140
144
  this._initDefaultColumnSizes();
@@ -154,17 +158,16 @@ let VscodeTable = class VscodeTable extends VscElement {
154
158
  this._componentResizeObserver?.disconnect();
155
159
  this._bodyResizeObserver?.disconnect();
156
160
  }
157
- _px2Percent(px) {
158
- return (px / this._componentW) * 100;
159
- }
160
- _percent2Px(percent) {
161
- return (this._componentW * percent) / 100;
161
+ willUpdate(changedProperties) {
162
+ if (changedProperties.has('minColumnWidth')) {
163
+ const value = percent(parseSizeAttributeToPercent(this.minColumnWidth, this._componentW) ?? 0);
164
+ this._columnResizeController.setMinColumnWidth(value);
165
+ }
162
166
  }
163
167
  _memoizeComponentDimensions() {
164
168
  const cr = this.getBoundingClientRect();
165
169
  this._componentH = cr.height;
166
170
  this._componentW = cr.width;
167
- this._componentX = cr.x;
168
171
  }
169
172
  _queryHeaderCells() {
170
173
  const headers = this._assignedHeaderElements;
@@ -220,13 +223,13 @@ let VscodeTable = class VscodeTable extends VscElement {
220
223
  this._headerResizeObserver = new ResizeObserver(this._headerResizeObserverCallback);
221
224
  this._headerResizeObserver.observe(this._headerElement);
222
225
  }
223
- _calcColWidthPercentages() {
226
+ _calculateInitialColumnWidths() {
224
227
  const numCols = this._getHeaderCells().length;
225
228
  let cols = this.columns.slice(0, numCols);
226
229
  const numAutoCols = cols.filter((c) => c === 'auto').length + numCols - cols.length;
227
230
  let availablePercent = 100;
228
231
  cols = cols.map((col) => {
229
- const percentage = rawValueToPercentage(col, this._componentW);
232
+ const percentage = parseSizeAttributeToPercent(col, this._componentW);
230
233
  if (percentage === null) {
231
234
  return 'auto';
232
235
  }
@@ -269,7 +272,8 @@ let VscodeTable = class VscodeTable extends VscElement {
269
272
  });
270
273
  }
271
274
  _initDefaultColumnSizes() {
272
- const colWidths = this._calcColWidthPercentages();
275
+ const colWidths = this._calculateInitialColumnWidths();
276
+ this._columnResizeController.setColumWidths(colWidths.map((c) => percent(c)));
273
277
  this._initHeaderCellSizes(colWidths);
274
278
  this._initBodyColumnSizes(colWidths);
275
279
  this._initSashes(colWidths);
@@ -319,6 +323,19 @@ let VscodeTable = class VscodeTable extends VscElement {
319
323
  }
320
324
  }
321
325
  }
326
+ _stopDrag(event) {
327
+ const activeSplitter = this._columnResizeController.getActiveSplitter();
328
+ if (activeSplitter) {
329
+ activeSplitter.removeEventListener('pointermove', this._handleSplitterPointerMove);
330
+ activeSplitter.removeEventListener('pointerup', this._handleSplitterPointerUp);
331
+ activeSplitter.removeEventListener('pointercancel', this._handleSplitterPointerCancel);
332
+ }
333
+ this._columnResizeController.stopDrag(event);
334
+ this._resizeColumns(true);
335
+ this._sashHovers[this._activeSashElementIndex] = false;
336
+ this._isDragging = false;
337
+ this._activeSashElementIndex = -1;
338
+ }
322
339
  _onDefaultSlotChange() {
323
340
  this._assignedElements.forEach((el) => {
324
341
  if (el.tagName.toLowerCase() === 'vscode-table-header') {
@@ -365,79 +382,29 @@ let VscodeTable = class VscodeTable extends VscElement {
365
382
  this._sashHovers[index] = false;
366
383
  this.requestUpdate();
367
384
  }
368
- _onSashMouseDown(event) {
369
- event.stopPropagation();
370
- const { pageX, currentTarget } = event;
371
- const el = currentTarget;
372
- const index = Number(el.dataset.index);
373
- const cr = el.getBoundingClientRect();
374
- const elX = cr.x;
375
- this._isDragging = true;
376
- this._activeSashElementIndex = index;
377
- this._sashHovers[this._activeSashElementIndex] = true;
378
- this._activeSashCursorOffset = this._px2Percent(pageX - elX);
385
+ _resizeColumns(resizeBodyCells = true) {
386
+ const widths = this._columnResizeController.columnWidths;
379
387
  const headerCells = this._getHeaderCells();
380
- this._headerCellsToResize = [];
381
- this._headerCellsToResize.push(headerCells[index]);
382
- if (headerCells[index + 1]) {
383
- this._headerCellsToResize[1] = headerCells[index + 1];
388
+ headerCells.forEach((h, i) => (h.style.width = `${widths[i]}%`));
389
+ if (resizeBodyCells) {
390
+ const firstRowCells = this._getCellsOfFirstRow();
391
+ firstRowCells.forEach((c, i) => (c.style.width = `${widths[i]}%`));
384
392
  }
385
- const tbody = this._bodySlot.assignedElements()[0];
386
- const cells = tbody.querySelectorAll('vscode-table-row:first-child > vscode-table-cell');
387
- this._cellsToResize = [];
388
- this._cellsToResize.push(cells[index]);
389
- if (cells[index + 1]) {
390
- this._cellsToResize.push(cells[index + 1]);
391
- }
392
- document.addEventListener('mousemove', this._onResizingMouseMove);
393
- document.addEventListener('mouseup', this._onResizingMouseUp);
394
- }
395
- _updateActiveSashPosition(mouseX) {
396
- const { prevSashPos, nextSashPos } = this._getSashPositions();
397
- let minColumnWidth = rawValueToPercentage(this.minColumnWidth, this._componentW);
398
- if (minColumnWidth === null) {
399
- minColumnWidth = 0;
400
- }
401
- const minX = prevSashPos ? prevSashPos + minColumnWidth : minColumnWidth;
402
- const maxX = nextSashPos
403
- ? nextSashPos - minColumnWidth
404
- : COMPONENT_WIDTH_PERCENTAGE - minColumnWidth;
405
- let newX = this._px2Percent(mouseX - this._componentX - this._percent2Px(this._activeSashCursorOffset));
406
- newX = Math.max(newX, minX);
407
- newX = Math.min(newX, maxX);
408
- this._sashPositions[this._activeSashElementIndex] = newX;
409
- this.requestUpdate();
410
- }
411
- _getSashPositions() {
412
- const sashPos = this._sashPositions[this._activeSashElementIndex];
413
- const prevSashPos = this._sashPositions[this._activeSashElementIndex - 1] || 0;
414
- const nextSashPos = this._sashPositions[this._activeSashElementIndex + 1] ||
415
- COMPONENT_WIDTH_PERCENTAGE;
416
- return {
417
- sashPos,
418
- prevSashPos,
419
- nextSashPos,
420
- };
421
393
  }
422
- _resizeColumns(resizeBodyCells = true) {
423
- const { sashPos, prevSashPos, nextSashPos } = this._getSashPositions();
424
- const prevColW = sashPos - prevSashPos;
425
- const nextColW = nextSashPos - sashPos;
426
- const prevColCss = `${prevColW}%`;
427
- const nextColCss = `${nextColW}%`;
428
- this._headerCellsToResize[0].style.width = prevColCss;
429
- if (this._headerCellsToResize[1]) {
430
- this._headerCellsToResize[1].style.width = nextColCss;
431
- }
432
- if (resizeBodyCells && this._cellsToResize[0]) {
433
- this._cellsToResize[0].style.width = prevColCss;
434
- if (this._cellsToResize[1]) {
435
- this._cellsToResize[1].style.width = nextColCss;
436
- }
437
- }
394
+ _handleSplitterPointerDown(event) {
395
+ event.stopPropagation();
396
+ const activeSplitter = event.currentTarget;
397
+ this._columnResizeController
398
+ .saveHostDimensions()
399
+ .setActiveSplitter(activeSplitter)
400
+ .startDrag(event);
401
+ activeSplitter.addEventListener('pointermove', this._handleSplitterPointerMove);
402
+ activeSplitter.addEventListener('pointerup', this._handleSplitterPointerUp);
403
+ activeSplitter.addEventListener('pointercancel', this._handleSplitterPointerCancel);
438
404
  }
439
405
  render() {
440
- const sashes = this._sashPositions.map((val, index) => {
406
+ const splitterPositions = this._columnResizeController.splitterPositions;
407
+ const sashes = splitterPositions.map((val, index) => {
441
408
  const classes = classMap({
442
409
  sash: true,
443
410
  hover: this._sashHovers[index],
@@ -450,7 +417,7 @@ let VscodeTable = class VscodeTable extends VscElement {
450
417
  class=${classes}
451
418
  data-index=${index}
452
419
  .style=${stylePropertyMap({ left })}
453
- @mousedown=${this._onSashMouseDown}
420
+ @pointerdown=${this._handleSplitterPointerDown}
454
421
  @mouseover=${this._onSashMouseOver}
455
422
  @mouseout=${this._onSashMouseOut}
456
423
  >
@@ -468,8 +435,8 @@ let VscodeTable = class VscodeTable extends VscElement {
468
435
  });
469
436
  const wrapperClasses = classMap({
470
437
  wrapper: true,
471
- 'select-disabled': this._isDragging,
472
- 'resize-cursor': this._isDragging,
438
+ 'select-disabled': this._columnResizeController.isDragging,
439
+ 'resize-cursor': this._columnResizeController.isDragging,
473
440
  'compact-view': this.compact,
474
441
  });
475
442
  return html `
@@ -531,9 +498,6 @@ __decorate([
531
498
  __decorate([
532
499
  property({ type: Boolean, reflect: true, attribute: 'zebra-odd' })
533
500
  ], VscodeTable.prototype, "zebraOdd", void 0);
534
- __decorate([
535
- query('slot[name="body"]')
536
- ], VscodeTable.prototype, "_bodySlot", void 0);
537
501
  __decorate([
538
502
  query('.header')
539
503
  ], VscodeTable.prototype, "_headerElement", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-table.js","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, TemplateResult} from 'lit';\nimport {\n property,\n query,\n queryAll,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement, VscElement} from '../includes/VscElement.js';\nimport {stylePropertyMap} from '../includes/style-property-map.js';\nimport '../vscode-scrollable/index.js';\nimport {VscodeScrollable} from '../vscode-scrollable/index.js';\nimport {VscodeTableBody} from '../vscode-table-body/index.js';\nimport {VscodeTableCell} from '../vscode-table-cell/index.js';\nimport {VscodeTableHeader} from '../vscode-table-header/index.js';\nimport {VscodeTableHeaderCell} from '../vscode-table-header-cell/index.js';\nimport {rawValueToPercentage} from './helpers.js';\nimport styles from './vscode-table.styles.js';\n\nconst COMPONENT_WIDTH_PERCENTAGE = 100;\n\n/**\n * @tag vscode-table\n *\n * @cssprop [--vscode-editorGroup-border=rgba(255, 255, 255, 0.09)]\n * @cssprop [--vscode-keybindingTable-rowsBackground=rgba(204, 204, 204, 0.04)]\n * @cssprop [--vscode-sash-hoverBorder=#0078d4]\n */\n@customElement('vscode-table')\nexport class VscodeTable extends VscElement {\n static override styles = styles;\n\n /** @internal */\n @property({reflect: true})\n override role = 'table';\n\n @property({type: Boolean, reflect: true})\n resizable = false;\n\n @property({type: Boolean, reflect: true})\n responsive = false;\n\n /**\n * Both rows and columns are separated by borders.\n */\n @property({type: Boolean, reflect: true})\n bordered = false;\n\n /**\n * Columns are separated by borders.\n */\n @property({type: Boolean, reflect: true, attribute: 'bordered-columns'})\n borderedColumns = false;\n\n /**\n * Rows are separated by borders.\n */\n @property({type: Boolean, reflect: true, attribute: 'bordered-rows'})\n borderedRows = false;\n\n @property({type: Number})\n breakpoint = 300;\n\n /**\n * Initial column sizes in a JSON-encoded array.\n * Accepted values are:\n * - number\n * - string-type number (ex.: \"100\")\n * - px value (ex.: \"100px\")\n * - percentage value (ex.: \"50%\")\n * - percentage value (ex.: \"50%\")\n * - \"auto\" keyword\n */\n @property({type: Array})\n set columns(val: string[]) {\n this._columns = val;\n\n if (this.isConnected) {\n this._initDefaultColumnSizes();\n }\n }\n get columns(): string[] {\n return this._columns;\n }\n\n /**\n * Minimum column width. Valid values are:\n * - number\n * - string-type number (ex.: \"100\")\n * - px value (ex.: \"100px\")\n * - percentage value (ex.: \"50%\")\n * - percentage value (ex.: \"50%\")\n * - \"auto\" keyword\n */\n @property({attribute: 'min-column-width'})\n minColumnWidth = '50px';\n\n @property({type: Boolean, reflect: true, attribute: 'delayed-resizing'})\n delayedResizing = false;\n\n /**\n * @internal\n */\n @property({type: Boolean, reflect: true})\n compact = false;\n\n /**\n * Zebra stripes, even rows are tinted.\n */\n @property({type: Boolean, reflect: true})\n zebra = false;\n\n /**\n * Zebra stripes, odd rows are tinted.\n */\n @property({type: Boolean, reflect: true, attribute: 'zebra-odd'})\n zebraOdd = false;\n\n @query('slot[name=\"body\"]')\n private _bodySlot!: HTMLSlotElement;\n\n @query('.header')\n private _headerElement!: HTMLDivElement;\n\n @query('.scrollable')\n private _scrollableElement!: VscodeScrollable;\n\n @queryAll('.sash-visible')\n private _sashVisibleElements!: HTMLDivElement[];\n\n @queryAssignedElements({\n flatten: true,\n selector: 'vscode-table-header, vscode-table-body',\n })\n private _assignedElements!: NodeListOf<HTMLElement>;\n\n @queryAssignedElements({\n slot: 'header',\n flatten: true,\n selector: 'vscode-table-header',\n })\n private _assignedHeaderElements!: NodeListOf<VscodeTableHeader>;\n\n @queryAssignedElements({\n slot: 'body',\n flatten: true,\n selector: 'vscode-table-body',\n })\n private _assignedBodyElements!: NodeListOf<VscodeTableBody>;\n\n /**\n * Sash positions in percentage\n */\n @state()\n private _sashPositions: number[] = [];\n\n @state()\n private _isDragging = false;\n\n /**\n * Sash hover state flags, used in the render.\n */\n private _sashHovers: boolean[] = [];\n private _columns: string[] = [];\n private _componentResizeObserver?: ResizeObserver;\n private _headerResizeObserver?: ResizeObserver;\n private _bodyResizeObserver?: ResizeObserver;\n private _activeSashElementIndex = -1;\n private _activeSashCursorOffset = 0;\n private _componentX = 0;\n private _componentH = 0;\n private _componentW = 0;\n /**\n * Cached querySelectorAll result. Updated when the header slot changes.\n * It shouldn't be used directly, check the \"_getHeaderCells\" function.\n */\n private _headerCells: VscodeTableHeaderCell[] = [];\n /**\n * Cached querySelectorAll result. Updated when the body slot changes.\n * It shouldn't be used directly, check the \"_getCellsOfFirstRow\" function.\n */\n private _cellsOfFirstRow: VscodeTableCell[] = [];\n private _cellsToResize!: VscodeTableCell[];\n private _headerCellsToResize!: VscodeTableHeaderCell[];\n private _prevHeaderHeight = 0;\n private _prevComponentHeight = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this._memoizeComponentDimensions();\n this._initDefaultColumnSizes();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._componentResizeObserver?.unobserve(this);\n this._componentResizeObserver?.disconnect();\n this._bodyResizeObserver?.disconnect();\n }\n\n private _px2Percent(px: number) {\n return (px / this._componentW) * 100;\n }\n\n private _percent2Px(percent: number) {\n return (this._componentW * percent) / 100;\n }\n\n private _memoizeComponentDimensions() {\n const cr = this.getBoundingClientRect();\n\n this._componentH = cr.height;\n this._componentW = cr.width;\n this._componentX = cr.x;\n }\n\n private _queryHeaderCells() {\n const headers = this._assignedHeaderElements;\n\n if (!(headers && headers[0])) {\n return [];\n }\n\n return Array.from(\n headers[0].querySelectorAll<VscodeTableHeaderCell>(\n 'vscode-table-header-cell'\n )\n );\n }\n\n /**\n * Get cached header cells\n */\n private _getHeaderCells() {\n if (!this._headerCells.length) {\n this._headerCells = this._queryHeaderCells();\n }\n\n return this._headerCells;\n }\n\n private _queryCellsOfFirstRow() {\n const assignedBodyElements = this._assignedBodyElements;\n\n if (!(assignedBodyElements && assignedBodyElements[0])) {\n return [];\n }\n\n return Array.from(\n assignedBodyElements[0].querySelectorAll<VscodeTableCell>(\n 'vscode-table-row:first-child vscode-table-cell'\n )\n );\n }\n\n /**\n * Get cached cells of first row\n */\n private _getCellsOfFirstRow() {\n if (!this._cellsOfFirstRow.length) {\n this._cellsOfFirstRow = this._queryCellsOfFirstRow();\n }\n\n return this._cellsOfFirstRow;\n }\n\n private _resizeTableBody() {\n let headerHeight = 0;\n let tbodyHeight = 0;\n const tableHeight = this.getBoundingClientRect().height;\n\n if (this._assignedHeaderElements && this._assignedHeaderElements.length) {\n headerHeight =\n this._assignedHeaderElements[0].getBoundingClientRect().height;\n }\n\n if (this._assignedBodyElements && this._assignedBodyElements.length) {\n tbodyHeight =\n this._assignedBodyElements[0].getBoundingClientRect().height;\n }\n\n const overflownContentHeight = tbodyHeight - headerHeight - tableHeight;\n\n this._scrollableElement.style.height =\n overflownContentHeight > 0 ? `${tableHeight - headerHeight}px` : 'auto';\n }\n\n private _initResizeObserver() {\n this._componentResizeObserver = new ResizeObserver(\n this._componentResizeObserverCallback\n );\n this._componentResizeObserver.observe(this);\n\n this._headerResizeObserver = new ResizeObserver(\n this._headerResizeObserverCallback\n );\n this._headerResizeObserver.observe(this._headerElement);\n }\n\n private _componentResizeObserverCallback = () => {\n this._memoizeComponentDimensions();\n this._updateResizeHandlersSize();\n\n if (this.responsive) {\n this._toggleCompactView();\n }\n\n this._resizeTableBody();\n };\n\n private _headerResizeObserverCallback = () => {\n this._updateResizeHandlersSize();\n };\n\n private _bodyResizeObserverCallback = () => {\n this._resizeTableBody();\n };\n\n private _calcColWidthPercentages(): number[] {\n const numCols = this._getHeaderCells().length;\n let cols: (string | number)[] = this.columns.slice(0, numCols);\n const numAutoCols =\n cols.filter((c) => c === 'auto').length + numCols - cols.length;\n let availablePercent = 100;\n\n cols = cols.map((col) => {\n const percentage = rawValueToPercentage(col, this._componentW);\n\n if (percentage === null) {\n return 'auto';\n }\n\n availablePercent -= percentage;\n\n return percentage;\n });\n\n if (cols.length < numCols) {\n for (let i = cols.length; i < numCols; i++) {\n cols.push('auto');\n }\n }\n\n cols = cols.map((col) => {\n if (col === 'auto') {\n return availablePercent / numAutoCols;\n }\n\n return col as number;\n });\n\n return cols as number[];\n }\n\n private _initHeaderCellSizes(colWidths: number[]) {\n this._getHeaderCells().forEach((cell, index) => {\n cell.style.width = `${colWidths[index]}%`;\n });\n }\n\n private _initBodyColumnSizes(colWidths: number[]) {\n this._getCellsOfFirstRow().forEach((cell, index) => {\n cell.style.width = `${colWidths[index]}%`;\n });\n }\n\n private _initSashes(colWidths: number[]) {\n const l = colWidths.length;\n let prevHandlerPos = 0;\n this._sashPositions = [];\n\n colWidths.forEach((collW, index) => {\n if (index < l - 1) {\n const pos = prevHandlerPos + collW;\n\n this._sashPositions.push(pos);\n prevHandlerPos = pos;\n }\n });\n }\n\n private _initDefaultColumnSizes() {\n const colWidths = this._calcColWidthPercentages();\n\n this._initHeaderCellSizes(colWidths);\n this._initBodyColumnSizes(colWidths);\n this._initSashes(colWidths);\n }\n\n private _updateResizeHandlersSize() {\n const headerCr = this._headerElement.getBoundingClientRect();\n\n if (\n headerCr.height === this._prevHeaderHeight &&\n this._componentH === this._prevComponentHeight\n ) {\n return;\n }\n\n this._prevHeaderHeight = headerCr.height;\n this._prevComponentHeight = this._componentH;\n\n const bodyHeight = this._componentH - headerCr.height;\n\n this._sashVisibleElements.forEach((el) => {\n el.style.height = `${bodyHeight}px`;\n el.style.top = `${headerCr.height}px`;\n });\n }\n\n private _applyCompactViewColumnLabels() {\n const headerCells = this._getHeaderCells();\n const labels = headerCells.map((c) => c.innerText);\n const rows = this.querySelectorAll('vscode-table-row');\n\n rows.forEach((r) => {\n const cells = r.querySelectorAll('vscode-table-cell');\n\n cells.forEach((c, i) => {\n c.columnLabel = labels[i];\n c.compact = true;\n });\n });\n }\n\n private _clearCompactViewColumnLabels() {\n this.querySelectorAll('vscode-table-cell').forEach((c) => {\n c.columnLabel = '';\n c.compact = false;\n });\n }\n\n private _toggleCompactView() {\n const cr = this.getBoundingClientRect();\n const nextCompactView = cr.width < this.breakpoint;\n\n if (this.compact !== nextCompactView) {\n this.compact = nextCompactView;\n\n if (nextCompactView) {\n this._applyCompactViewColumnLabels();\n } else {\n this._clearCompactViewColumnLabels();\n }\n }\n }\n\n private _onDefaultSlotChange() {\n this._assignedElements.forEach((el) => {\n if (el.tagName.toLowerCase() === 'vscode-table-header') {\n el.slot = 'header';\n return;\n }\n\n if (el.tagName.toLowerCase() === 'vscode-table-body') {\n el.slot = 'body';\n return;\n }\n });\n }\n\n private _onHeaderSlotChange() {\n this._headerCells = this._queryHeaderCells();\n }\n\n private _onBodySlotChange() {\n this._initDefaultColumnSizes();\n this._initResizeObserver();\n this._updateResizeHandlersSize();\n\n if (!this._bodyResizeObserver) {\n const tbody = this._assignedBodyElements[0] ?? null;\n\n if (tbody) {\n this._bodyResizeObserver = new ResizeObserver(\n this._bodyResizeObserverCallback\n );\n this._bodyResizeObserver.observe(tbody);\n }\n }\n }\n\n private _onSashMouseOver(event: MouseEvent) {\n if (this._isDragging) {\n return;\n }\n\n const target = event.currentTarget as HTMLDivElement;\n const index = Number(target.dataset.index);\n this._sashHovers[index] = true;\n this.requestUpdate();\n }\n\n private _onSashMouseOut(event: MouseEvent) {\n event.stopPropagation();\n\n if (this._isDragging) {\n return;\n }\n\n const target = event.currentTarget as HTMLDivElement;\n const index = Number(target.dataset.index);\n this._sashHovers[index] = false;\n this.requestUpdate();\n }\n\n private _onSashMouseDown(event: MouseEvent) {\n event.stopPropagation();\n\n const {pageX, currentTarget} = event;\n const el = currentTarget as HTMLDivElement;\n const index = Number(el.dataset.index);\n const cr = el.getBoundingClientRect();\n const elX = cr.x;\n\n this._isDragging = true;\n this._activeSashElementIndex = index;\n this._sashHovers[this._activeSashElementIndex] = true;\n this._activeSashCursorOffset = this._px2Percent(pageX - elX);\n\n const headerCells = this._getHeaderCells();\n this._headerCellsToResize = [];\n this._headerCellsToResize.push(headerCells[index]);\n\n if (headerCells[index + 1]) {\n this._headerCellsToResize[1] = headerCells[index + 1];\n }\n\n const tbody = this._bodySlot.assignedElements()[0];\n const cells = tbody.querySelectorAll<VscodeTableCell>(\n 'vscode-table-row:first-child > vscode-table-cell'\n );\n this._cellsToResize = [];\n this._cellsToResize.push(cells[index]);\n\n if (cells[index + 1]) {\n this._cellsToResize.push(cells[index + 1]);\n }\n\n document.addEventListener('mousemove', this._onResizingMouseMove);\n document.addEventListener('mouseup', this._onResizingMouseUp);\n }\n\n private _updateActiveSashPosition(mouseX: number) {\n const {prevSashPos, nextSashPos} = this._getSashPositions();\n let minColumnWidth = rawValueToPercentage(\n this.minColumnWidth,\n this._componentW\n );\n\n if (minColumnWidth === null) {\n minColumnWidth = 0;\n }\n\n const minX = prevSashPos ? prevSashPos + minColumnWidth : minColumnWidth;\n const maxX = nextSashPos\n ? nextSashPos - minColumnWidth\n : COMPONENT_WIDTH_PERCENTAGE - minColumnWidth;\n let newX = this._px2Percent(\n mouseX - this._componentX - this._percent2Px(this._activeSashCursorOffset)\n );\n\n newX = Math.max(newX, minX);\n newX = Math.min(newX, maxX);\n\n this._sashPositions[this._activeSashElementIndex] = newX;\n this.requestUpdate();\n }\n\n private _getSashPositions(): {\n sashPos: number;\n prevSashPos: number;\n nextSashPos: number;\n } {\n const sashPos = this._sashPositions[this._activeSashElementIndex];\n const prevSashPos =\n this._sashPositions[this._activeSashElementIndex - 1] || 0;\n const nextSashPos =\n this._sashPositions[this._activeSashElementIndex + 1] ||\n COMPONENT_WIDTH_PERCENTAGE;\n\n return {\n sashPos,\n prevSashPos,\n nextSashPos,\n };\n }\n\n private _resizeColumns(resizeBodyCells = true) {\n const {sashPos, prevSashPos, nextSashPos} = this._getSashPositions();\n\n const prevColW = sashPos - prevSashPos;\n const nextColW = nextSashPos - sashPos;\n const prevColCss = `${prevColW}%`;\n const nextColCss = `${nextColW}%`;\n\n this._headerCellsToResize[0].style.width = prevColCss;\n\n if (this._headerCellsToResize[1]) {\n this._headerCellsToResize[1].style.width = nextColCss;\n }\n\n if (resizeBodyCells && this._cellsToResize[0]) {\n this._cellsToResize[0].style.width = prevColCss;\n\n if (this._cellsToResize[1]) {\n this._cellsToResize[1].style.width = nextColCss;\n }\n }\n }\n\n private _onResizingMouseMove = (event: MouseEvent) => {\n event.stopPropagation();\n this._updateActiveSashPosition(event.pageX);\n\n if (!this.delayedResizing) {\n this._resizeColumns(true);\n } else {\n this._resizeColumns(false);\n }\n };\n\n private _onResizingMouseUp = (event: MouseEvent) => {\n this._resizeColumns(true);\n this._updateActiveSashPosition(event.pageX);\n this._sashHovers[this._activeSashElementIndex] = false;\n this._isDragging = false;\n this._activeSashElementIndex = -1;\n\n document.removeEventListener('mousemove', this._onResizingMouseMove);\n document.removeEventListener('mouseup', this._onResizingMouseUp);\n };\n\n override render(): TemplateResult {\n const sashes = this._sashPositions.map((val, index) => {\n const classes = classMap({\n sash: true,\n hover: this._sashHovers[index],\n resizable: this.resizable,\n });\n\n const left = `${val}%`;\n\n return this.resizable\n ? html`\n <div\n class=${classes}\n data-index=${index}\n .style=${stylePropertyMap({left})}\n @mousedown=${this._onSashMouseDown}\n @mouseover=${this._onSashMouseOver}\n @mouseout=${this._onSashMouseOut}\n >\n <div class=\"sash-visible\"></div>\n <div class=\"sash-clickable\"></div>\n </div>\n `\n : html`<div\n class=${classes}\n data-index=${index}\n .style=${stylePropertyMap({left})}\n >\n <div class=\"sash-visible\"></div>\n </div>`;\n });\n\n const wrapperClasses = classMap({\n wrapper: true,\n 'select-disabled': this._isDragging,\n 'resize-cursor': this._isDragging,\n 'compact-view': this.compact,\n });\n\n return html`\n <div class=${wrapperClasses}>\n <div class=\"header\">\n <slot name=\"caption\"></slot>\n <div class=\"header-slot-wrapper\">\n <slot name=\"header\" @slotchange=${this._onHeaderSlotChange}></slot>\n </div>\n </div>\n <vscode-scrollable class=\"scrollable\">\n <div>\n <slot name=\"body\" @slotchange=${this._onBodySlotChange}></slot>\n </div>\n </vscode-scrollable>\n ${sashes}\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-table': VscodeTable;\n }\n}\n"]}
1
+ {"version":3,"file":"vscode-table.js","sourceRoot":"","sources":["../../src/vscode-table/vscode-table.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, PropertyValues, TemplateResult} from 'lit';\nimport {\n property,\n query,\n queryAll,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement, VscElement} from '../includes/VscElement.js';\nimport {stylePropertyMap} from '../includes/style-property-map.js';\nimport '../vscode-scrollable/index.js';\nimport {VscodeScrollable} from '../vscode-scrollable/index.js';\nimport {VscodeTableBody} from '../vscode-table-body/index.js';\nimport {VscodeTableCell} from '../vscode-table-cell/index.js';\nimport {VscodeTableHeader} from '../vscode-table-header/index.js';\nimport {VscodeTableHeaderCell} from '../vscode-table-header-cell/index.js';\nimport {parseSizeAttributeToPercent} from './calculations.js';\nimport styles from './vscode-table.styles.js';\nimport {ColumnResizeController} from './ColumnResizeController.js';\nimport {percent} from './calculations.js';\n\n/**\n * @tag vscode-table\n *\n * @cssprop [--vscode-editorGroup-border=rgba(255, 255, 255, 0.09)]\n * @cssprop [--vscode-keybindingTable-rowsBackground=rgba(204, 204, 204, 0.04)]\n * @cssprop [--vscode-sash-hoverBorder=#0078d4]\n */\n@customElement('vscode-table')\nexport class VscodeTable extends VscElement {\n static override styles = styles;\n\n /** @internal */\n @property({reflect: true})\n override role = 'table';\n\n @property({type: Boolean, reflect: true})\n resizable = false;\n\n @property({type: Boolean, reflect: true})\n responsive = false;\n\n /**\n * Both rows and columns are separated by borders.\n */\n @property({type: Boolean, reflect: true})\n bordered = false;\n\n /**\n * Columns are separated by borders.\n */\n @property({type: Boolean, reflect: true, attribute: 'bordered-columns'})\n borderedColumns = false;\n\n /**\n * Rows are separated by borders.\n */\n @property({type: Boolean, reflect: true, attribute: 'bordered-rows'})\n borderedRows = false;\n\n @property({type: Number})\n breakpoint = 300;\n\n /**\n * Initial column sizes in a JSON-encoded array.\n * Accepted values are:\n * - number\n * - string-type number (ex.: \"100\")\n * - px value (ex.: \"100px\")\n * - percentage value (ex.: \"50%\")\n * - percentage value (ex.: \"50%\")\n * - \"auto\" keyword\n */\n @property({type: Array})\n set columns(val: string[]) {\n if (!Array.isArray(val)) {\n this.warn('Invalid value for \"columns\": expected an array.');\n this._columns = [];\n\n return;\n }\n\n this._columns = val;\n\n if (this.isConnected) {\n this._initDefaultColumnSizes();\n }\n }\n get columns(): string[] {\n return this._columns;\n }\n\n /**\n * Minimum column width. Valid values are:\n * - number\n * - string-type number (ex.: \"100\")\n * - px value (ex.: \"100px\")\n * - percentage value (ex.: \"50%\")\n * - percentage value (ex.: \"50%\")\n * - \"auto\" keyword\n */\n @property({attribute: 'min-column-width'})\n minColumnWidth = '50px';\n\n @property({type: Boolean, reflect: true, attribute: 'delayed-resizing'})\n delayedResizing = false;\n\n /**\n * @internal\n */\n @property({type: Boolean, reflect: true})\n compact = false;\n\n /**\n * Zebra stripes, even rows are tinted.\n */\n @property({type: Boolean, reflect: true})\n zebra = false;\n\n /**\n * Zebra stripes, odd rows are tinted.\n */\n @property({type: Boolean, reflect: true, attribute: 'zebra-odd'})\n zebraOdd = false;\n\n @query('.header')\n private _headerElement!: HTMLDivElement;\n\n @query('.scrollable')\n private _scrollableElement!: VscodeScrollable;\n\n @queryAll('.sash-visible')\n private _sashVisibleElements!: HTMLDivElement[];\n\n @queryAssignedElements({\n flatten: true,\n selector: 'vscode-table-header, vscode-table-body',\n })\n private _assignedElements!: NodeListOf<HTMLElement>;\n\n @queryAssignedElements({\n slot: 'header',\n flatten: true,\n selector: 'vscode-table-header',\n })\n private _assignedHeaderElements!: NodeListOf<VscodeTableHeader>;\n\n @queryAssignedElements({\n slot: 'body',\n flatten: true,\n selector: 'vscode-table-body',\n })\n private _assignedBodyElements!: NodeListOf<VscodeTableBody>;\n\n /**\n * Sash positions in percentage\n */\n @state()\n private _sashPositions: number[] = [];\n\n @state()\n private _isDragging = false;\n\n /**\n * Sash hover state flags, used in the render.\n */\n private _sashHovers: boolean[] = [];\n private _columns: string[] = [];\n private _componentResizeObserver?: ResizeObserver;\n private _headerResizeObserver?: ResizeObserver;\n private _bodyResizeObserver?: ResizeObserver;\n private _activeSashElementIndex = -1;\n private _componentH = 0;\n private _componentW = 0;\n /**\n * Cached querySelectorAll result. Updated when the header slot changes.\n * It shouldn't be used directly, check the \"_getHeaderCells\" function.\n */\n private _headerCells: VscodeTableHeaderCell[] = [];\n /**\n * Cached querySelectorAll result. Updated when the body slot changes.\n * It shouldn't be used directly, check the \"_getCellsOfFirstRow\" function.\n */\n private _cellsOfFirstRow: VscodeTableCell[] = [];\n private _prevHeaderHeight = 0;\n private _prevComponentHeight = 0;\n\n private _columnResizeController = new ColumnResizeController(this);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this._memoizeComponentDimensions();\n this._initDefaultColumnSizes();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._componentResizeObserver?.unobserve(this);\n this._componentResizeObserver?.disconnect();\n this._bodyResizeObserver?.disconnect();\n }\n\n protected override willUpdate(changedProperties: PropertyValues): void {\n if (changedProperties.has('minColumnWidth')) {\n const value = percent(\n parseSizeAttributeToPercent(this.minColumnWidth, this._componentW) ?? 0\n );\n this._columnResizeController.setMinColumnWidth(value);\n }\n }\n\n private _memoizeComponentDimensions() {\n const cr = this.getBoundingClientRect();\n\n this._componentH = cr.height;\n this._componentW = cr.width;\n }\n\n private _queryHeaderCells() {\n const headers = this._assignedHeaderElements;\n\n if (!(headers && headers[0])) {\n return [];\n }\n\n return Array.from(\n headers[0].querySelectorAll<VscodeTableHeaderCell>(\n 'vscode-table-header-cell'\n )\n );\n }\n\n /**\n * Get cached header cells\n */\n private _getHeaderCells() {\n if (!this._headerCells.length) {\n this._headerCells = this._queryHeaderCells();\n }\n\n return this._headerCells;\n }\n\n private _queryCellsOfFirstRow() {\n const assignedBodyElements = this._assignedBodyElements;\n\n if (!(assignedBodyElements && assignedBodyElements[0])) {\n return [];\n }\n\n return Array.from(\n assignedBodyElements[0].querySelectorAll<VscodeTableCell>(\n 'vscode-table-row:first-child vscode-table-cell'\n )\n );\n }\n\n /**\n * Get cached cells of first row\n */\n private _getCellsOfFirstRow() {\n if (!this._cellsOfFirstRow.length) {\n this._cellsOfFirstRow = this._queryCellsOfFirstRow();\n }\n\n return this._cellsOfFirstRow;\n }\n\n private _resizeTableBody() {\n let headerHeight = 0;\n let tbodyHeight = 0;\n const tableHeight = this.getBoundingClientRect().height;\n\n if (this._assignedHeaderElements && this._assignedHeaderElements.length) {\n headerHeight =\n this._assignedHeaderElements[0].getBoundingClientRect().height;\n }\n\n if (this._assignedBodyElements && this._assignedBodyElements.length) {\n tbodyHeight =\n this._assignedBodyElements[0].getBoundingClientRect().height;\n }\n\n const overflownContentHeight = tbodyHeight - headerHeight - tableHeight;\n\n this._scrollableElement.style.height =\n overflownContentHeight > 0 ? `${tableHeight - headerHeight}px` : 'auto';\n }\n\n private _initResizeObserver() {\n this._componentResizeObserver = new ResizeObserver(\n this._componentResizeObserverCallback\n );\n this._componentResizeObserver.observe(this);\n\n this._headerResizeObserver = new ResizeObserver(\n this._headerResizeObserverCallback\n );\n this._headerResizeObserver.observe(this._headerElement);\n }\n\n private _componentResizeObserverCallback = () => {\n this._memoizeComponentDimensions();\n this._updateResizeHandlersSize();\n\n if (this.responsive) {\n this._toggleCompactView();\n }\n\n this._resizeTableBody();\n };\n\n private _headerResizeObserverCallback = () => {\n this._updateResizeHandlersSize();\n };\n\n private _bodyResizeObserverCallback = () => {\n this._resizeTableBody();\n };\n\n private _calculateInitialColumnWidths(): number[] {\n const numCols = this._getHeaderCells().length;\n let cols: (string | number)[] = this.columns.slice(0, numCols);\n const numAutoCols =\n cols.filter((c) => c === 'auto').length + numCols - cols.length;\n let availablePercent = 100;\n\n cols = cols.map((col) => {\n const percentage = parseSizeAttributeToPercent(col, this._componentW);\n\n if (percentage === null) {\n return 'auto';\n }\n\n availablePercent -= percentage;\n\n return percentage;\n });\n\n if (cols.length < numCols) {\n for (let i = cols.length; i < numCols; i++) {\n cols.push('auto');\n }\n }\n\n cols = cols.map((col) => {\n if (col === 'auto') {\n return availablePercent / numAutoCols;\n }\n\n return col as number;\n });\n\n return cols as number[];\n }\n\n private _initHeaderCellSizes(colWidths: number[]) {\n this._getHeaderCells().forEach((cell, index) => {\n cell.style.width = `${colWidths[index]}%`;\n });\n }\n\n private _initBodyColumnSizes(colWidths: number[]) {\n this._getCellsOfFirstRow().forEach((cell, index) => {\n cell.style.width = `${colWidths[index]}%`;\n });\n }\n\n private _initSashes(colWidths: number[]) {\n const l = colWidths.length;\n let prevHandlerPos = 0;\n this._sashPositions = [];\n\n colWidths.forEach((collW, index) => {\n if (index < l - 1) {\n const pos = prevHandlerPos + collW;\n\n this._sashPositions.push(pos);\n prevHandlerPos = pos;\n }\n });\n }\n\n private _initDefaultColumnSizes() {\n const colWidths = this._calculateInitialColumnWidths();\n this._columnResizeController.setColumWidths(\n colWidths.map((c) => percent(c))\n );\n\n this._initHeaderCellSizes(colWidths);\n this._initBodyColumnSizes(colWidths);\n this._initSashes(colWidths);\n }\n\n private _updateResizeHandlersSize() {\n const headerCr = this._headerElement.getBoundingClientRect();\n\n if (\n headerCr.height === this._prevHeaderHeight &&\n this._componentH === this._prevComponentHeight\n ) {\n return;\n }\n\n this._prevHeaderHeight = headerCr.height;\n this._prevComponentHeight = this._componentH;\n\n const bodyHeight = this._componentH - headerCr.height;\n\n this._sashVisibleElements.forEach((el) => {\n el.style.height = `${bodyHeight}px`;\n el.style.top = `${headerCr.height}px`;\n });\n }\n\n private _applyCompactViewColumnLabels() {\n const headerCells = this._getHeaderCells();\n const labels = headerCells.map((c) => c.innerText);\n const rows = this.querySelectorAll('vscode-table-row');\n\n rows.forEach((r) => {\n const cells = r.querySelectorAll('vscode-table-cell');\n\n cells.forEach((c, i) => {\n c.columnLabel = labels[i];\n c.compact = true;\n });\n });\n }\n\n private _clearCompactViewColumnLabels() {\n this.querySelectorAll('vscode-table-cell').forEach((c) => {\n c.columnLabel = '';\n c.compact = false;\n });\n }\n\n private _toggleCompactView() {\n const cr = this.getBoundingClientRect();\n const nextCompactView = cr.width < this.breakpoint;\n\n if (this.compact !== nextCompactView) {\n this.compact = nextCompactView;\n\n if (nextCompactView) {\n this._applyCompactViewColumnLabels();\n } else {\n this._clearCompactViewColumnLabels();\n }\n }\n }\n\n private _stopDrag(event: PointerEvent) {\n const activeSplitter = this._columnResizeController.getActiveSplitter();\n\n if (activeSplitter) {\n activeSplitter.removeEventListener(\n 'pointermove',\n this._handleSplitterPointerMove\n );\n activeSplitter.removeEventListener(\n 'pointerup',\n this._handleSplitterPointerUp\n );\n activeSplitter.removeEventListener(\n 'pointercancel',\n this._handleSplitterPointerCancel\n );\n }\n\n this._columnResizeController.stopDrag(event);\n this._resizeColumns(true);\n\n this._sashHovers[this._activeSashElementIndex] = false;\n this._isDragging = false;\n this._activeSashElementIndex = -1;\n }\n\n private _onDefaultSlotChange() {\n this._assignedElements.forEach((el) => {\n if (el.tagName.toLowerCase() === 'vscode-table-header') {\n el.slot = 'header';\n return;\n }\n\n if (el.tagName.toLowerCase() === 'vscode-table-body') {\n el.slot = 'body';\n return;\n }\n });\n }\n\n private _onHeaderSlotChange() {\n this._headerCells = this._queryHeaderCells();\n }\n\n private _onBodySlotChange() {\n this._initDefaultColumnSizes();\n this._initResizeObserver();\n this._updateResizeHandlersSize();\n\n if (!this._bodyResizeObserver) {\n const tbody = this._assignedBodyElements[0] ?? null;\n\n if (tbody) {\n this._bodyResizeObserver = new ResizeObserver(\n this._bodyResizeObserverCallback\n );\n this._bodyResizeObserver.observe(tbody);\n }\n }\n }\n\n private _onSashMouseOver(event: MouseEvent) {\n if (this._isDragging) {\n return;\n }\n\n const target = event.currentTarget as HTMLDivElement;\n const index = Number(target.dataset.index);\n this._sashHovers[index] = true;\n this.requestUpdate();\n }\n\n private _onSashMouseOut(event: MouseEvent) {\n event.stopPropagation();\n\n if (this._isDragging) {\n return;\n }\n\n const target = event.currentTarget as HTMLDivElement;\n const index = Number(target.dataset.index);\n this._sashHovers[index] = false;\n this.requestUpdate();\n }\n\n private _resizeColumns(resizeBodyCells = true) {\n const widths = this._columnResizeController.columnWidths;\n\n const headerCells = this._getHeaderCells();\n headerCells.forEach((h, i) => (h.style.width = `${widths[i]}%`));\n\n if (resizeBodyCells) {\n const firstRowCells = this._getCellsOfFirstRow();\n firstRowCells.forEach((c, i) => (c.style.width = `${widths[i]}%`));\n }\n }\n\n private _handleSplitterPointerDown(event: PointerEvent) {\n event.stopPropagation();\n\n const activeSplitter = event.currentTarget as HTMLElement;\n\n this._columnResizeController\n .saveHostDimensions()\n .setActiveSplitter(activeSplitter)\n .startDrag(event);\n\n activeSplitter.addEventListener(\n 'pointermove',\n this._handleSplitterPointerMove\n );\n activeSplitter.addEventListener('pointerup', this._handleSplitterPointerUp);\n activeSplitter.addEventListener(\n 'pointercancel',\n this._handleSplitterPointerCancel\n );\n }\n\n private _handleSplitterPointerMove = (event: PointerEvent) => {\n if (!this._columnResizeController.shouldDrag(event)) {\n return;\n }\n\n this._columnResizeController.drag(event);\n if (!this.delayedResizing) {\n this._resizeColumns(true);\n } else {\n this._resizeColumns(false);\n }\n };\n\n private _handleSplitterPointerUp = (event: PointerEvent) => {\n this._stopDrag(event);\n };\n\n private _handleSplitterPointerCancel = (event: PointerEvent) => {\n this._stopDrag(event);\n };\n\n override render(): TemplateResult {\n const splitterPositions = this._columnResizeController.splitterPositions;\n\n const sashes = splitterPositions.map((val, index) => {\n const classes = classMap({\n sash: true,\n hover: this._sashHovers[index],\n resizable: this.resizable,\n });\n\n const left = `${val}%`;\n\n return this.resizable\n ? html`\n <div\n class=${classes}\n data-index=${index}\n .style=${stylePropertyMap({left})}\n @pointerdown=${this._handleSplitterPointerDown}\n @mouseover=${this._onSashMouseOver}\n @mouseout=${this._onSashMouseOut}\n >\n <div class=\"sash-visible\"></div>\n <div class=\"sash-clickable\"></div>\n </div>\n `\n : html`<div\n class=${classes}\n data-index=${index}\n .style=${stylePropertyMap({left})}\n >\n <div class=\"sash-visible\"></div>\n </div>`;\n });\n\n const wrapperClasses = classMap({\n wrapper: true,\n 'select-disabled': this._columnResizeController.isDragging,\n 'resize-cursor': this._columnResizeController.isDragging,\n 'compact-view': this.compact,\n });\n\n return html`\n <div class=${wrapperClasses}>\n <div class=\"header\">\n <slot name=\"caption\"></slot>\n <div class=\"header-slot-wrapper\">\n <slot name=\"header\" @slotchange=${this._onHeaderSlotChange}></slot>\n </div>\n </div>\n <vscode-scrollable class=\"scrollable\">\n <div>\n <slot name=\"body\" @slotchange=${this._onBodySlotChange}></slot>\n </div>\n </vscode-scrollable>\n ${sashes}\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-table': VscodeTable;\n }\n}\n"]}