sheet-happens 0.0.31 → 0.0.33

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/index.js CHANGED
@@ -160,9 +160,6 @@ var isInRange = function isInRange(x, min, max) {
160
160
  var isInRangeLeft = function isInRangeLeft(x, min, max) {
161
161
  return min <= x && x < max;
162
162
  };
163
- var isInRangeRight = function isInRangeRight(x, min, max) {
164
- return min < x && x <= max;
165
- };
166
163
  var isInRangeCenter = function isInRangeCenter(x, min, max) {
167
164
  return min < x && x < max;
168
165
  };
@@ -748,24 +745,24 @@ var useMouse = function useMouse(hitmapRef, selection, knobArea, editMode, editD
748
745
  }
749
746
  }
750
747
 
751
- var scrollToHead = true;
748
+ var scrollTo = true;
752
749
 
753
750
  if (!hideRowHeaders && x < getIndentX()) {
754
- scrollToHead = false;
751
+ scrollTo = false;
755
752
  setDraggingRowSelection(true);
756
753
  anchor[0] = -1;
757
754
  head[0] = -1;
758
755
  }
759
756
 
760
757
  if (!hideColumnHeaders && y < getIndentY()) {
761
- scrollToHead = false;
758
+ scrollTo = false;
762
759
  setDraggingColumnSelection(true);
763
760
  anchor[1] = -1;
764
761
  head[1] = -1;
765
762
  }
766
763
 
767
764
  setDraggingSelection(true);
768
- onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange([anchor, head], scrollToHead);
765
+ onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange([anchor, head], scrollTo, true);
769
766
  }, [getMousePosition, getScrollPosition, getMouseHit, onColumnOrderChange, onRowOrderChange, onCellWidthChange, onCellHeightChange, onKnobAreaChange, onSelectionChange, onCommit, canSizeColumn, canSizeRow, canOrderColumn, canOrderRow]);
