@deephaven/grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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.
- package/dist/CellInputField.js +41 -22
- package/dist/CellInputField.js.map +1 -1
- package/dist/CellRenderer.js +19 -27
- package/dist/CellRenderer.js.map +1 -1
- package/dist/DataBarCellRenderer.js +61 -87
- package/dist/DataBarCellRenderer.js.map +1 -1
- package/dist/Grid.js +281 -455
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.js +23 -21
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.js +192 -303
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridRange.js +18 -28
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +432 -604
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridUtils.d.ts +33 -16
- package/dist/GridUtils.d.ts.map +1 -1
- package/dist/GridUtils.js +183 -213
- package/dist/GridUtils.js.map +1 -1
- package/dist/MockGridModel.js +17 -10
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js +36 -31
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/TextCellRenderer.js +36 -57
- package/dist/TextCellRenderer.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +4 -7
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +1 -3
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +40 -71
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +4 -10
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js +3 -7
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +54 -82
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +4 -8
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +31 -55
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +26 -46
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +2 -4
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +14 -22
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +8 -16
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +47 -75
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +9 -23
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridTokenMouseHandler.js +24 -39
- package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +31 -55
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
8
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
9
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
@@ -11,13 +17,17 @@ import memoizeClear from "./memoizeClear.js";
|
|
|
11
17
|
*/
|
|
12
18
|
class MockTreeGridModel extends MockGridModel {
|
|
13
19
|
constructor() {
|
|
14
|
-
var {
|
|
15
|
-
rowCount =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
21
|
+
_ref$rowCount = _ref.rowCount,
|
|
22
|
+
rowCount = _ref$rowCount === void 0 ? MockTreeGridModel.DEFAULT_ROW_COUNT : _ref$rowCount,
|
|
23
|
+
_ref$columnCount = _ref.columnCount,
|
|
24
|
+
columnCount = _ref$columnCount === void 0 ? MockTreeGridModel.DEFAULT_COLUMN_COUNT : _ref$columnCount,
|
|
25
|
+
_ref$children = _ref.children,
|
|
26
|
+
_children = _ref$children === void 0 ? new Map() : _ref$children,
|
|
27
|
+
_ref$childRowCount = _ref.childRowCount,
|
|
28
|
+
_childRowCount = _ref$childRowCount === void 0 ? Math.ceil(Math.max(MockTreeGridModel.MIN_CHILD_ROW_COUNT, rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR)) : _ref$childRowCount,
|
|
29
|
+
_ref$maxDepth = _ref.maxDepth,
|
|
30
|
+
_maxDepth = _ref$maxDepth === void 0 ? MockTreeGridModel.MAX_DEPTH : _ref$maxDepth;
|
|
21
31
|
super({
|
|
22
32
|
rowCount,
|
|
23
33
|
columnCount
|
|
@@ -36,7 +46,9 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
36
46
|
// Need to iterate through the map in order... sort it first
|
|
37
47
|
var sortedEntries = [...children].sort((a, b) => a[0] - b[0]);
|
|
38
48
|
for (var i = 0; i < sortedEntries.length; i += 1) {
|
|
39
|
-
var
|
|
49
|
+
var _sortedEntries$i = _slicedToArray(sortedEntries[i], 2),
|
|
50
|
+
childRow = _sortedEntries$i[0],
|
|
51
|
+
childModel = _sortedEntries$i[1];
|
|
40
52
|
if (offsetRow <= childRow) {
|
|
41
53
|
break;
|
|
42
54
|
}
|
|
@@ -56,10 +68,9 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
56
68
|
max: 10000
|
|
57
69
|
}));
|
|
58
70
|
_defineProperty(this, "getCachedTextForRowHeader", memoizeClear((children, row) => {
|
|
59
|
-
var
|
|
60
|
-
key,
|
|
61
|
-
offsetRow
|
|
62
|
-
} = this.getCachedModelRowOffset(children, row);
|
|
71
|
+
var _this$getCachedModelR = this.getCachedModelRowOffset(children, row),
|
|
72
|
+
key = _this$getCachedModelR.key,
|
|
73
|
+
offsetRow = _this$getCachedModelR.offsetRow;
|
|
63
74
|
if (key != null) {
|
|
64
75
|
var model = children.get(key);
|
|
65
76
|
if (model !== undefined) {
|
|
@@ -71,10 +82,9 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
71
82
|
max: 10000
|
|
72
83
|
}));
|
|
73
84
|
_defineProperty(this, "getCachedTextForCell", memoizeClear((children, column, row) => {
|
|
74
|
-
var
|
|
75
|
-
key,
|
|
76
|
-
offsetRow
|
|
77
|
-
} = this.getCachedModelRowOffset(children, row);
|
|
85
|
+
var _this$getCachedModelR2 = this.getCachedModelRowOffset(children, row),
|
|
86
|
+
key = _this$getCachedModelR2.key,
|
|
87
|
+
offsetRow = _this$getCachedModelR2.offsetRow;
|
|
78
88
|
if (key != null) {
|
|
79
89
|
var model = children.get(key);
|
|
80
90
|
if (model !== undefined) {
|
|
@@ -92,10 +102,9 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
92
102
|
max: 10000
|
|
93
103
|
}));
|
|
94
104
|
_defineProperty(this, "getCachedIsRowExpanded", memoizeClear((children, row) => {
|
|
95
|
-
var
|
|
96
|
-
key,
|
|
97
|
-
offsetRow
|
|
98
|
-
} = this.getCachedModelRowOffset(children, row);
|
|
105
|
+
var _this$getCachedModelR3 = this.getCachedModelRowOffset(children, row),
|
|
106
|
+
key = _this$getCachedModelR3.key,
|
|
107
|
+
offsetRow = _this$getCachedModelR3.offsetRow;
|
|
99
108
|
if (key != null) {
|
|
100
109
|
var model = children.get(key);
|
|
101
110
|
if (model !== undefined) {
|
|
@@ -107,10 +116,9 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
107
116
|
max: 10000
|
|
108
117
|
}));
|
|
109
118
|
_defineProperty(this, "getCachedDepthForRow", memoizeClear((children, row) => {
|
|
110
|
-
var
|
|
111
|
-
key,
|
|
112
|
-
offsetRow
|
|
113
|
-
} = this.getCachedModelRowOffset(children, row);
|
|
119
|
+
var _this$getCachedModelR4 = this.getCachedModelRowOffset(children, row),
|
|
120
|
+
key = _this$getCachedModelR4.key,
|
|
121
|
+
offsetRow = _this$getCachedModelR4.offsetRow;
|
|
114
122
|
if (key != null) {
|
|
115
123
|
var model = children.get(key);
|
|
116
124
|
if (model !== undefined) {
|
|
@@ -151,19 +159,16 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
151
159
|
}
|
|
152
160
|
setRowExpanded(row, isExpanded) {
|
|
153
161
|
var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
154
|
-
var
|
|
155
|
-
key,
|
|
156
|
-
offsetRow
|
|
157
|
-
} = this.getCachedModelRowOffset(this.children, row);
|
|
162
|
+
var _this$getCachedModelR5 = this.getCachedModelRowOffset(this.children, row),
|
|
163
|
+
key = _this$getCachedModelR5.key,
|
|
164
|
+
offsetRow = _this$getCachedModelR5.offsetRow;
|
|
158
165
|
|
|
159
166
|
// We always set a new map so that our memoize functions work properly
|
|
160
167
|
var children = new Map(this.children);
|
|
161
168
|
if (key != null) {
|
|
162
169
|
var model = this.children.get(key);
|
|
163
170
|
if (model !== undefined) {
|
|
164
|
-
var
|
|
165
|
-
rowCount: originalChildRowCount
|
|
166
|
-
} = model;
|
|
171
|
+
var originalChildRowCount = model.rowCount;
|
|
167
172
|
model.setRowExpanded(offsetRow, isExpanded, expandDescendants);
|
|
168
173
|
this.numRows += model.rowCount - originalChildRowCount;
|
|
169
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","arguments","length","undefined","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","childRow","childModel","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport type ExpandableGridModel from './ExpandableGridModel';\nimport { type ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n },\n { max: 10000 }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n },\n { max: 10000 }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n },\n { max: 10000 }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","_ref","arguments","length","undefined","_ref$rowCount","rowCount","DEFAULT_ROW_COUNT","_ref$columnCount","columnCount","DEFAULT_COLUMN_COUNT","_ref$children","children","Map","_ref$childRowCount","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","_ref$maxDepth","maxDepth","MAX_DEPTH","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","_sortedEntries$i","_slicedToArray","childRow","childModel","_this$getCachedModelR","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","_this$getCachedModelR2","textForCell","depth","getCachedDepthForRow","_this$getCachedModelR3","isRowExpanded","has","_this$getCachedModelR4","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","_this$getCachedModelR5","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport type ExpandableGridModel from './ExpandableGridModel';\nimport { type ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n },\n { max: 10000 }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n },\n { max: 10000 }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n },\n { max: 10000 }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/TextCellRenderer.js
CHANGED
|
@@ -25,10 +25,8 @@ class TextCellRenderer extends CellRenderer {
|
|
|
25
25
|
// Loop through array and push them to array
|
|
26
26
|
for (var i = 0; i < tokens.length; i += 1) {
|
|
27
27
|
var token = tokens[i];
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
end
|
|
31
|
-
} = token;
|
|
28
|
+
var start = token.start,
|
|
29
|
+
end = token.end;
|
|
32
30
|
// The last token value is calculated based on the full text so the value needs to be truncated
|
|
33
31
|
var value = end > truncatedText.length ? truncatedText.substring(start) : token.value;
|
|
34
32
|
|
|
@@ -57,23 +55,17 @@ class TextCellRenderer extends CellRenderer {
|
|
|
57
55
|
}));
|
|
58
56
|
}
|
|
59
57
|
drawCellContent(context, state, column, row) {
|
|
60
|
-
var
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
modelRows,
|
|
70
|
-
allRowHeights,
|
|
71
|
-
firstColumn
|
|
72
|
-
} = metrics;
|
|
58
|
+
var metrics = state.metrics,
|
|
59
|
+
model = state.model,
|
|
60
|
+
theme = state.theme;
|
|
61
|
+
var fontWidthsLower = metrics.fontWidthsLower,
|
|
62
|
+
fontWidthsUpper = metrics.fontWidthsUpper,
|
|
63
|
+
modelColumns = metrics.modelColumns,
|
|
64
|
+
modelRows = metrics.modelRows,
|
|
65
|
+
allRowHeights = metrics.allRowHeights,
|
|
66
|
+
firstColumn = metrics.firstColumn;
|
|
73
67
|
var isFirstColumn = column === firstColumn;
|
|
74
|
-
var
|
|
75
|
-
textColor
|
|
76
|
-
} = theme;
|
|
68
|
+
var textColor = theme.textColor;
|
|
77
69
|
var rowHeight = getOrThrow(allRowHeights, row);
|
|
78
70
|
var modelRow = getOrThrow(modelRows, row);
|
|
79
71
|
var modelColumn = getOrThrow(modelColumns, column);
|
|
@@ -85,11 +77,10 @@ class TextCellRenderer extends CellRenderer {
|
|
|
85
77
|
var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;
|
|
86
78
|
context.fillStyle = color;
|
|
87
79
|
context.save();
|
|
88
|
-
var
|
|
89
|
-
width
|
|
90
|
-
x
|
|
91
|
-
y
|
|
92
|
-
} = GridUtils.getTextRenderMetrics(state, column, row);
|
|
80
|
+
var _GridUtils$getTextRen = GridUtils.getTextRenderMetrics(state, column, row),
|
|
81
|
+
textWidth = _GridUtils$getTextRen.width,
|
|
82
|
+
textX = _GridUtils$getTextRen.x,
|
|
83
|
+
textY = _GridUtils$getTextRen.y;
|
|
93
84
|
var fontWidthLower = fontWidthsLower.get(context.font);
|
|
94
85
|
var fontWidthUpper = fontWidthsUpper.get(context.font);
|
|
95
86
|
var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);
|
|
@@ -98,18 +89,16 @@ class TextCellRenderer extends CellRenderer {
|
|
|
98
89
|
var tokenIndex = 0;
|
|
99
90
|
var textStart = 0;
|
|
100
91
|
var left = textX;
|
|
101
|
-
var
|
|
102
|
-
actualBoundingBoxDescent
|
|
103
|
-
} = context.measureText(truncatedText);
|
|
92
|
+
var _context$measureText = context.measureText(truncatedText),
|
|
93
|
+
actualBoundingBoxDescent = _context$measureText.actualBoundingBoxDescent;
|
|
104
94
|
while (textStart < truncatedText.length) {
|
|
105
95
|
var _ref, _token$end;
|
|
106
96
|
var nextToken = tokens[tokenIndex];
|
|
107
97
|
var token = textStart === (nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) ? nextToken : null;
|
|
108
98
|
var textEnd = (_ref = (_token$end = token === null || token === void 0 ? void 0 : token.end) !== null && _token$end !== void 0 ? _token$end : nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) !== null && _ref !== void 0 ? _ref : truncatedText.length;
|
|
109
99
|
var value = truncatedText.substring(textStart, textEnd);
|
|
110
|
-
var
|
|
111
|
-
width
|
|
112
|
-
} = context.measureText(value);
|
|
100
|
+
var _context$measureText2 = context.measureText(value),
|
|
101
|
+
width = _context$measureText2.width;
|
|
113
102
|
var widthOfUnderline = value.endsWith('…') ? width - context.measureText('…').width : width;
|
|
114
103
|
|
|
115
104
|
// Set the styling based on the token, then draw the text
|
|
@@ -141,31 +130,24 @@ class TextCellRenderer extends CellRenderer {
|
|
|
141
130
|
* @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY
|
|
142
131
|
*/
|
|
143
132
|
getTokenBoxesForVisibleCell(column, row, state) {
|
|
144
|
-
var
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
theme
|
|
149
|
-
} = state;
|
|
133
|
+
var metrics = state.metrics,
|
|
134
|
+
context = state.context,
|
|
135
|
+
model = state.model,
|
|
136
|
+
theme = state.theme;
|
|
150
137
|
if (context == null || metrics == null) {
|
|
151
138
|
return EMPTY_ARRAY;
|
|
152
139
|
}
|
|
153
|
-
var
|
|
154
|
-
|
|
155
|
-
modelColumns
|
|
156
|
-
} = metrics;
|
|
140
|
+
var modelRows = metrics.modelRows,
|
|
141
|
+
modelColumns = metrics.modelColumns;
|
|
157
142
|
var modelRow = getOrThrow(modelRows, row);
|
|
158
143
|
var modelColumn = getOrThrow(modelColumns, column);
|
|
159
144
|
var text = model.textForCell(modelColumn, modelRow);
|
|
160
|
-
var
|
|
161
|
-
width
|
|
162
|
-
x
|
|
163
|
-
y
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
fontWidthsLower,
|
|
167
|
-
fontWidthsUpper
|
|
168
|
-
} = metrics;
|
|
145
|
+
var _GridUtils$getTextRen2 = GridUtils.getTextRenderMetrics(state, column, row),
|
|
146
|
+
textWidth = _GridUtils$getTextRen2.width,
|
|
147
|
+
textX = _GridUtils$getTextRen2.x,
|
|
148
|
+
textY = _GridUtils$getTextRen2.y;
|
|
149
|
+
var fontWidthsLower = metrics.fontWidthsLower,
|
|
150
|
+
fontWidthsUpper = metrics.fontWidthsUpper;
|
|
169
151
|
|
|
170
152
|
// Set the font and baseline and change it back after
|
|
171
153
|
context.save();
|
|
@@ -174,10 +156,9 @@ class TextCellRenderer extends CellRenderer {
|
|
|
174
156
|
var fontWidthUpper = fontWidthsUpper.get(context.font);
|
|
175
157
|
var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
|
|
176
158
|
var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);
|
|
177
|
-
var
|
|
178
|
-
actualBoundingBoxAscent,
|
|
179
|
-
actualBoundingBoxDescent
|
|
180
|
-
} = context.measureText(truncatedText);
|
|
159
|
+
var _context$measureText3 = context.measureText(truncatedText),
|
|
160
|
+
actualBoundingBoxAscent = _context$measureText3.actualBoundingBoxAscent,
|
|
161
|
+
actualBoundingBoxDescent = _context$measureText3.actualBoundingBoxDescent;
|
|
181
162
|
var textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;
|
|
182
163
|
var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);
|
|
183
164
|
|
|
@@ -197,9 +178,7 @@ class TextCellRenderer extends CellRenderer {
|
|
|
197
178
|
return cachedTokenBoxes;
|
|
198
179
|
}
|
|
199
180
|
configureContext(context, state) {
|
|
200
|
-
var
|
|
201
|
-
theme
|
|
202
|
-
} = state;
|
|
181
|
+
var theme = state.theme;
|
|
203
182
|
context.font = theme.font;
|
|
204
183
|
context.textBaseline = 'middle';
|
|
205
184
|
context.lineCap = 'butt';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextCellRenderer.js","names":["EMPTY_ARRAY","getOrThrow","CellRenderer","isExpandableGridModel","GridUtils","memoizeClear","TextCellRenderer","constructor","arguments","_defineProperty","truncatedText","tokens","_font","_baseline","textHeight","context","top","bottom","tokenBoxes","lastTokenEnd","currentTextWidth","i","length","token","start","end","value","substring","measureText","width","tokenWidth","left","right","newTokenBox","x1","y1","x2","y2","push","max","drawCellContent","state","column","row","metrics","model","theme","fontWidthsLower","fontWidthsUpper","modelColumns","modelRows","allRowHeights","firstColumn","isFirstColumn","textColor","rowHeight","modelRow","modelColumn","text","textForCell","truncationChar","truncationCharForCell","textAlign","textAlignForCell","color","colorForCell","fillStyle","save","textWidth","x","textX","y","textY","getTextRenderMetrics","fontWidthLower","get","font","fontWidthUpper","getCachedTruncatedString","tokensForCell","tokenIndex","textStart","actualBoundingBoxDescent","_ref","_token$end","nextToken","textEnd","widthOfUnderline","endsWith","hyperlinkColor","fillText","fillRect","restore","hasExpandableRows","drawCellRowTreeMarker","getTokenBoxesForVisibleCell","configureContext","actualBoundingBoxAscent","cachedTokenBoxes","getCachedTokenBoxesForVisibleCell","map","tokenBox","textBaseline","lineCap"],"sources":["../src/TextCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { type VisibleIndex } from './GridMetrics';\nimport { type GridRenderState } from './GridRendererTypes';\nimport GridUtils, { type TokenBox, type Token } from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport type TokenBoxCellRenderer from './TokenBoxCellRenderer';\n\nclass TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const {\n fontWidthsLower,\n fontWidthsUpper,\n modelColumns,\n modelRows,\n allRowHeights,\n firstColumn,\n } = metrics;\n const isFirstColumn = column === firstColumn;\n const { textColor } = theme;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n context.save();\n\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n if (truncatedText) {\n let tokenIndex = 0;\n let textStart = 0;\n let left = textX;\n const { actualBoundingBoxDescent } = context.measureText(truncatedText);\n\n while (textStart < truncatedText.length) {\n const nextToken = tokens[tokenIndex];\n const token = textStart === nextToken?.start ? nextToken : null;\n const textEnd =\n token?.end ?? nextToken?.start ?? truncatedText.length;\n const value = truncatedText.substring(textStart, textEnd);\n const { width } = context.measureText(value);\n const widthOfUnderline = value.endsWith('…')\n ? width - context.measureText('…').width\n : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(\n left,\n textY + actualBoundingBoxDescent,\n widthOfUnderline,\n 1\n );\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[] {\n const { metrics, context, model, theme } = state;\n\n if (context == null || metrics == null) {\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const text = model.textForCell(modelColumn, modelRow);\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const { fontWidthsLower, fontWidthsUpper } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } =\n context.measureText(truncatedText);\n const textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(\n truncatedText,\n tokens,\n theme.font,\n 'middle',\n textHeight,\n context\n ).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token,\n }));\n\n context.restore();\n\n return cachedTokenBoxes;\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n getCachedTokenBoxesForVisibleCell = memoizeClear(\n (\n truncatedText: string,\n tokens: Token[],\n // _font and _baseline are passed in so value is re-calculated when they change\n // They should already be set on the `context`, so they are not used in this method\n _font: string,\n _baseline: CanvasTextBaseline,\n textHeight: number,\n context: CanvasRenderingContext2D\n ): TokenBox[] => {\n const top = 0;\n const bottom = textHeight;\n\n const tokenBoxes: TokenBox[] = [];\n\n // The index where the last token ended\n let lastTokenEnd = 0;\n // The width of the text preceding the current token\n let currentTextWidth = 0;\n // Loop through array and push them to array\n for (let i = 0; i < tokens.length; i += 1) {\n const token = tokens[i];\n const { start, end } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n const value =\n end > truncatedText.length\n ? truncatedText.substring(start)\n : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(\n truncatedText.substring(lastTokenEnd, start)\n ).width;\n const tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n const left = currentTextWidth;\n const right = left + tokenWidth;\n\n const newTokenBox: TokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token,\n };\n\n tokenBoxes.push(newTokenBox);\n\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n\n return tokenBoxes;\n },\n { max: 10000 }\n );\n}\n\nexport default TextCellRenderer;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TextCellRenderer.js","names":["EMPTY_ARRAY","getOrThrow","CellRenderer","isExpandableGridModel","GridUtils","memoizeClear","TextCellRenderer","constructor","arguments","_defineProperty","truncatedText","tokens","_font","_baseline","textHeight","context","top","bottom","tokenBoxes","lastTokenEnd","currentTextWidth","i","length","token","start","end","value","substring","measureText","width","tokenWidth","left","right","newTokenBox","x1","y1","x2","y2","push","max","drawCellContent","state","column","row","metrics","model","theme","fontWidthsLower","fontWidthsUpper","modelColumns","modelRows","allRowHeights","firstColumn","isFirstColumn","textColor","rowHeight","modelRow","modelColumn","text","textForCell","truncationChar","truncationCharForCell","textAlign","textAlignForCell","color","colorForCell","fillStyle","save","_GridUtils$getTextRen","getTextRenderMetrics","textWidth","textX","x","textY","y","fontWidthLower","get","font","fontWidthUpper","getCachedTruncatedString","tokensForCell","tokenIndex","textStart","_context$measureText","actualBoundingBoxDescent","_ref","_token$end","nextToken","textEnd","_context$measureText2","widthOfUnderline","endsWith","hyperlinkColor","fillText","fillRect","restore","hasExpandableRows","drawCellRowTreeMarker","getTokenBoxesForVisibleCell","_GridUtils$getTextRen2","configureContext","_context$measureText3","actualBoundingBoxAscent","cachedTokenBoxes","getCachedTokenBoxesForVisibleCell","map","tokenBox","textBaseline","lineCap"],"sources":["../src/TextCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { type VisibleIndex } from './GridMetrics';\nimport { type GridRenderState } from './GridRendererTypes';\nimport GridUtils, { type TokenBox, type Token } from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport type TokenBoxCellRenderer from './TokenBoxCellRenderer';\n\nclass TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const {\n fontWidthsLower,\n fontWidthsUpper,\n modelColumns,\n modelRows,\n allRowHeights,\n firstColumn,\n } = metrics;\n const isFirstColumn = column === firstColumn;\n const { textColor } = theme;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n context.save();\n\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n if (truncatedText) {\n let tokenIndex = 0;\n let textStart = 0;\n let left = textX;\n const { actualBoundingBoxDescent } = context.measureText(truncatedText);\n\n while (textStart < truncatedText.length) {\n const nextToken = tokens[tokenIndex];\n const token = textStart === nextToken?.start ? nextToken : null;\n const textEnd =\n token?.end ?? nextToken?.start ?? truncatedText.length;\n const value = truncatedText.substring(textStart, textEnd);\n const { width } = context.measureText(value);\n const widthOfUnderline = value.endsWith('…')\n ? width - context.measureText('…').width\n : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(\n left,\n textY + actualBoundingBoxDescent,\n widthOfUnderline,\n 1\n );\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[] {\n const { metrics, context, model, theme } = state;\n\n if (context == null || metrics == null) {\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const text = model.textForCell(modelColumn, modelRow);\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const { fontWidthsLower, fontWidthsUpper } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } =\n context.measureText(truncatedText);\n const textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(\n truncatedText,\n tokens,\n theme.font,\n 'middle',\n textHeight,\n context\n ).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token,\n }));\n\n context.restore();\n\n return cachedTokenBoxes;\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n getCachedTokenBoxesForVisibleCell = memoizeClear(\n (\n truncatedText: string,\n tokens: Token[],\n // _font and _baseline are passed in so value is re-calculated when they change\n // They should already be set on the `context`, so they are not used in this method\n _font: string,\n _baseline: CanvasTextBaseline,\n textHeight: number,\n context: CanvasRenderingContext2D\n ): TokenBox[] => {\n const top = 0;\n const bottom = textHeight;\n\n const tokenBoxes: TokenBox[] = [];\n\n // The index where the last token ended\n let lastTokenEnd = 0;\n // The width of the text preceding the current token\n let currentTextWidth = 0;\n // Loop through array and push them to array\n for (let i = 0; i < tokens.length; i += 1) {\n const token = tokens[i];\n const { start, end } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n const value =\n end > truncatedText.length\n ? truncatedText.substring(start)\n : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(\n truncatedText.substring(lastTokenEnd, start)\n ).width;\n const tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n const left = currentTextWidth;\n const right = left + tokenWidth;\n\n const newTokenBox: TokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token,\n };\n\n tokenBoxes.push(newTokenBox);\n\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n\n return tokenBoxes;\n },\n { max: 10000 }\n );\n}\n\nexport default TextCellRenderer;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,13 +8,10 @@ class EditKeyHandler extends KeyHandler {
|
|
|
8
8
|
if (GridUtils.isModifierKeyDown(event)) {
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
cursorColumn,
|
|
16
|
-
cursorRow
|
|
17
|
-
} = grid.state;
|
|
11
|
+
var model = grid.props.model;
|
|
12
|
+
var _grid$state = grid.state,
|
|
13
|
+
cursorColumn = _grid$state.cursorColumn,
|
|
14
|
+
cursorRow = _grid$state.cursorRow;
|
|
18
15
|
if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {
|
|
19
16
|
return false;
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","
|
|
1
|
+
{"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","_grid$state","state","cursorColumn","cursorRow","isEditableRange","makeCell","column","row","key","length","startEditing","undefined","setValueForCell"],"sources":["../../src/key-handlers/EditKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\n\nclass EditKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n\n const { model } = grid.props;\n const { cursorColumn, cursorRow } = grid.state;\n if (\n cursorColumn == null ||\n cursorRow == null ||\n !isEditableGridModel(model) ||\n !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))\n ) {\n return false;\n }\n const column: number | null = cursorColumn;\n const row: number | null = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\n\nexport default EditKeyHandler;\n"],"mappings":"AAAA;AAAA,OACOA,SAAS;AAAA,OAETC,SAAS;AAAA,OACTC,UAAU;AAAA,SACRC,mBAAmB;AAG5B,MAAMC,cAAc,SAASF,UAAU,CAAC;EACtCG,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,IAAIP,SAAS,CAACQ,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAQG,KAAK,GAAKF,IAAI,CAACG,KAAK,CAApBD,KAAK;IACb,IAAAE,WAAA,GAAoCJ,IAAI,CAACK,KAAK;MAAtCC,YAAY,GAAAF,WAAA,CAAZE,YAAY;MAAEC,SAAS,GAAAH,WAAA,CAATG,SAAS;IAC/B,IACED,YAAY,IAAI,IAAI,IACpBC,SAAS,IAAI,IAAI,IACjB,CAACX,mBAAmB,CAACM,KAAK,CAAC,IAC3B,CAACA,KAAK,CAACM,eAAe,CAACd,SAAS,CAACe,QAAQ,CAACH,YAAY,EAAEC,SAAS,CAAC,CAAC,EACnE;MACA,OAAO,KAAK;IACd;IACA,IAAMG,MAAqB,GAAGJ,YAAY;IAC1C,IAAMK,GAAkB,GAAGJ,SAAS;IACpC,IAAIG,MAAM,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAIZ,KAAK,CAACa,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1Bb,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEZ,KAAK,CAACa,GAAG,CAAC;MACvD,OAAO,IAAI;IACb;IAEA,IAAIb,KAAK,CAACa,GAAG,KAAK,IAAI,EAAE;MACtBZ,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,CAAC;MAC9B,OAAO,IAAI;IACb;IAEA,IAAIZ,KAAK,CAACa,GAAG,KAAK,WAAW,EAAE;MAC7BZ,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAEI,SAAS,EAAE,EAAE,CAAC;MACnD,OAAO,IAAI;IACb;IAEA,IAAIhB,KAAK,CAACa,GAAG,KAAK,QAAQ,EAAE;MAC1BZ,IAAI,CAACgB,eAAe,CAACN,MAAM,EAAEC,GAAG,EAAE,EAAE,CAAC;MACrC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAed,cAAc","ignoreList":[]}
|
|
@@ -62,9 +62,7 @@ export function parseValueFromElement(element) {
|
|
|
62
62
|
if (text.length > 0) {
|
|
63
63
|
// If there's text content, try and parse out a table from the child nodes. Each node is a row.
|
|
64
64
|
// If there's only one row and it doesn't contain a tab, then just treat it as a regular value
|
|
65
|
-
var
|
|
66
|
-
childNodes
|
|
67
|
-
} = element;
|
|
65
|
+
var childNodes = element.childNodes;
|
|
68
66
|
var hasTabChar = text.includes('\t');
|
|
69
67
|
var hasFirefoxTab = text.includes('\u00a0\u00a0\u00a0 ');
|
|
70
68
|
if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\t')))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromText","map","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","cleanup","removeEventListener","pasteListener","inputListener","remove","focus","plainText","e","_clipboardEvent$clipb","_clipboardEvent$clipb2","clipboardEvent","clipboardData","getData","_ref","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\n\nexport function parseValueFromText(text: string): string | string[][] {\n const rows = text\n .trim()\n .split('\\n')\n .map(row => row.split('\\t'));\n if (rows.length === 1 && rows[0].length === 1) {\n return rows[0][0];\n }\n return rows;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const cleanup = (): void => {\n dummyInput.removeEventListener('paste', pasteListener);\n dummyInput.removeEventListener('input', inputListener);\n dummyInput.remove();\n grid.focus();\n };\n\n let plainText = '';\n\n // Capture text/plain from the clipboard during the paste event.\n // HTML element parsing is used as a fallback if text/plain is unavailable.\n const pasteListener = (e: Event): void => {\n const clipboardEvent = e as ClipboardEvent;\n plainText =\n clipboardEvent.clipboardData?.getData('text/plain') ?? '';\n };\n\n const inputListener = (): void => {\n cleanup();\n const value =\n (plainText.length > 0 ? parseValueFromText(plainText) : null) ??\n parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n dummyInput.addEventListener('paste', pasteListener);\n dummyInput.addEventListener('input', inputListener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"AAAA;AAAA,OAGOA,SAAS;AAAA,OACTC,UAAU;AAEjB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CAACC,KAAuB,EAAc;EACvE,IAAMC,IAAI,GAAG,EAAE;EACf,IAAMC,IAAI,GAAGF,KAAK,CAACG,gBAAgB,CAAC,IAAI,CAAC;EACzC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;IACvC,IAAME,GAAG,GAAGJ,IAAI,CAACE,CAAC,CAAC;IACnB,IAAMG,KAAK,GAAGD,GAAG,CAACH,gBAAgB,CAAC,IAAI,CAAC;IACxC,IAAMK,OAAO,GAAG,EAAE;IAClB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACF,MAAM,EAAEI,CAAC,IAAI,CAAC,EAAE;MAAA,IAAAC,qBAAA,EAAAC,iBAAA;MACxC,IAAMC,IAAI,GAAGL,KAAK,CAACE,CAAC,CAAC;MACrBD,OAAO,CAACK,IAAI,EAAAH,qBAAA,IAAAC,iBAAA,GAACC,IAAI,CAACE,WAAW,cAAAH,iBAAA,uBAAhBA,iBAAA,CAAkBI,IAAI,CAAC,CAAC,cAAAL,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC;IAC9C;IACAT,IAAI,CAACY,IAAI,CAACL,OAAO,CAAC;EACpB;EAEA,OAAOP,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASe,mBAAmBA,CAACC,KAA4B,EAAc;EAC5E,IAAMC,MAAM,GAAG,EAAgB;EAC/BD,KAAK,CAACE,OAAO,CAACC,IAAI,IAAI;IAAA,IAAAC,iBAAA;IACpB,IAAMC,IAAI,IAAAD,iBAAA,GAAGD,IAAI,CAACN,WAAW,cAAAO,iBAAA,cAAAA,iBAAA,GAAI,EAAE;IACnC,IAAIC,IAAI,CAACjB,MAAM,GAAG,CAAC,EAAE;MACnB;MACA;MACAa,MAAM,CAACL,IAAI,CAACS,IAAI,CAACC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACnD;EACF,CAAC,CAAC;EACF,OAAOL,MAAM;AACf;AAEA,OAAO,SAASM,kBAAkBA,CAACF,IAAY,EAAuB;EACpE,IAAMpB,IAAI,GAAGoB,IAAI,CACdP,IAAI,CAAC,CAAC,CACNQ,KAAK,CAAC,IAAI,CAAC,CACXE,GAAG,CAACnB,GAAG,IAAIA,GAAG,CAACiB,KAAK,CAAC,IAAI,CAAC,CAAC;EAC9B,IAAIrB,IAAI,CAACG,MAAM,KAAK,CAAC,IAAIH,IAAI,CAAC,CAAC,CAAC,CAACG,MAAM,KAAK,CAAC,EAAE;IAC7C,OAAOH,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACnB;EACA,OAAOA,IAAI;AACb;AAEA,OAAO,SAASwB,qBAAqBA,CACnCC,OAAoB,EACQ;EAAA,IAAAC,qBAAA,EAAAC,oBAAA;EAC5B;EACA,IAAM7B,KAAK,GAAG2B,OAAO,CAACG,aAAa,CAAC,OAAO,CAAC;EAC5C,IAAI9B,KAAK,IAAI,IAAI,EAAE;IACjB,OAAOD,mBAAmB,CAACC,KAAK,CAAC;EACnC;;EAEA;EACA,IAAMsB,IAAI,IAAAM,qBAAA,IAAAC,oBAAA,GAAGF,OAAO,CAACb,WAAW,cAAAe,oBAAA,uBAAnBA,oBAAA,CAAqBd,IAAI,CAAC,CAAC,cAAAa,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAC9C,IAAIN,IAAI,CAACjB,MAAM,GAAG,CAAC,EAAE;IACnB;IACA;IACA,IAAM;MAAE0B;IAAW,CAAC,GAAGJ,OAAO;IAC9B,IAAMK,UAAU,GAAGV,IAAI,CAACW,QAAQ,CAAC,IAAI,CAAC;IACtC,IAAMC,aAAa,GAAGZ,IAAI,CAACW,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,IACED,UAAU,IACVD,UAAU,CAAC1B,MAAM,KAAK,CAAC,KACtB0B,UAAU,CAAC1B,MAAM,KAAK,CAAC,IACrB0B,UAAU,CAAC1B,MAAM,GAAG,CAAC,KACnB0B,UAAU,CAAC,CAAC,CAAC,CAACjB,WAAW,IAAI,IAAI,IAChC,CAACiB,UAAU,CAAC,CAAC,CAAC,CAACjB,WAAW,CAACmB,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAC,EAClD;MACA;MACA;MACA;MACA,OAAOX,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,CAACE,GAAG,CAACnB,GAAG,IAAIA,GAAG,CAACiB,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD;IACA,IAAIQ,UAAU,CAAC1B,MAAM,GAAG,CAAC,IAAI6B,aAAa,EAAE;MAC1C,OAAOlB,mBAAmB,CAACW,OAAO,CAACI,UAAU,CAAC;IAChD;IACA;IACA,OAAOT,IAAI;EACb;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA,MAAMa,eAAe,SAASrC,UAAU,CAAC;EACvCsC,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,QAAQD,KAAK,CAACE,GAAG;MACf,KAAK,GAAG;QACN,IAAI1C,SAAS,CAAC2C,iBAAiB,CAACH,KAAK,CAAC,EAAE;UACtC;UACA;UACA,IAAMI,UAAU,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;UAChDD,QAAQ,CAACE,IAAI,CAACC,WAAW,CAACJ,UAAU,CAAC;UACrCA,UAAU,CAACK,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;;UAElD;UACAL,UAAU,CAACK,YAAY,CACrB,OAAO,EACP,kHACF,CAAC;UAED,IAAMC,OAAO,GAAGA,CAAA,KAAY;YAC1BN,UAAU,CAACO,mBAAmB,CAAC,OAAO,EAAEC,aAAa,CAAC;YACtDR,UAAU,CAACO,mBAAmB,CAAC,OAAO,EAAEE,aAAa,CAAC;YACtDT,UAAU,CAACU,MAAM,CAAC,CAAC;YACnBb,IAAI,CAACc,KAAK,CAAC,CAAC;UACd,CAAC;UAED,IAAIC,SAAS,GAAG,EAAE;;UAElB;UACA;UACA,IAAMJ,aAAa,GAAIK,CAAQ,IAAW;YAAA,IAAAC,qBAAA,EAAAC,sBAAA;YACxC,IAAMC,cAAc,GAAGH,CAAmB;YAC1CD,SAAS,IAAAE,qBAAA,IAAAC,sBAAA,GACPC,cAAc,CAACC,aAAa,cAAAF,sBAAA,uBAA5BA,sBAAA,CAA8BG,OAAO,CAAC,YAAY,CAAC,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,EAAE;UAC7D,CAAC;UAED,IAAML,aAAa,GAAGA,CAAA,KAAY;YAAA,IAAAU,IAAA;YAChCb,OAAO,CAAC,CAAC;YACT,IAAMc,KAAK,IAAAD,IAAA,GACRP,SAAS,CAAChD,MAAM,GAAG,CAAC,GAAGmB,kBAAkB,CAAC6B,SAAS,CAAC,GAAG,IAAI,cAAAO,IAAA,cAAAA,IAAA,GAC5DlC,qBAAqB,CAACe,UAAU,CAAC;YACnC,IAAIoB,KAAK,IAAI,IAAI,EAAE;cACjBvB,IAAI,CAACwB,UAAU,CAACD,KAAK,CAAC;YACxB;UACF,CAAC;UAEDpB,UAAU,CAACsB,gBAAgB,CAAC,OAAO,EAAEd,aAAa,CAAC;UACnDR,UAAU,CAACsB,gBAAgB,CAAC,OAAO,EAAEb,aAAa,CAAC;;UAEnD;UACAT,UAAU,CAACW,KAAK,CAAC,CAAC;;UAElB;UACA,OAAO;YAAEY,cAAc,EAAE,KAAK;YAAEC,eAAe,EAAE;UAAK,CAAC;QACzD;QACA;IACJ;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAe9B,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromText","map","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","cleanup","removeEventListener","pasteListener","inputListener","remove","focus","plainText","e","_clipboardEvent$clipb","_clipboardEvent$clipb2","clipboardEvent","clipboardData","getData","_ref","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\n\nexport function parseValueFromText(text: string): string | string[][] {\n const rows = text\n .trim()\n .split('\\n')\n .map(row => row.split('\\t'));\n if (rows.length === 1 && rows[0].length === 1) {\n return rows[0][0];\n }\n return rows;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const cleanup = (): void => {\n dummyInput.removeEventListener('paste', pasteListener);\n dummyInput.removeEventListener('input', inputListener);\n dummyInput.remove();\n grid.focus();\n };\n\n let plainText = '';\n\n // Capture text/plain from the clipboard during the paste event.\n // HTML element parsing is used as a fallback if text/plain is unavailable.\n const pasteListener = (e: Event): void => {\n const clipboardEvent = e as ClipboardEvent;\n plainText =\n clipboardEvent.clipboardData?.getData('text/plain') ?? '';\n };\n\n const inputListener = (): void => {\n cleanup();\n const value =\n (plainText.length > 0 ? parseValueFromText(plainText) : null) ??\n parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n dummyInput.addEventListener('paste', pasteListener);\n dummyInput.addEventListener('input', inputListener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"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","ignoreList":[]}
|