sheet-happens 0.0.56 → 0.0.57

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.
@@ -1,15 +1,11 @@
1
- import { ClipboardPayload, CellPropertyFunction, Change, Rectangle } from './types';
2
- export declare type ClipboardTable<T = any> = {
3
- rows: string[][];
4
- payload?: ClipboardPayload<T>;
5
- };
6
- export declare const useClipboardTable: () => {
7
- peek: ClipboardTable<any> | null | undefined;
1
+ import { ClipboardTable, ClipboardTableCells, CellPropertyFunction, Change, Rectangle } from './types';
2
+ export declare const useClipboardTable: <T extends ClipboardTableCells>(clipboardOrigin: string) => {
3
+ peek: ClipboardTable<T> | null | undefined;
8
4
  canPaste: () => boolean;
9
- copyTable: (rows: string[][], payload?: ClipboardPayload<any> | null | undefined) => Promise<void>;
10
- pasteTable: () => Promise<ClipboardTable<any> | null | undefined>;
5
+ copyTable: ({ rows, ...rest }: ClipboardTable<T>) => Promise<void>;
6
+ pasteTable: () => Promise<ClipboardTable<T> | null>;
11
7
  };
12
- export declare const useClipboardAPI: <T = any>(selection: Rectangle, editData: CellPropertyFunction<string>, cellReadOnly: CellPropertyFunction<boolean>, addListener: boolean, onSelectionChange?: ((selection: Rectangle) => void) | undefined, onChange?: ((changes: Change[]) => void) | undefined, onCopy?: ((selection: Rectangle, rows: string[][], cut: boolean) => ClipboardPayload<T> | null | undefined) | undefined, onPaste?: ((selection: Rectangle, rows: string[][], payload?: ClipboardPayload<T> | undefined) => boolean | null | undefined | Promise<boolean | null | undefined>) | undefined) => {
8
+ export declare const useClipboardAPI: <T extends ClipboardTableCells = ClipboardTableCells>(selection: Rectangle, editData: CellPropertyFunction<string>, sourceData: CellPropertyFunction<object | string | number | null>, cellReadOnly: CellPropertyFunction<boolean>, addListener: boolean, onSelectionChange?: ((selection: Rectangle) => void) | undefined, onChange?: ((changes: Change[]) => void) | undefined, onCopy?: ((selection: Rectangle, cut: boolean) => ClipboardTable<T> | null | undefined) | undefined, onPaste?: ((selection: Rectangle, table?: ClipboardTable<T> | undefined) => boolean | null | undefined | Promise<boolean | null | undefined>) | undefined, clipboardOrigin?: string) => {
13
9
  clipboardApi: {
14
10
  copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;
15
11
  pasteSelection: (selection: Rectangle) => Promise<void>;
package/dist/index.js CHANGED
@@ -38,6 +38,15 @@ function _extends() {
38
38
  return n;
39
39
  }, _extends.apply(null, arguments);
40
40
  }
41
+ function _objectWithoutPropertiesLoose(r, e) {
42
+ if (null == r) return {};
43
+ var t = {};
44
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
45
+ if (e.includes(n)) continue;
46
+ t[n] = r[n];
47
+ }
48
+ return t;
49
+ }
41
50
  function _unsupportedIterableToArray(r, a) {
42
51
  if (r) {
43
52
  if ("string" == typeof r) return _arrayLikeToArray(r, a);
@@ -972,7 +981,7 @@ var useMouse = function useMouse(elementRef, dataOffset, hitmapRef, selection, k
972
981
  pixelToRow = _ref$current2$cellLay.pixelToRow;
973
982
  onFocusChange === null || onFocusChange === void 0 ? void 0 : onFocusChange(true);
974
983
  if (knobArea && draggingKnob) {
975
- var changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);
984
+ var changes = parseKnobOperation(knobArea, selection, editData, sourceData, cellReadOnly);
976
985
  onChange === null || onChange === void 0 ? void 0 : onChange(changes);
977
986
  onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(knobArea, true, true);
978
987
  onKnobAreaChange === null || onKnobAreaChange === void 0 ? void 0 : onKnobAreaChange(null);
@@ -1409,7 +1418,7 @@ var useMouse = function useMouse(elementRef, dataOffset, hitmapRef, selection, k
1409
1418
  mouseHandlers: mouseHandlers
1410
1419
  };
1411
1420
  };
1412
- var parseKnobOperation = function parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly) {
1421
+ var parseKnobOperation = function parseKnobOperation(knobArea, selection, editData, sourceData, cellReadOnly) {
1413
1422
  var _normalizeSelection7 = normalizeSelection(knobArea),
1414
1423
  _normalizeSelection7$ = _normalizeSelection7[0],
1415
1424
  kx1 = _normalizeSelection7$[0],
@@ -1444,12 +1453,14 @@ var parseKnobOperation = function parseKnobOperation(knobArea, selection, source
1444
1453
  var srcY = sy1;
1445
1454
  for (var y = fy1; y <= fy2; y++) {
1446
1455
  for (var x = fx1; x <= fx2; x++) {
1447
- var value = sourceData(x, srcY);
1456
+ var value = editData(x, srcY);
1457
+ var data = sourceData(x, srcY);
1448
1458
  if (!cellReadOnly(x, y)) {
1449
1459
  changes.push({
1450
1460
  x: x,
1451
1461
  y: y,
1452
1462
  value: value,
1463
+ data: data,
1453
1464
  source: {
1454
1465
  x: x,
1455
1466
  y: srcY
@@ -1477,12 +1488,14 @@ var parseKnobOperation = function parseKnobOperation(knobArea, selection, source
1477
1488
  var srcX = sx1;
1478
1489
  for (var _x2 = fx1; _x2 <= fx2; _x2++) {
1479
1490
  for (var _y2 = fy1; _y2 <= fy2; _y2++) {
1480
- var _value = sourceData(srcX, _y2);
1491
+ var _value = editData(srcX, _y2);
1492
+ var _data = sourceData(srcX, _y2);
1481
1493
  if (!cellReadOnly(_x2, _y2)) {
1482
1494
  changes.push({
1483
1495
  x: _x2,
1484
1496
  y: _y2,
1485
1497
  value: _value,
1498
+ data: _data,
1486
1499
  source: {
1487
1500
  x: srcX,
1488
1501
  y: _y2
@@ -2176,11 +2189,13 @@ function _catch(body, recover) {
2176
2189
  return result;
2177
2190
  }
2178
2191
 
2192
+ var _excluded = ["rows"],
2193
+ _excluded2 = ["origin"];
2179
2194
  var NON_BREAKING_SPACE = ' ';
2180
2195
  var EMPTY_TABLE = {
2181
2196
  rows: []
2182
2197
  };
2183
- var useClipboardTable = function useClipboardTable() {
2198
+ var useClipboardTable = function useClipboardTable(clipboardOrigin) {
2184
2199
  var _useState = React.useState(),
2185
2200
  peek = _useState[0],
2186
2201
  setPeek = _useState[1];
@@ -2197,22 +2212,17 @@ var useClipboardTable = function useClipboardTable() {
2197
2212
  };
2198
2213
  var hardRefresh = function hardRefresh() {
2199
2214
  try {
2200
- var _temp2 = _catch(function () {
2201
- return Promise.resolve(navigator.clipboard.read()).then(function (items) {
2202
- var item = items[0];
2203
- var _temp = function () {
2204
- if (item) {
2205
- return Promise.resolve(parseClipboardTable(item)).then(function (peek) {
2206
- setPeek(peek);
2207
- });
2208
- } else {
2209
- setPeek(EMPTY_TABLE);
2210
- }
2211
- }();
2212
- if (_temp && _temp.then) return _temp.then(function () {});
2215
+ var _temp = _catch(function () {
2216
+ return Promise.resolve(pasteClipboardTable()).then(function (pasted) {
2217
+ if (pasted) {
2218
+ var _peek = validateClipboardTable(pasted, clipboardOrigin);
2219
+ setPeek(_peek);
2220
+ } else {
2221
+ setPeek(EMPTY_TABLE);
2222
+ }
2213
2223
  });
2214
2224
  }, function () {});
2215
- return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
2225
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
2216
2226
  } catch (e) {
2217
2227
  return Promise.reject(e);
2218
2228
  }
@@ -2237,19 +2247,36 @@ var useClipboardTable = function useClipboardTable() {
2237
2247
  return {
2238
2248
  peek: peek,
2239
2249
  canPaste: canPaste,
2240
- copyTable: copyClipboardTable,
2241
- pasteTable: pasteClipboardTable
2250
+ copyTable: function copyTable(_ref) {
2251
+ var rows = _ref.rows,
2252
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
2253
+ return copyClipboardTable(rows, _extends({
2254
+ origin: clipboardOrigin
2255
+ }, rest));
2256
+ },
2257
+ pasteTable: function () {
2258
+ try {
2259
+ return Promise.resolve(pasteClipboardTable()).then(function (pasted) {
2260
+ return pasted ? validateClipboardTable(pasted, clipboardOrigin) : null;
2261
+ });
2262
+ } catch (e) {
2263
+ return Promise.reject(e);
2264
+ }
2265
+ }
2242
2266
  };
2243
2267
  };
2244
- var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly, addListener, onSelectionChange, onChange, onCopy, onPaste) {
2245
- var _useClipboardTable = useClipboardTable(),
2268
+ var useClipboardAPI = function useClipboardAPI(selection, editData, sourceData, cellReadOnly, addListener, onSelectionChange, onChange, onCopy, onPaste, clipboardOrigin) {
2269
+ if (clipboardOrigin === void 0) {
2270
+ clipboardOrigin = '';
2271
+ }
2272
+ var _useClipboardTable = useClipboardTable(clipboardOrigin),
2246
2273
  canPaste = _useClipboardTable.canPaste,
2247
2274
  copyTable = _useClipboardTable.copyTable,
2248
2275
  pasteTable = _useClipboardTable.pasteTable;
2249
2276
  var pasteIntoSelection = React.useCallback(function (selection, table) {
2250
2277
  try {
2251
2278
  var rows = table.rows,
2252
- payload = table.payload;
2279
+ data = table.data;
2253
2280
  var _normalizeSelection = normalizeSelection(selection),
2254
2281
  min = _normalizeSelection[0],
2255
2282
  max = _normalizeSelection[1];
@@ -2265,19 +2292,22 @@ var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly
2265
2292
  var repeatX = Math.max(1, Math.floor(selectionSize[0]));
2266
2293
  var repeatY = Math.max(1, Math.floor(selectionSize[1]));
2267
2294
  var newSelection = [min, addXY(min, [width * repeatX - 1, height * repeatY - 1])];
2268
- return Promise.resolve(onPaste === null || onPaste === void 0 ? void 0 : onPaste(newSelection, rows, payload)).then(function (shouldPaste) {
2295
+ return Promise.resolve(onPaste === null || onPaste === void 0 ? void 0 : onPaste(newSelection, table)).then(function (shouldPaste) {
2269
2296
  if (shouldPaste !== false) {
2270
2297
  var changes = rows.flatMap(function (row, j) {
2271
2298
  return row.flatMap(function (value, i) {
2272
2299
  var cells = [];
2273
2300
  for (var rx = 0; rx < repeatX; ++rx) {
2274
2301
  for (var ry = 0; ry < repeatY; ++ry) {
2302
+ var _data$cells, _data$cells$j;
2275
2303
  var x = left + i + rx * width;
2276
2304
  var y = top + j + ry * height;
2305
+ var v = data === null || data === void 0 ? void 0 : (_data$cells = data.cells) === null || _data$cells === void 0 ? void 0 : (_data$cells$j = _data$cells[j]) === null || _data$cells$j === void 0 ? void 0 : _data$cells$j[i];
2277
2306
  if (!(cellReadOnly !== null && cellReadOnly !== void 0 && cellReadOnly(x, y))) cells.push({
2278
2307
  x: x,
2279
2308
  y: y,
2280
- value: value
2309
+ value: value,
2310
+ data: v
2281
2311
  });
2282
2312
  }
2283
2313
  }
@@ -2299,11 +2329,10 @@ var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly
2299
2329
  cut = false;
2300
2330
  }
2301
2331
  try {
2302
- var _payload$cut;
2303
- var rows = formatSelectionAsRows(selection, editData);
2304
- var payload = onCopy === null || onCopy === void 0 ? void 0 : onCopy(selection, rows, cut);
2305
- copyTable(rows, payload);
2306
- if ((_payload$cut = payload === null || payload === void 0 ? void 0 : payload.cut) != null ? _payload$cut : cut) {
2332
+ var _onCopy, _table$cut;
2333
+ var table = (_onCopy = onCopy === null || onCopy === void 0 ? void 0 : onCopy(selection, cut)) != null ? _onCopy : formatSelectionAsRows(selection, editData, sourceData);
2334
+ copyTable(table);
2335
+ if ((_table$cut = table === null || table === void 0 ? void 0 : table.cut) != null ? _table$cut : cut) {
2307
2336
  var changes = [];
2308
2337
  forSelectionRows(selection)(function (y) {
2309
2338
  forSelectionColumns(selection)(function (x) {
@@ -2311,7 +2340,8 @@ var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly
2311
2340
  var change = {
2312
2341
  x: x,
2313
2342
  y: y,
2314
- value: ''
2343
+ value: '',
2344
+ data: null
2315
2345
  };
2316
2346
  changes.push(change);
2317
2347
  }
@@ -2341,8 +2371,11 @@ var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly
2341
2371
  try {
2342
2372
  e.preventDefault();
2343
2373
  var clipboardData = e.clipboardData || window.clipboardData;
2344
- return Promise.resolve(parseClipboardTable(clipboardData)).then(function (table) {
2345
- if (table) pasteIntoSelection(selection, table);
2374
+ return Promise.resolve(parseClipboardTable(clipboardData)).then(function (parsed) {
2375
+ if (parsed) {
2376
+ var table = validateClipboardTable(parsed, clipboardOrigin);
2377
+ if (table) pasteIntoSelection(selection, table);
2378
+ }
2346
2379
  });
2347
2380
  } catch (e) {
2348
2381
  return Promise.reject(e);
@@ -2368,6 +2401,21 @@ var useClipboardAPI = function useClipboardAPI(selection, editData, cellReadOnly
2368
2401
  onClipboardPaste: onClipboardPaste
2369
2402
  };
2370
2403
  };
2404
+ var validateClipboardTable = function validateClipboardTable(parsed, clipboardOrigin) {
2405
+ var rows = parsed.rows,
2406
+ payload = parsed.payload;
2407
+ if (!payload) return {
2408
+ rows: rows
2409
+ };
2410
+ var origin = payload.origin,
2411
+ rest = _objectWithoutPropertiesLoose(payload, _excluded2);
2412
+ if (origin === clipboardOrigin) return _extends({
2413
+ rows: rows
2414
+ }, rest);
2415
+ return {
2416
+ rows: rows
2417
+ };
2418
+ };
2371
2419
  var copyClipboardTable = function copyClipboardTable(rows, payload) {
2372
2420
  try {
2373
2421
  var text = formatRowsAsTSV(rows);
@@ -2391,8 +2439,7 @@ var pasteClipboardTable = function pasteClipboardTable() {
2391
2439
  try {
2392
2440
  return Promise.resolve(navigator.clipboard.read()).then(function (items) {
2393
2441
  var item = items[0];
2394
- if (!item) return;
2395
- return parseClipboardTable(item);
2442
+ return item ? Promise.resolve(parseClipboardTable(item)) : null;
2396
2443
  });
2397
2444
  } catch (e) {
2398
2445
  return Promise.reject(e);
@@ -2400,7 +2447,7 @@ var pasteClipboardTable = function pasteClipboardTable() {
2400
2447
  };
2401
2448
  var parseClipboardTable = function parseClipboardTable(item) {
2402
2449
  try {
2403
- var _temp5 = function _temp5() {
2450
+ var _temp4 = function _temp4() {
2404
2451
  return rows ? {
2405
2452
  rows: rows,
2406
2453
  payload: payload
@@ -2418,7 +2465,7 @@ var parseClipboardTable = function parseClipboardTable(item) {
2418
2465
  return '';
2419
2466
  };
2420
2467
  var rows, payload;
2421
- var _temp4 = function () {
2468
+ var _temp3 = function () {
2422
2469
  if (has('text/html')) {
2423
2470
  return Promise.resolve(get('text/html')).then(function (pastedHtml) {
2424
2471
  var _parsePastedHtml = parsePastedHtml(pastedHtml);
@@ -2426,17 +2473,17 @@ var parseClipboardTable = function parseClipboardTable(item) {
2426
2473
  payload = _parsePastedHtml.payload;
2427
2474
  });
2428
2475
  } else {
2429
- var _temp6 = function () {
2476
+ var _temp5 = function () {
2430
2477
  if (has('text/plain')) {
2431
2478
  return Promise.resolve(get('text/plain')).then(function (text) {
2432
2479
  rows = parsePastedText(text);
2433
2480
  });
2434
2481
  }
2435
2482
  }();
2436
- if (_temp6 && _temp6.then) return _temp6.then(function () {});
2483
+ if (_temp5 && _temp5.then) return _temp5.then(function () {});
2437
2484
  }
2438
2485
  }();
2439
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
2486
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
2440
2487
  } catch (e) {
2441
2488
  return Promise.reject(e);
2442
2489
  }
@@ -2465,12 +2512,15 @@ var formatRowsAsHTML = function formatRowsAsHTML(rows, payload) {
2465
2512
  return table;
2466
2513
  };
2467
2514
  var formatTextAsHTML = function formatTextAsHTML(s) {
2468
- return s.replace(/[&"'<>]/g, function (i) {
2515
+ var _s$toString$replace;
2516
+ return (_s$toString$replace = s === null || s === void 0 ? void 0 : s.toString().replace(/[&"'<>]/g, function (i) {
2469
2517
  return "&#" + i.charCodeAt(0) + ";";
2470
- });
2518
+ })) != null ? _s$toString$replace : '';
2471
2519
  };
2472
- var formatSelectionAsRows = function formatSelectionAsRows(selection, editData) {
2473
- if (isEmptySelection(selection)) return [];
2520
+ var formatSelectionAsRows = function formatSelectionAsRows(selection, editData, sourceData) {
2521
+ if (isEmptySelection(selection)) return {
2522
+ rows: []
2523
+ };
2474
2524
  var _normalizeSelection2 = normalizeSelection(selection),
2475
2525
  _normalizeSelection2$ = _normalizeSelection2[0],
2476
2526
  minX = _normalizeSelection2$[0],
@@ -2490,18 +2540,27 @@ var formatSelectionAsRows = function formatSelectionAsRows(selection, editData)
2490
2540
  minY = 0;
2491
2541
  maxY = cellY;
2492
2542
  }
2493
- var rows = [];
2543
+ var texts = [];
2544
+ var datas = {};
2494
2545
  for (var y = minY; y <= maxY; y++) {
2495
- var row = [];
2546
+ var textRow = [];
2547
+ var dataRow = {};
2496
2548
  for (var x = minX; x <= maxX; x++) {
2497
- var value = editData(x, y);
2498
- if (value !== null && value !== undefined) {
2499
- row.push(value != null ? value : '');
2500
- }
2549
+ var _editData, _sourceData;
2550
+ var value = (_editData = editData(x, y)) != null ? _editData : '';
2551
+ var data = (_sourceData = sourceData(x, y)) != null ? _sourceData : null;
2552
+ dataRow[textRow.length] = data;
2553
+ textRow.push(value);
2501
2554
  }
2502
- rows.push(row);
2555
+ datas[texts.length] = dataRow;
2556
+ texts.push(textRow);
2503
2557
  }
2504
- return rows;
2558
+ return {
2559
+ rows: texts,
2560
+ data: {
2561
+ cells: datas
2562
+ }
2563
+ };
2505
2564
  };
2506
2565
  var _findTag = function findTag(element, tagName) {
2507
2566
  for (var _iterator = _createForOfIteratorHelperLoose(element.children), _step; !(_step = _iterator()).done;) {
@@ -2525,6 +2584,7 @@ var parsePastedHtml = function parsePastedHtml(html) {
2525
2584
  var json = sheetNode.getAttribute('payload');
2526
2585
  try {
2527
2586
  payload = JSON.parse(json);
2587
+ if (!payload || typeof payload !== 'object') payload = null;
2528
2588
  } catch (e) {}
2529
2589
  }
2530
2590
  var tableNode = _findTag(div, 'TABLE');
@@ -3430,7 +3490,7 @@ var resolveSheetStyle = function resolveSheetStyle(sheetStyle) {
3430
3490
  };
3431
3491
 
3432
3492
  var Sheet = React.forwardRef(function (props, ref) {
3433
- var _props$selection, _props$secondarySelec, _props$cacheLayout, _props$inputComponent;
3493
+ var _props$selection, _props$secondarySelec, _props$cacheLayout, _props$clipboardOrigi, _props$inputComponent2;
3434
3494
  var canvasRef = React.useRef(null);
3435
3495
  var overlayRef = React.useRef(null);
3436
3496
  var _useState = React.useState(INITIAL_MAX_SCROLL),
@@ -3471,9 +3531,12 @@ var Sheet = React.forwardRef(function (props, ref) {
3471
3531
  var _useState11 = React.useState(''),
3472
3532
  editValue = _useState11[0],
3473
3533
  setEditValue = _useState11[1];
3474
- var _useState12 = React.useState(false),
3475
- arrowKeyCommitMode = _useState12[0],
3476
- setArrowKeyCommitMode = _useState12[1];
3534
+ var _useState12 = React.useState(null),
3535
+ sourceValue = _useState12[0],
3536
+ setSourceValue = _useState12[1];
3537
+ var _useState13 = React.useState(false),
3538
+ arrowKeyCommitMode = _useState13[0],
3539
+ setArrowKeyCommitMode = _useState13[1];
3477
3540
  var _useResizeObserver = useResizeObserver({
3478
3541
  ref: overlayRef
3479
3542
  }),
@@ -3633,16 +3696,21 @@ var Sheet = React.forwardRef(function (props, ref) {
3633
3696
  if (props.onChange) {
3634
3697
  var cellX = editCell[0],
3635
3698
  cellY = editCell[1];
3699
+ var hasData = !!input;
3700
+ var v = hasData ? null : value;
3701
+ var d = hasData ? value : null;
3636
3702
  props.onChange([{
3637
3703
  x: cellX,
3638
3704
  y: cellY,
3639
- value: value !== undefined ? value : editValue
3705
+ value: value !== undefined ? v : editValue,
3706
+ data: value !== undefined ? d : sourceValue
3640
3707
  }]);
3641
3708
  }
3642
3709
  setEditCell(NO_CELL);
3643
3710
  setFocused(true);
3644
3711
  };
3645
3712
  var startEditingCell = function startEditingCell(editCell, arrowKeyCommitMode) {
3713
+ var _props$inputComponent, _editData, _sourceData;
3646
3714
  if (arrowKeyCommitMode === void 0) {
3647
3715
  arrowKeyCommitMode = false;
3648
3716
  }
@@ -3651,13 +3719,18 @@ var Sheet = React.forwardRef(function (props, ref) {
3651
3719
  if (cellReadOnly(cellX, cellY)) {
3652
3720
  return;
3653
3721
  }
3654
- var editDataValue = editData(cellX, cellY);
3655
- var val = '';
3656
- if (editDataValue !== null && editDataValue !== undefined) {
3657
- val = editDataValue;
3722
+ var hasData = !!((_props$inputComponent = props.inputComponent) !== null && _props$inputComponent !== void 0 && _props$inputComponent.call(props, cellX, cellY, _extends({}, inputProps, {
3723
+ onChange: function onChange() {}
3724
+ }), function () {}));
3725
+ var editValue = (_editData = editData(cellX, cellY)) != null ? _editData : '';
3726
+ var sourceValue = (_sourceData = sourceData(cellX, cellY)) != null ? _sourceData : null;
3727
+ if (hasData) {
3728
+ setEditValue(null);
3729
+ setSourceValue(sourceValue);
3730
+ } else {
3731
+ setEditValue(editValue);
3658
3732
  }
3659
3733
  setEditCell(editCell);
3660
- setEditValue(val);
3661
3734
  setArrowKeyCommitMode(arrowKeyCommitMode);
3662
3735
  setLastEditKey(editKeys.apply(void 0, editCell));
3663
3736
  };
@@ -3676,7 +3749,7 @@ var Sheet = React.forwardRef(function (props, ref) {
3676
3749
  }, [maxRows, maxColumns]);
3677
3750
  var hitmapRef = React.useRef(NO_CLICKABLES);
3678
3751
  var isFocused = focused || editMode;
3679
- var _useClipboardAPI = useClipboardAPI(selection, editData, cellReadOnly, isFocused && !editMode, changeSelection, props.onChange, props.onCopy, props.onPaste),
3752
+ var _useClipboardAPI = useClipboardAPI(selection, editData, sourceData, cellReadOnly, isFocused && !editMode, changeSelection, props.onChange, props.onCopy, props.onPaste, (_props$clipboardOrigi = props.clipboardOrigin) != null ? _props$clipboardOrigi : location.origin),
3680
3753
  clipboardApi = _useClipboardAPI.clipboardApi,
3681
3754
  onClipboardCopy = _useClipboardAPI.onClipboardCopy;
3682
3755
  var onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);
@@ -3707,9 +3780,9 @@ var Sheet = React.forwardRef(function (props, ref) {
3707
3780
  window.cancelAnimationFrame(animationFrameId);
3708
3781
  };
3709
3782
  }, [cellLayout, visibleCells, sheetStyle, cellStyle, selection, secondarySelections, isFocused, knobPosition, knobArea, dragOffset, dropTarget, columnHeaders, columnHeaderStyle, displayData, columnGroupKeys, rowGroupKeys, selectedColumnGroups, selectedRowGroups, dataOffset]);
3710
- var _useState13 = React.useState(''),
3711
- lastEditKey = _useState13[0],
3712
- setLastEditKey = _useState13[1];
3783
+ var _useState14 = React.useState(''),
3784
+ lastEditKey = _useState14[0],
3785
+ setLastEditKey = _useState14[1];
3713
3786
  var editTextPosition = ORIGIN;
3714
3787
  var editTextWidth = 0;
3715
3788
  var editTextHeight = 0;
@@ -3742,7 +3815,7 @@ var Sheet = React.forwardRef(function (props, ref) {
3742
3815
  textX = _editTextPosition[0],
3743
3816
  textY = _editTextPosition[1];
3744
3817
  var inputProps = {
3745
- value: editValue,
3818
+ value: editValue != null ? editValue : '',
3746
3819
  autoFocus: true,
3747
3820
  onKeyDown: onInputKeyDown,
3748
3821
  style: {
@@ -3763,8 +3836,8 @@ var Sheet = React.forwardRef(function (props, ref) {
3763
3836
  resize: 'none'
3764
3837
  }
3765
3838
  };
3766
- var input = (_props$inputComponent = props.inputComponent) === null || _props$inputComponent === void 0 ? void 0 : _props$inputComponent.call(props, editCellX, editCellY, _extends({}, inputProps, {
3767
- onChange: setEditValue
3839
+ var input = (_props$inputComponent2 = props.inputComponent) === null || _props$inputComponent2 === void 0 ? void 0 : _props$inputComponent2.call(props, editCellX, editCellY, _extends({}, inputProps, {
3840
+ onChange: setSourceValue
3768
3841
  }), commitEditingCell);
3769
3842
  var overlayDivClassName = styles.sheetscroll;
3770
3843
  var overlayDivStyles = {