770
767
  var onPointerUp = React.useCallback(function (e) {
771
768
  var _ref$current2 = ref.current,
@@ -785,7 +782,7 @@ var useMouse = function useMouse(hitmapRef, selection, knobArea, editMode, editD
785
782
  if (knobArea && draggingKnob) {
786
783
  var changes = parseKnobOperation(knobArea, selection, sourceData, editData);
787
784
  onChange === null || onChange === void 0 ? void 0 : onChange(changes);
788
- onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(knobArea);
785
+ onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(knobArea, true, true);
789
786
  onKnobAreaChange === null || onKnobAreaChange === void 0 ? void 0 : onKnobAreaChange(null);
790
787
  }
791
788
 
@@ -1287,8 +1284,14 @@ var useScroll = function useScroll(offset, maxScroll, cellLayout, onOffsetChange
1287
1284
  return;
1288
1285
  }
1289
1286
 
1290
- var xy = [e.target.scrollLeft, e.target.scrollTop];
1291
- var absoluteToCell = cellLayout.absoluteToCell;
1287
+ var absoluteToCell = cellLayout.absoluteToCell,
1288
+ cellToAbsolute = cellLayout.cellToAbsolute;
1289
+
1290
+ var _cellToAbsolute = cellToAbsolute([0, 0], [0.5, 0.5]),
1291
+ nudgeX = _cellToAbsolute[0],
1292
+ nudgeY = _cellToAbsolute[1];
1293
+
1294
+ var xy = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];
1292
1295
  var cell = absoluteToCell(xy);
1293
1296
 
1294
1297
  if (!isSameXY(cell, offset)) {
@@ -1319,9 +1322,9 @@ var scrollToCell = function scrollToCell(element, cell, view, freeze, offset, ma
1319
1322
  columnToPixel = cellLayout.columnToPixel,
1320
1323
  rowToPixel = cellLayout.rowToPixel;
1321
1324
 
1322
- var _cellToAbsolute = cellToAbsolute(freeze),
1323
- frozenX = _cellToAbsolute[0],
1324
- frozenY = _cellToAbsolute[1];
1325
+ var _cellToAbsolute2 = cellToAbsolute(freeze),
1326
+ frozenX = _cellToAbsolute2[0],
1327
+ frozenY = _cellToAbsolute2[1];
1325
1328
 
1326
1329
  var _cellToPixel = cellToPixel(cell),
1327
1330
  left = _cellToPixel[0],
@@ -1335,11 +1338,11 @@ var scrollToCell = function scrollToCell(element, cell, view, freeze, offset, ma
1335
1338
  newY = offset[1];
1336
1339
 
1337
1340
  if (left <= frozenX) {
1338
- newX = x;
1341
+ newX = x - freeze[0];
1339
1342
  }
1340
1343
 
1341
1344
  if (top <= frozenY) {
1342
- newY = y;
1345
+ newY = y - freeze[1];
1343
1346
  }
1344
1347
 
1345
1348
  if (right > w) {
@@ -1358,12 +1361,17 @@ var scrollToCell = function scrollToCell(element, cell, view, freeze, offset, ma
1358
1361
 
1359
1362
  if (!isSameXY(newOffset, offset)) {
1360
1363
  var scroll = cellToAbsolute(newOffset);
1364
+
1365
+ var _cellToAbsolute3 = cellToAbsolute([0, 0], [0.5, 0.5]),
1366
+ nudgeX = _cellToAbsolute3[0],
1367
+ nudgeY = _cellToAbsolute3[1];
1368
+
1361
1369
  callback(newOffset, maxXY(maxScroll, scroll));
1362
1370
  setTimeout(function () {
1363
1371
  var scrollX = scroll[0],
1364
1372
  scrollY = scroll[1];
1365
- element.scrollLeft = scrollX;
1366
- element.scrollTop = scrollY;
1373
+ element.scrollLeft = scrollX - nudgeX;
1374
+ element.scrollTop = scrollY - nudgeY;
1367
1375
  });
1368
1376
  }
1369
1377
  };
@@ -1374,7 +1382,13 @@ var useClipboardCopy = function useClipboardCopy(textAreaRef, selection, editMod
1374
1382
  if (!textArea) return;
1375
1383
  if (editMode) return;
1376
1384
  if (isEmptySelection(selection)) return;
1377
- textArea.value = formatSelectionAsTSV(selection, editData);
1385
+ var v = formatSelectionAsTSV(selection, editData);
1386
+
1387
+ if (v.match(/^[\t\n]*$/)) {
1388
+ v = ' ' + v;
1389
+ }
1390
+
1391
+ textArea.value = v;
1378
1392
  }, [selection, editMode, editData, textAreaRef]);
1379
1393
  React.useLayoutEffect(function () {
1380
1394
  var textArea = textAreaRef.current;
@@ -2486,18 +2500,20 @@ var resolveFrozenSelection = function resolveFrozenSelection(selection, cellLayo
2486
2500
 
2487
2501
  if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {
2488
2502
  left = -1e5;
2503
+ var lastInvisibleX = offsetX + freezeX - 1;
2489
2504
 
2490
- if (isInRangeRight(maxX + 1, freezeX, offsetX + freezeX)) {
2491
- right = indentX;
2505
+ if (maxX <= lastInvisibleX) {
2506
+ if (maxX === lastInvisibleX) right = indentX;else right = -1e5;
2492
2507
  hideKnob = true;
2493
2508
  }
2494
2509
  }
2495
2510
 
2496
2511
  if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {
2497
2512
  top = -1e5;
2513
+ var lastInvisibleY = offsetY + freezeY - 1;
2498
2514
 
2499
- if (isInRangeRight(maxY + 1, freezeY, offsetY + freezeY)) {
2500
- bottom = indentY;
2515
+ if (maxY <= lastInvisibleY) {
2516
+ if (maxY === lastInvisibleY) bottom = indentY;else bottom = -1e5;
2501
2517
  hideKnob = true;
2502
2518
  }
2503
2519
  }
@@ -2695,9 +2711,6 @@ var Sheet = React.forwardRef(function (props, ref) {
2695
2711
  var cellLayout = React.useMemo(function () {
2696
2712
  return makeCellLayout([freezeColumns, freezeRows], [rowHeaderWidth, columnHeaderHeight], dataOffset, columnLayout, rowLayout);
2697
2713
  }, [freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight, dataOffset, columnLayout, rowLayout]);
2698
- React.useImperativeHandle(ref, function () {
2699
- return cellLayout;
2700
- }, [cellLayout]);
2701
2714
  var getVisibleCells = cellLayout.getVisibleCells,
2702
2715
  cellToPixel = cellLayout.cellToPixel,
2703
2716
  getVersion = cellLayout.getVersion;
@@ -2710,9 +2723,13 @@ var Sheet = React.forwardRef(function (props, ref) {
2710
2723
  }
2711
2724
  }, [visibleCells, props.onScrollChange]);
2712
2725
 
2713
- var changeSelection = function changeSelection(newSelection, scrollToAnchor) {
2714
- if (scrollToAnchor === void 0) {
2715
- scrollToAnchor = true;
2726
+ var changeSelection = function changeSelection(newSelection, scrollTo, toHead) {
2727
+ if (scrollTo === void 0) {
2728
+ scrollTo = true;
2729
+ }
2730
+
2731
+ if (toHead === void 0) {
2732
+ toHead = false;
2716
2733
  }
2717
2734
 
2718
2735
  if (!isSameSelection(selection, newSelection)) {
@@ -2722,9 +2739,10 @@ var Sheet = React.forwardRef(function (props, ref) {
2722
2739
  var overlay = overlayRef.current;
2723
2740
  if (!overlay) return;
2724
2741
 
2725
- if (scrollToAnchor) {
2726
- var anchor = newSelection[0];
2727
- scrollToCell(overlay, anchor, [canvasWidth, canvasHeight], [freezeColumns, freezeRows], dataOffset, maxScroll, cellLayout, function (dataOffset, maxScroll) {
2742
+ if (scrollTo) {
2743
+ var anchor = newSelection[0],
2744
+ head = newSelection[1];
2745
+ scrollToCell(overlay, toHead ? head : anchor, [canvasWidth, canvasHeight], [freezeColumns, freezeRows], dataOffset, maxScroll, cellLayout, function (dataOffset, maxScroll) {
2728
2746
  setDataOffset(dataOffset);
2729
2747
  setMaxScroll(maxScroll);
2730
2748
  });
@@ -2918,7 +2936,7 @@ var Sheet = React.forwardRef(function (props, ref) {
2918
2936
  anchor = head;
2919
2937
  }
2920
2938
 
2921
- changeSelection([anchor, head]);
2939
+ changeSelection([anchor, head], true, true);
2922
2940
  return;
2923
2941
  }
2924
2942
 
@@ -2997,16 +3015,31 @@ var Sheet = React.forwardRef(function (props, ref) {
2997
3015
  canvasStyles.width = 'calc(100%)';
2998
3016
  }
2999
3017
 
3000
- var userRendered = React.useMemo(function () {
3001
- var _props$render;
3018
+ var renderedInside = React.useMemo(function () {
3019
+ var _props$renderInside;
3002
3020
 
3003
- return (_props$render = props.render) === null || _props$render === void 0 ? void 0 : _props$render.call(props, {
3021
+ return (_props$renderInside = props.renderInside) === null || _props$renderInside === void 0 ? void 0 : _props$renderInside.call(props, {
3004
3022
  visibleCells: visibleCells,
3005
3023
  cellLayout: cellLayout,
3006
3024
  selection: selection,
3007
3025
  editMode: editMode
3008
3026
  });
3009
- }, [props.render, visibleCells, cellLayout, selection, editMode]);
3027
+ }, [props.renderInside, visibleCells, cellLayout, selection, editMode]);
3028
+ var renderedOutside = React.useMemo(function () {
3029
+ var _props$renderOutside;
3030
+
3031
+ return (_props$renderOutside = props.renderOutside) === null || _props$renderOutside === void 0 ? void 0 : _props$renderOutside.call(props, {
3032
+ visibleCells: visibleCells,
3033
+ cellLayout: cellLayout,
3034
+ selection: selection,
3035
+ editMode: editMode
3036
+ });
3037
+ }, [props.renderOutside, visibleCells, cellLayout, selection, editMode]);
3038
+ React.useImperativeHandle(ref, function () {
3039
+ return _extends({}, cellLayout, {
3040
+ startEditingCell: startEditingCell
3041
+ });
3042
+ }, [cellLayout, startEditingCell]);
3010
3043
  return React__default.createElement("div", {
3011
3044
  style: {
3012
3045
  position: 'relative',
@@ -3040,13 +3073,22 @@ var Sheet = React.forwardRef(function (props, ref) {
3040
3073
  height: 1,
3041
3074
  backgroundColor: 'rgba(0,0,0,0.0)'
3042
3075
  }
3043
- }), userRendered ? React__default.createElement("div", {
3076
+ }), renderedInside ? React__default.createElement("div", {
3044
3077
  style: {
3045
3078
  position: 'sticky',
3046
3079
  left: 0,
3047
3080
  top: 0
3048
3081
  }
3049
- }, userRendered) : null), React__default.createElement("textarea", {
3082
+ }, renderedInside) : null), renderedOutside ? React__default.createElement("div", {
3083
+ style: {
3084
+ position: 'absolute',
3085
+ left: 0,
3086
+ top: 0,
3087
+ width: '100%',
3088
+ height: '100%',
3089
+ pointerEvents: 'none'
3090
+ }
3091
+ }, renderedOutside) : null, React__default.createElement("textarea", {
3050
3092
  style: {
3051
3093
  position: 'absolute',
3052
3094
  top: 0,