@deephaven/grid 1.18.0 → 1.18.2

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.
@@ -14,6 +14,7 @@ export declare function parseValueFromTable(table: HTMLTableElement): string[][]
14
14
  * @returns A string table of data
15
15
  */
16
16
  export declare function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][];
17
+ export declare function parseValueFromText(text: string): string | string[][];
17
18
  export declare function parseValueFromElement(element: HTMLElement): string | string[][] | null;
18
19
  /**
19
20
  * Handles the paste key combination
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAW5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAW5E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CASpE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAwDjE;AAED,eAAe,eAAe,CAAC"}
@@ -42,6 +42,13 @@ export function parseValueFromNodes(nodes) {
42
42
  });
43
43
  return result;
44
44
  }
45
+ export function parseValueFromText(text) {
46
+ var rows = text.trim().split('\n').map(row => row.split('\t'));
47
+ if (rows.length === 1 && rows[0].length === 1) {
48
+ return rows[0][0];
49
+ }
50
+ return rows;
51
+ }
45
52
  export function parseValueFromElement(element) {
46
53
  var _element$textContent$, _element$textContent;
47
54
  // Check first if there's an HTML table element that we can use
@@ -91,20 +98,31 @@ class PasteKeyHandler extends KeyHandler {
91
98
 
92
99
  // Give it invisible styling
93
100
  dummyInput.setAttribute('style', 'clip-path: "inset(50%)"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;');
94
- var listener = () => {
95
- dummyInput.removeEventListener('input', listener);
101
+ var cleanup = () => {
102
+ dummyInput.removeEventListener('paste', pasteListener);
103
+ dummyInput.removeEventListener('input', inputListener);
96
104
  dummyInput.remove();
97
105
  grid.focus();
98
- var value = parseValueFromElement(dummyInput);
106
+ };
107
+ var plainText = '';
108
+
109
+ // Capture text/plain from the clipboard during the paste event.
110
+ // HTML element parsing is used as a fallback if text/plain is unavailable.
111
+ var pasteListener = e => {
112
+ var _clipboardEvent$clipb, _clipboardEvent$clipb2;
113
+ var clipboardEvent = e;
114
+ plainText = (_clipboardEvent$clipb = (_clipboardEvent$clipb2 = clipboardEvent.clipboardData) === null || _clipboardEvent$clipb2 === void 0 ? void 0 : _clipboardEvent$clipb2.getData('text/plain')) !== null && _clipboardEvent$clipb !== void 0 ? _clipboardEvent$clipb : '';
115
+ };
116
+ var inputListener = () => {
117
+ var _ref;
118
+ cleanup();
119
+ var value = (_ref = plainText.length > 0 ? parseValueFromText(plainText) : null) !== null && _ref !== void 0 ? _ref : parseValueFromElement(dummyInput);
99
120
  if (value != null) {
100
121
  grid.pasteValue(value);
101
122
  }
102
123
  };
103
-
104
- // Listen for the `input` event, when there's a change to the HTML
105
- // We could also listen to the `paste` event to get the clipboard data, but that's just text data
106
- // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume
107
- dummyInput.addEventListener('input', listener);
124
+ dummyInput.addEventListener('paste', pasteListener);
125
+ dummyInput.addEventListener('input', inputListener);
108
126
 
109
127
  // Focus the element so it receives the paste event
110
128
  dummyInput.focus();
@@ -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","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","map","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","listener","removeEventListener","remove","focus","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 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 listener = (): void => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n\n grid.focus();\n const value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\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,qBAAqBA,CACnCC,OAAoB,EACQ;EAAA,IAAAC,qBAAA,EAAAC,oBAAA;EAC5B;EACA,IAAM3B,KAAK,GAAGyB,OAAO,CAACG,aAAa,CAAC,OAAO,CAAC;EAC5C,IAAI5B,KAAK,IAAI,IAAI,EAAE;IACjB,OAAOD,mBAAmB,CAACC,KAAK,CAAC;EACnC;;EAEA;EACA,IAAMsB,IAAI,IAAAI,qBAAA,IAAAC,oBAAA,GAAGF,OAAO,CAACX,WAAW,cAAAa,oBAAA,uBAAnBA,oBAAA,CAAqBZ,IAAI,CAAC,CAAC,cAAAW,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAC9C,IAAIJ,IAAI,CAACjB,MAAM,GAAG,CAAC,EAAE;IACnB;IACA;IACA,IAAM;MAAEwB;IAAW,CAAC,GAAGJ,OAAO;IAC9B,IAAMK,UAAU,GAAGR,IAAI,CAACS,QAAQ,CAAC,IAAI,CAAC;IACtC,IAAMC,aAAa,GAAGV,IAAI,CAACS,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,IACED,UAAU,IACVD,UAAU,CAACxB,MAAM,KAAK,CAAC,KACtBwB,UAAU,CAACxB,MAAM,KAAK,CAAC,IACrBwB,UAAU,CAACxB,MAAM,GAAG,CAAC,KACnBwB,UAAU,CAAC,CAAC,CAAC,CAACf,WAAW,IAAI,IAAI,IAChC,CAACe,UAAU,CAAC,CAAC,CAAC,CAACf,WAAW,CAACiB,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAC,EAClD;MACA;MACA;MACA;MACA,OAAOT,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,CAACU,GAAG,CAAC3B,GAAG,IAAIA,GAAG,CAACiB,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD;IACA,IAAIM,UAAU,CAACxB,MAAM,GAAG,CAAC,IAAI2B,aAAa,EAAE;MAC1C,OAAOhB,mBAAmB,CAACS,OAAO,CAACI,UAAU,CAAC;IAChD;IACA;IACA,OAAOP,IAAI;EACb;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA,MAAMY,eAAe,SAASpC,UAAU,CAAC;EACvCqC,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,QAAQD,KAAK,CAACE,GAAG;MACf,KAAK,GAAG;QACN,IAAIzC,SAAS,CAAC0C,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,QAAQ,GAAGA,CAAA,KAAY;YAC3BN,UAAU,CAACO,mBAAmB,CAAC,OAAO,EAAED,QAAQ,CAAC;YACjDN,UAAU,CAACQ,MAAM,CAAC,CAAC;YAEnBX,IAAI,CAACY,KAAK,CAAC,CAAC;YACZ,IAAMC,KAAK,GAAG1B,qBAAqB,CAACgB,UAAU,CAAC;YAC/C,IAAIU,KAAK,IAAI,IAAI,EAAE;cACjBb,IAAI,CAACc,UAAU,CAACD,KAAK,CAAC;YACxB;UACF,CAAC;;UAED;UACA;UACA;UACAV,UAAU,CAACY,gBAAgB,CAAC,OAAO,EAAEN,QAAQ,CAAC;;UAE9C;UACAN,UAAU,CAACS,KAAK,CAAC,CAAC;;UAElB;UACA,OAAO;YAAEI,cAAc,EAAE,KAAK;YAAEC,eAAe,EAAE;UAAK,CAAC;QACzD;QACA;IACJ;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAepB,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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "1.18.0",
3
+ "version": "1.18.2",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "bdbf87598bc177c76079c216e9d364100f135718"
46
+ "gitHead": "90b8e4d1cbffabdceaf2dacf010e7286805361c2"
47
47
  }