@leankylin-sheet/react 4.0.0 → 4.0.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.
package/dist/index.js CHANGED
@@ -169,6 +169,57 @@ function _nonIterableSpread() {
169
169
  function _nonIterableRest() {
170
170
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
171
171
  }
172
+ function _createForOfIteratorHelper(o, allowArrayLike) {
173
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
174
+ if (!it) {
175
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
176
+ if (it) o = it;
177
+ var i = 0;
178
+ var F = function () {};
179
+ return {
180
+ s: F,
181
+ n: function () {
182
+ if (i >= o.length) return {
183
+ done: true
184
+ };
185
+ return {
186
+ done: false,
187
+ value: o[i++]
188
+ };
189
+ },
190
+ e: function (e) {
191
+ throw e;
192
+ },
193
+ f: F
194
+ };
195
+ }
196
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
197
+ }
198
+ var normalCompletion = true,
199
+ didErr = false,
200
+ err;
201
+ return {
202
+ s: function () {
203
+ it = it.call(o);
204
+ },
205
+ n: function () {
206
+ var step = it.next();
207
+ normalCompletion = step.done;
208
+ return step;
209
+ },
210
+ e: function (e) {
211
+ didErr = true;
212
+ err = e;
213
+ },
214
+ f: function () {
215
+ try {
216
+ if (!normalCompletion && it.return != null) it.return();
217
+ } finally {
218
+ if (didErr) throw err;
219
+ }
220
+ }
221
+ };
222
+ }
172
223
 
173
224
  var defaultRefs = {
174
225
  globalCache: {
@@ -425,10 +476,10 @@ var ColumnHeader = function ColumnHeader() {
425
476
  className: "luckysheet-grdblkpush"
426
477
  })))), /*#__PURE__*/React__default['default'].createElement("div", {
427
478
  style: {
428
- left: 46,
479
+ left: context.rowHeaderWidth,
429
480
  position: "absolute",
430
481
  pointerEvents: "none",
431
- height: 20
482
+ height: context.columnHeaderHeight
432
483
  }
433
484
  }, /*#__PURE__*/React__default['default'].createElement("div", {
434
485
  className: "leankylin-cols-freeze-handle ".concat(freezeCanDrag ? "" : "leankylin-cols-freeze-handle-disabled"),
@@ -622,10 +673,10 @@ var RowHeader = function RowHeader() {
622
673
  className: "luckysheetsheetchange"
623
674
  })), /*#__PURE__*/React__default['default'].createElement("div", {
624
675
  style: {
625
- top: 20,
626
676
  position: "absolute",
627
677
  pointerEvents: "none",
628
- width: 46
678
+ top: context.columnHeaderHeight,
679
+ width: context.rowHeaderWidth
629
680
  }
630
681
  }, /*#__PURE__*/React__default['default'].createElement("div", {
631
682
  className: "leankylin-rows-freeze-handle ".concat(freezeCanDrag ? "" : "leankylin-rows-freeze-handle-disabled"),
@@ -640,6 +691,8 @@ var RowHeader = function RowHeader() {
640
691
  var ContentEditable = function ContentEditable(_ref) {
641
692
  var props = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
642
693
  var lastHtml = React.useRef("");
694
+ var _useContext = React.useContext(WorkbookContext),
695
+ settings = _useContext.settings;
643
696
  var root = React.useRef(null);
644
697
  var autoFocus = props.autoFocus,
645
698
  initialContent = props.initialContent,
@@ -677,7 +730,14 @@ var ContentEditable = function ContentEditable(_ref) {
677
730
  return e.stopPropagation();
678
731
  },
679
732
  onClick: function onClick(e) {
680
- return e.stopPropagation();
733
+ var _settings$onClickCont;
734
+ e.stopPropagation();
735
+ (_settings$onClickCont = settings.onClickContentEditable) === null || _settings$onClickCont === void 0 ? void 0 : _settings$onClickCont.call(settings, e);
736
+ },
737
+ onMouseEnter: function onMouseEnter(e) {
738
+ var _settings$onClickCont2;
739
+ e.stopPropagation();
740
+ (_settings$onClickCont2 = settings.onClickContentEditable) === null || _settings$onClickCont2 === void 0 ? void 0 : _settings$onClickCont2.call(settings, e);
681
741
  }
682
742
  }, ___default['default'].omit(props, "innerRef", "onChange", "html", "onBlur", "autoFocus", "allowEdit", "initialContent")), {}, {
683
743
  ref: function ref(e) {
@@ -694,39 +754,295 @@ var ContentEditable = function ContentEditable(_ref) {
694
754
  }));
695
755
  };
696
756
 
757
+ function getLastTextNode(element) {
758
+ var lastText = null;
759
+ function traverse(node) {
760
+ if (node.nodeType === Node.TEXT_NODE) {
761
+ lastText = node;
762
+ } else if (node.nodeType === Node.ELEMENT_NODE) {
763
+ for (var i = node.childNodes.length - 1; i >= 0; i -= 1) {
764
+ traverse(node.childNodes[i]);
765
+ if (lastText) break;
766
+ }
767
+ }
768
+ }
769
+ traverse(element);
770
+ return lastText;
771
+ }
772
+ function getPlainTextCursorOffset(editableDiv) {
773
+ var selection = window.getSelection();
774
+ if (!selection || selection.rangeCount === 0) return -1;
775
+ var range = selection.getRangeAt(0);
776
+ if (!editableDiv.contains(range.commonAncestorContainer)) {
777
+ return -1;
778
+ }
779
+ var textNodes = [];
780
+ function collectTextNodes(node) {
781
+ if (node.nodeType === Node.TEXT_NODE) {
782
+ textNodes.push(node);
783
+ } else if (node.nodeType === Node.ELEMENT_NODE) {
784
+ for (var i = 0; i < node.childNodes.length; i += 1) {
785
+ collectTextNodes(node.childNodes[i]);
786
+ }
787
+ }
788
+ }
789
+ collectTextNodes(editableDiv);
790
+ var cursorTextNode = null;
791
+ var offsetInNode = 0;
792
+ var startContainer = range.startContainer;
793
+ var startOffset = range.startOffset;
794
+ if (startContainer.nodeType === Node.TEXT_NODE) {
795
+ cursorTextNode = startContainer;
796
+ offsetInNode = startOffset;
797
+ } else if (startContainer.nodeType === Node.ELEMENT_NODE) {
798
+ var childNodes = startContainer.childNodes;
799
+ var prevTextNode = null;
800
+ for (var i = 0; i < startOffset; i += 1) {
801
+ var child = childNodes[i];
802
+ if (child.nodeType === Node.TEXT_NODE) {
803
+ prevTextNode = child;
804
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
805
+ var lastText = getLastTextNode(child);
806
+ if (lastText) prevTextNode = lastText;
807
+ }
808
+ }
809
+ if (prevTextNode) {
810
+ var _prevTextNode$textCon;
811
+ cursorTextNode = prevTextNode;
812
+ offsetInNode = ((_prevTextNode$textCon = prevTextNode.textContent) === null || _prevTextNode$textCon === void 0 ? void 0 : _prevTextNode$textCon.length) || 0;
813
+ } else {
814
+ return 0;
815
+ }
816
+ }
817
+ var totalOffset = 0;
818
+ for (var _i = 0, _textNodes = textNodes; _i < _textNodes.length; _i++) {
819
+ var node = _textNodes[_i];
820
+ if (node === cursorTextNode) {
821
+ totalOffset += offsetInNode;
822
+ break;
823
+ } else {
824
+ var _node$textContent;
825
+ totalOffset += ((_node$textContent = node.textContent) === null || _node$textContent === void 0 ? void 0 : _node$textContent.length) || 0;
826
+ }
827
+ }
828
+ return totalOffset;
829
+ }
830
+ function getrangeseleciton() {
831
+ var _anchorNode$parentNod, _anchorNode$parentNod2, _anchorNode$parentEle, _anchorNode$parentEle2;
832
+ var currSelection = window.getSelection();
833
+ if (!currSelection) return null;
834
+ var anchorNode = currSelection.anchorNode,
835
+ anchorOffset = currSelection.anchorOffset;
836
+ if (!anchorNode) return null;
837
+ if (((_anchorNode$parentNod = anchorNode.parentNode) === null || _anchorNode$parentNod === void 0 ? void 0 : (_anchorNode$parentNod2 = _anchorNode$parentNod.nodeName) === null || _anchorNode$parentNod2 === void 0 ? void 0 : _anchorNode$parentNod2.toLowerCase()) === "span" && anchorOffset !== 0) {
838
+ var txt = ___default['default'].trim(anchorNode.textContent || "");
839
+ if (txt.length === 0 && anchorNode.parentNode.previousSibling) {
840
+ var ahr = anchorNode.parentNode.previousSibling;
841
+ txt = ___default['default'].trim(ahr.textContent || "");
842
+ return ahr;
843
+ }
844
+ return anchorNode.parentNode;
845
+ }
846
+ var anchorElement = anchorNode;
847
+ if (anchorElement.id === "luckysheet-rich-text-editor" || anchorElement.id === "luckysheet-functionbox-cell") {
848
+ var _$last;
849
+ var _txt = ___default['default'].trim((_$last = ___default['default'].last(anchorElement.querySelectorAll("span"))) === null || _$last === void 0 ? void 0 : _$last.innerText);
850
+ if (_txt.length === 0 && anchorElement.querySelectorAll("span").length > 1) {
851
+ var _ahr = anchorElement.querySelectorAll("span");
852
+ _txt = ___default['default'].trim(_ahr[_ahr.length - 2].innerText);
853
+ return _ahr === null || _ahr === void 0 ? void 0 : _ahr[0];
854
+ }
855
+ return ___default['default'].last(anchorElement.querySelectorAll("span"));
856
+ }
857
+ if ((anchorNode === null || anchorNode === void 0 ? void 0 : (_anchorNode$parentEle = anchorNode.parentElement) === null || _anchorNode$parentEle === void 0 ? void 0 : _anchorNode$parentEle.id) === "luckysheet-rich-text-editor" || (anchorNode === null || anchorNode === void 0 ? void 0 : (_anchorNode$parentEle2 = anchorNode.parentElement) === null || _anchorNode$parentEle2 === void 0 ? void 0 : _anchorNode$parentEle2.id) === "luckysheet-functionbox-cell" || anchorOffset === 0) {
858
+ var newAnchorNode = anchorOffset === 0 ? anchorNode === null || anchorNode === void 0 ? void 0 : anchorNode.parentNode : anchorNode;
859
+ if (newAnchorNode === null || newAnchorNode === void 0 ? void 0 : newAnchorNode.previousSibling) {
860
+ return newAnchorNode === null || newAnchorNode === void 0 ? void 0 : newAnchorNode.previousSibling;
861
+ }
862
+ }
863
+ return null;
864
+ }
865
+ function moveCursorToPosition(editableDiv, targetPosition) {
866
+ if (!editableDiv || editableDiv.contentEditable !== "true") {
867
+ console.warn('目标元素必须是可编辑的div(contenteditable="true")');
868
+ return;
869
+ }
870
+ if (targetPosition < 0) {
871
+ targetPosition = 0;
872
+ }
873
+ var textNodesInfo = [];
874
+ var totalLength = 0;
875
+ function traverseNodes(node) {
876
+ if (!node) return;
877
+ if (node.nodeType === Node.TEXT_NODE) {
878
+ var textLength = node.textContent.length;
879
+ totalLength += textLength;
880
+ textNodesInfo.push({
881
+ node: node,
882
+ cumulativeLength: totalLength
883
+ });
884
+ } else if (node.nodeType === Node.ELEMENT_NODE) {
885
+ Array.from(node.childNodes).forEach(function (child) {
886
+ return traverseNodes(child);
887
+ });
888
+ }
889
+ }
890
+ traverseNodes(editableDiv);
891
+ var targetNode = null;
892
+ var offsetInNode = 0;
893
+ if (totalLength <= targetPosition) {
894
+ if (textNodesInfo.length > 0) {
895
+ var lastNodeInfo = textNodesInfo[textNodesInfo.length - 1];
896
+ targetNode = lastNodeInfo.node;
897
+ offsetInNode = lastNodeInfo.node.textContent.length;
898
+ }
899
+ } else {
900
+ var prevCumulativeLength = 0;
901
+ var _iterator = _createForOfIteratorHelper(textNodesInfo),
902
+ _step;
903
+ try {
904
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
905
+ var info = _step.value;
906
+ if (info.cumulativeLength > targetPosition) {
907
+ targetNode = info.node;
908
+ offsetInNode = targetPosition - prevCumulativeLength;
909
+ break;
910
+ }
911
+ prevCumulativeLength = info.cumulativeLength;
912
+ }
913
+ } catch (err) {
914
+ _iterator.e(err);
915
+ } finally {
916
+ _iterator.f();
917
+ }
918
+ }
919
+ if (targetNode) {
920
+ var selection = window.getSelection();
921
+ selection.removeAllRanges();
922
+ var range = document.createRange();
923
+ range.setStart(targetNode, offsetInNode);
924
+ range.setEnd(targetNode, offsetInNode);
925
+ selection.addRange(range);
926
+ }
927
+ }
928
+
697
929
  var FormulaSearch = function FormulaSearch(props) {
698
930
  var _useContext = React.useContext(WorkbookContext),
699
931
  context = _useContext.context,
700
932
  refs = _useContext.refs,
701
933
  settings = _useContext.settings;
934
+ var _useState = React.useState(""),
935
+ _useState2 = _slicedToArray(_useState, 2),
936
+ n = _useState2[0],
937
+ setN = _useState2[1];
938
+ var wrapperRf = React.useRef(null);
939
+ var nRef = React.useRef(n);
940
+ nRef.current = n;
941
+ React.useEffect(function () {
942
+ if (context.functionCandidates.length) {
943
+ setN(context.functionCandidates[0].n);
944
+ }
945
+ }, [context.functionCandidates]);
946
+ var fListRef = React.useRef([]);
947
+ fListRef.current = context.functionCandidates;
948
+ var inputN = function inputN(fnName) {
949
+ var _refs$cellInput$curre, _editor$textContent;
950
+ var offsetIndex = getPlainTextCursorOffset(refs.cellInput.current);
951
+ var text = ((_refs$cellInput$curre = refs.cellInput.current) === null || _refs$cellInput$curre === void 0 ? void 0 : _refs$cellInput$curre.innerText) || "";
952
+ var editor = getrangeseleciton();
953
+ var replaceText = (_editor$textContent = editor.textContent) === null || _editor$textContent === void 0 ? void 0 : _editor$textContent.trim();
954
+ var replaceTextLength = (replaceText === null || replaceText === void 0 ? void 0 : replaceText.length) || 0;
955
+ var newText = (text === null || text === void 0 ? void 0 : text.slice(0, offsetIndex - replaceTextLength)) + fnName + (text === null || text === void 0 ? void 0 : text.slice(offsetIndex));
956
+ refs.cellInput.current.innerHTML = core.functionHTMLGenerate(newText);
957
+ moveCursorToPosition(refs.cellInput.current, offsetIndex - replaceTextLength + fnName.length);
958
+ };
959
+ var viewActive = function viewActive() {
960
+ var _wrapperRf$current;
961
+ var aItem = (_wrapperRf$current = wrapperRf.current) === null || _wrapperRf$current === void 0 ? void 0 : _wrapperRf$current.querySelector(".luckysheet-formula-search-item-active");
962
+ if (aItem) {
963
+ aItem === null || aItem === void 0 ? void 0 : aItem.scrollIntoView({
964
+ block: "nearest",
965
+ behavior: "smooth"
966
+ });
967
+ }
968
+ };
969
+ React.useEffect(function () {
970
+ var _refs$cellInput$curre2;
971
+ var onChange = function onChange(e) {
972
+ var _fListRef$current;
973
+ if (((_fListRef$current = fListRef.current) === null || _fListRef$current === void 0 ? void 0 : _fListRef$current.length) <= 0) {
974
+ return;
975
+ }
976
+ if (e.key === "ArrowDown") {
977
+ e.preventDefault();
978
+ setN(function (_n) {
979
+ var _fListRef$current2, _fListRef$current3;
980
+ var currentIndex = Math.max((_fListRef$current2 = fListRef.current) === null || _fListRef$current2 === void 0 ? void 0 : _fListRef$current2.findIndex(function (item) {
981
+ return item.n === _n;
982
+ }), 0);
983
+ return (_fListRef$current3 = fListRef.current[(currentIndex + 1) % fListRef.current.length]) === null || _fListRef$current3 === void 0 ? void 0 : _fListRef$current3.n;
984
+ });
985
+ setTimeout(function () {
986
+ viewActive();
987
+ }, 200);
988
+ } else if (e.key === "ArrowUp") {
989
+ e.preventDefault();
990
+ setN(function (_n) {
991
+ var _fListRef$current4, _fListRef$current5;
992
+ var currentIndex = Math.max((_fListRef$current4 = fListRef.current) === null || _fListRef$current4 === void 0 ? void 0 : _fListRef$current4.findIndex(function (item) {
993
+ return item.n === _n;
994
+ }), 0);
995
+ return (_fListRef$current5 = fListRef.current[(currentIndex - 1) % fListRef.current.length]) === null || _fListRef$current5 === void 0 ? void 0 : _fListRef$current5.n;
996
+ });
997
+ setTimeout(function () {
998
+ viewActive();
999
+ }, 200);
1000
+ } else if (e.key === "Enter") {
1001
+ e.preventDefault();
1002
+ e.stopPropagation();
1003
+ if (nRef.current) {
1004
+ inputN("".concat(nRef.current, "("));
1005
+ }
1006
+ }
1007
+ };
1008
+ (_refs$cellInput$curre2 = refs.cellInput.current) === null || _refs$cellInput$curre2 === void 0 ? void 0 : _refs$cellInput$curre2.addEventListener("keydown", onChange);
1009
+ return function () {
1010
+ var _refs$cellInput$curre3;
1011
+ (_refs$cellInput$curre3 = refs.cellInput.current) === null || _refs$cellInput$curre3 === void 0 ? void 0 : _refs$cellInput$curre3.removeEventListener("keydown", onChange);
1012
+ };
1013
+ }, [refs.cellInput.current]);
702
1014
  if (___default['default'].isEmpty(context.functionCandidates)) return null;
703
- function moveCursorToEnd(editor) {
704
- var leftParen = editor.querySelector(".luckysheet-formula-text-lpar");
705
- var rightParen = editor.querySelector(".luckysheet-formula-text-rpar");
706
- var range = document.createRange();
707
- var selection = window.getSelection();
708
- range.setStartAfter(leftParen);
709
- range.setEndBefore(rightParen);
710
- selection.removeAllRanges();
711
- selection.addRange(range);
712
- }
713
1015
  if (settings.renderFormulaSearch) {
714
1016
  return settings.renderFormulaSearch(context.functionCandidates, core.functionHTMLGenerate, refs.cellInput.current);
715
1017
  }
716
1018
  return /*#__PURE__*/React__default['default'].createElement("div", _objectSpread2(_objectSpread2({}, props), {}, {
717
1019
  id: "luckysheet-formula-search-c",
718
- className: "luckysheet-formula-search-c"
1020
+ className: "luckysheet-formula-search-c",
1021
+ ref: wrapperRf,
1022
+ onWheel: function onWheel(e) {
1023
+ e.preventDefault();
1024
+ e.stopPropagation();
1025
+ },
1026
+ onWheelCapture: function onWheelCapture(e) {
1027
+ e.preventDefault();
1028
+ e.stopPropagation();
1029
+ }
719
1030
  }), context.functionCandidates.map(function (v) {
720
1031
  return /*#__PURE__*/React__default['default'].createElement("div", {
721
- onClick: function onClick() {
722
- var _refs$cellInput$curre;
723
- refs.cellInput.current.innerHTML = core.functionHTMLGenerate("=".concat(v.n, "()"));
724
- (_refs$cellInput$curre = refs.cellInput.current) === null || _refs$cellInput$curre === void 0 ? void 0 : _refs$cellInput$curre.focus();
725
- moveCursorToEnd(refs.cellInput.current);
1032
+ onClick: function onClick(e) {
1033
+ e.preventDefault();
1034
+ e.stopPropagation();
1035
+ inputN("".concat(v.n, "("));
1036
+ },
1037
+ onMouseEnter: function onMouseEnter() {
1038
+ setN(v.n);
1039
+ },
1040
+ onMouseDown: function onMouseDown(e) {
1041
+ return e.preventDefault();
726
1042
  },
727
1043
  key: v.n,
728
1044
  "data-func": v.n,
729
- className: "luckysheet-formula-search-item"
1045
+ className: "luckysheet-formula-search-item ".concat(n === v.n && "luckysheet-formula-search-item-active")
730
1046
  }, /*#__PURE__*/React__default['default'].createElement("div", {
731
1047
  className: "luckysheet-formula-search-func"
732
1048
  }, v.n), /*#__PURE__*/React__default['default'].createElement("div", {
@@ -846,11 +1162,12 @@ function usePrevious(value) {
846
1162
  }
847
1163
 
848
1164
  var InputBox = function InputBox() {
849
- var _context$luckysheet_s, _context$rangeDialog;
1165
+ var _context$luckysheet_s, _context$rangeDialog, _settings$renderEdito;
850
1166
  var _useContext = React.useContext(WorkbookContext),
851
1167
  context = _useContext.context,
852
1168
  setContext = _useContext.setContext,
853
- refs = _useContext.refs;
1169
+ refs = _useContext.refs,
1170
+ settings = _useContext.settings;
854
1171
  var inputRef = React.useRef(null);
855
1172
  var lastKeyDownEventRef = React.useRef();
856
1173
  var prevCellUpdate = usePrevious(context.luckysheetCellUpdate);
@@ -1019,7 +1336,7 @@ var InputBox = function InputBox() {
1019
1336
  onKeyDown: onKeyDown,
1020
1337
  onPaste: onPaste,
1021
1338
  allowEdit: edit ? !isHidenRC : edit
1022
- })), document.activeElement === inputRef.current && ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(FormulaSearch, {
1339
+ })), document.activeElement === inputRef.current && ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, (_settings$renderEdito = settings.renderEditorSelector) === null || _settings$renderEdito === void 0 ? void 0 : _settings$renderEdito.call(settings, inputRef.current, context.functionCandidates, context.functionHint, context.formulaCache.functionlistMap), /*#__PURE__*/React__default['default'].createElement(FormulaSearch, {
1023
1340
  style: {
1024
1341
  top: ((firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.height_move) || 0) + 4
1025
1342
  }
@@ -1739,6 +2056,7 @@ var LinkEditCard = function LinkEditCard(_ref) {
1739
2056
  };
1740
2057
 
1741
2058
  var FilterOptions = function FilterOptions(_ref) {
2059
+ var _refs$globalCache$fre, _refs$globalCache$fre2;
1742
2060
  var getContainer = _ref.getContainer;
1743
2061
  var _useContext = React.useContext(WorkbookContext),
1744
2062
  context = _useContext.context,
@@ -1763,7 +2081,7 @@ var FilterOptions = function FilterOptions(_ref) {
1763
2081
  core.createFilterOptions(draftCtx, draftCtx.luckysheet_filter_save, undefined);
1764
2082
  });
1765
2083
  }, [visibledatarow, visibledatacolumn, setContext, currentSheetId, filter_select]);
1766
- var showFilterContextMenu = React.useCallback(function (v, i) {
2084
+ var _showFilterContextMenu = React.useCallback(function (v, i) {
1767
2085
  if (filterOptions == null) return;
1768
2086
  setContext(function (draftCtx) {
1769
2087
  var _draftCtx$filterConte, _draftCtx$filter$i;
@@ -1794,11 +2112,21 @@ var FilterOptions = function FilterOptions(_ref) {
1794
2112
  frozenColumns = (frozen === null || frozen === void 0 ? void 0 : (_frozen$range = frozen.range) === null || _frozen$range === void 0 ? void 0 : _frozen$range.column_focus) || -1;
1795
2113
  frozenRows = (frozen === null || frozen === void 0 ? void 0 : (_frozen$range2 = frozen.range) === null || _frozen$range2 === void 0 ? void 0 : _frozen$range2.row_focus) || -1;
1796
2114
  }
1797
- return filterOptions == null ? ( /*#__PURE__*/React__default['default'].createElement("div", null)) : ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, filterOptions.items.map(function (v, i) {
1798
- var _refs$globalCache$fre, _refs$globalCache$fre2;
2115
+ return filterOptions == null ? ( /*#__PURE__*/React__default['default'].createElement("div", null)) : ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("div", {
2116
+ id: "luckysheet-filter-selected-sheet",
2117
+ className: "luckysheet-cell-selected luckysheet-filter-selected",
2118
+ style: ___default['default'].assign({
2119
+ left: Math.max(filterOptions.left, 1),
2120
+ width: filterOptions.width,
2121
+ top: filterOptions.top,
2122
+ height: filterOptions.height,
2123
+ display: "block"
2124
+ }, core.fixRowStyleOverflowInFreeze(context, filterOptions.startRow, filterOptions.endRow, (_refs$globalCache$fre = refs.globalCache.freezen) === null || _refs$globalCache$fre === void 0 ? void 0 : _refs$globalCache$fre[context.currentSheetId]), core.fixColumnStyleOverflowInFreeze(context, filterOptions.startCol, filterOptions.endCol, (_refs$globalCache$fre2 = refs.globalCache.freezen) === null || _refs$globalCache$fre2 === void 0 ? void 0 : _refs$globalCache$fre2[context.currentSheetId]))
2125
+ }), filterOptions.items.map(function (v, i) {
2126
+ var _refs$globalCache$fre3, _refs$globalCache$fre4;
1799
2127
  var filterParam = filter[i];
1800
- var columnOverflowFreezeStyle = core.fixColumnStyleOverflowInFreeze(context, i + filterOptions.startCol, i + filterOptions.startCol, (_refs$globalCache$fre = refs.globalCache.freezen) === null || _refs$globalCache$fre === void 0 ? void 0 : _refs$globalCache$fre[context.currentSheetId]);
1801
- var rowOverflowFreezeStyle = core.fixRowStyleOverflowInFreeze(context, filterOptions.startRow, filterOptions.startRow, (_refs$globalCache$fre2 = refs.globalCache.freezen) === null || _refs$globalCache$fre2 === void 0 ? void 0 : _refs$globalCache$fre2[context.currentSheetId]);
2128
+ var columnOverflowFreezeStyle = core.fixColumnStyleOverflowInFreeze(context, i + filterOptions.startCol, i + filterOptions.startCol, (_refs$globalCache$fre3 = refs.globalCache.freezen) === null || _refs$globalCache$fre3 === void 0 ? void 0 : _refs$globalCache$fre3[context.currentSheetId]);
2129
+ var rowOverflowFreezeStyle = core.fixRowStyleOverflowInFreeze(context, filterOptions.startRow, filterOptions.startRow, (_refs$globalCache$fre4 = refs.globalCache.freezen) === null || _refs$globalCache$fre4 === void 0 ? void 0 : _refs$globalCache$fre4[context.currentSheetId]);
1802
2130
  var col = visibledatacolumn[v.col];
1803
2131
  var col_pre = v.col > 0 ? visibledatacolumn[v.col - 1] : 0;
1804
2132
  var left = v.col <= frozenColumns && columnOverflowFreezeStyle.left ? columnOverflowFreezeStyle.left + col - col_pre - 20 : v.left;
@@ -1808,20 +2136,20 @@ var FilterOptions = function FilterOptions(_ref) {
1808
2136
  top: top
1809
2137
  });
1810
2138
  if (settings.renderFilter) {
1811
- return /*#__PURE__*/React__default['default'].createElement("div", {
1812
- onMouseDown: function onMouseDown(e) {
1813
- return e.stopPropagation();
1814
- },
1815
- onClick: function onClick(e) {
1816
- e.stopPropagation();
1817
- },
1818
- style: {
1819
- position: "absolute",
2139
+ return settings.renderFilter({
2140
+ style: ___default['default'].assign(rowOverflowFreezeStyle, columnOverflowFreezeStyle, {
1820
2141
  left: left,
1821
2142
  top: top,
1822
- zIndex: 999
2143
+ height: undefined,
2144
+ width: undefined,
2145
+ position: "absolute",
2146
+ zIndex: 200
2147
+ }),
2148
+ filterParam: filterParam,
2149
+ showFilterContextMenu: function showFilterContextMenu() {
2150
+ return _showFilterContextMenu(v_adjusted, i);
1823
2151
  }
1824
- }, settings.renderFilter());
2152
+ });
1825
2153
  }
1826
2154
  return /*#__PURE__*/React__default['default'].createElement("div", {
1827
2155
  onMouseDown: function onMouseDown(e) {
@@ -1829,7 +2157,7 @@ var FilterOptions = function FilterOptions(_ref) {
1829
2157
  },
1830
2158
  onClick: function onClick(e) {
1831
2159
  e.stopPropagation();
1832
- showFilterContextMenu(v_adjusted, i);
2160
+ _showFilterContextMenu(v_adjusted, i);
1833
2161
  },
1834
2162
  onDoubleClick: function onDoubleClick(e) {
1835
2163
  return e.stopPropagation();
@@ -5046,7 +5374,8 @@ var CustomColor = function CustomColor(_ref) {
5046
5374
  var onCustomPick = _ref.onCustomPick,
5047
5375
  onColorPick = _ref.onColorPick;
5048
5376
  var _useContext = React.useContext(WorkbookContext),
5049
- context = _useContext.context;
5377
+ context = _useContext.context,
5378
+ settings = _useContext.settings;
5050
5379
  var _locale = core.locale(context),
5051
5380
  toolbar = _locale.toolbar,
5052
5381
  sheetconfig = _locale.sheetconfig,
@@ -5055,6 +5384,12 @@ var CustomColor = function CustomColor(_ref) {
5055
5384
  _useState2 = _slicedToArray(_useState, 2),
5056
5385
  inputColor = _useState2[0],
5057
5386
  setInputColor = _useState2[1];
5387
+ if (settings.renderCustomColor) {
5388
+ return settings.renderCustomColor({
5389
+ onCustomPick: onCustomPick,
5390
+ onColorPick: onColorPick
5391
+ });
5392
+ }
5058
5393
  return /*#__PURE__*/React__default['default'].createElement("div", {
5059
5394
  id: "leankylin-custom-color"
5060
5395
  }, /*#__PURE__*/React__default['default'].createElement("div", {
@@ -5411,7 +5746,7 @@ var FormatSearch = function FormatSearch(_ref) {
5411
5746
  };
5412
5747
 
5413
5748
  var Toolbar = function Toolbar(_ref) {
5414
- var _context$luckysheet_s, _flowdata$row, _settings$customToolb;
5749
+ var _context$luckysheet_s, _flowdata$row, _settings$customToolb, _settings$toolbarRigh;
5415
5750
  var setMoreItems = _ref.setMoreItems,
5416
5751
  moreItemsOpen = _ref.moreItemsOpen;
5417
5752
  var _useContext = React.useContext(WorkbookContext),
@@ -5519,8 +5854,10 @@ var Toolbar = function Toolbar(_ref) {
5519
5854
  if (!container) return;
5520
5855
  var moreButtonWidth = 50;
5521
5856
  for (var i = itemLocations.length - 1; i >= 0; i -= 1) {
5857
+ var _container$querySelec;
5522
5858
  var loc = itemLocations[i];
5523
- if (loc + moreButtonWidth < container.clientWidth) {
5859
+ var wrapperWidth = container.clientWidth - (((_container$querySelec = container.querySelector(".leankylin-toolbar-right")) === null || _container$querySelec === void 0 ? void 0 : _container$querySelec.clientWidth) || 0);
5860
+ if (loc + moreButtonWidth < wrapperWidth) {
5524
5861
  setToolbarWrapIndex(i - itemLocations.length + settings.toolbarItems.length);
5525
5862
  if (i === itemLocations.length - 1) {
5526
5863
  setMoreItems(null);
@@ -5555,7 +5892,7 @@ var Toolbar = function Toolbar(_ref) {
5555
5892
  key: name
5556
5893
  }, /*#__PURE__*/React__default['default'].createElement("div", {
5557
5894
  style: {
5558
- width: 17,
5895
+ width: 30,
5559
5896
  height: 2,
5560
5897
  backgroundColor: name === "font-color" ? refs.globalCache.recentTextColor : refs.globalCache.recentBackgroundColor,
5561
5898
  position: "absolute",
@@ -6538,7 +6875,9 @@ var Toolbar = function Toolbar(_ref) {
6538
6875
  }));
6539
6876
  }
6540
6877
  }
6541
- })) : null);
6878
+ })) : null, settings.toolbarRightRender ? ( /*#__PURE__*/React__default['default'].createElement("div", {
6879
+ className: "leankylin-toolbar-right"
6880
+ }, (_settings$toolbarRigh = settings.toolbarRightRender) === null || _settings$toolbarRigh === void 0 ? void 0 : _settings$toolbarRigh.call(settings))) : null);
6542
6881
  };
6543
6882
 
6544
6883
  var LocationBox = function LocationBox() {
@@ -7574,7 +7913,10 @@ var ContextMenu = function ContextMenu() {
7574
7913
  onKeyDown: function onKeyDown(e) {
7575
7914
  return e.stopPropagation();
7576
7915
  },
7577
- type: "text",
7916
+ onMouseDown: function onMouseDown(e) {
7917
+ return e.stopPropagation();
7918
+ },
7919
+ type: "number",
7578
7920
  className: "luckysheet-mousedown-cancel",
7579
7921
  placeholder: rightclick.number,
7580
7922
  defaultValue: "1"
@@ -7627,7 +7969,10 @@ var ContextMenu = function ContextMenu() {
7627
7969
  onKeyDown: function onKeyDown(e) {
7628
7970
  return e.stopPropagation();
7629
7971
  },
7630
- type: "text",
7972
+ onMouseDown: function onMouseDown(e) {
7973
+ return e.stopPropagation();
7974
+ },
7975
+ type: "number",
7631
7976
  className: "luckysheet-mousedown-cancel",
7632
7977
  placeholder: rightclick.number,
7633
7978
  defaultValue: "1"
@@ -7823,15 +8168,15 @@ var ContextMenu = function ContextMenu() {
7823
8168
  onKeyDown: function onKeyDown(e) {
7824
8169
  return e.stopPropagation();
7825
8170
  },
8171
+ onMouseDown: function onMouseDown(e) {
8172
+ return e.stopPropagation();
8173
+ },
7826
8174
  type: "number",
7827
8175
  min: 1,
7828
8176
  max: 545,
7829
8177
  className: "luckysheet-mousedown-cancel",
7830
8178
  placeholder: rightclick.number,
7831
- defaultValue: shownRowHeight,
7832
- style: {
7833
- width: "40px"
7834
- }
8179
+ defaultValue: shownRowHeight
7835
8180
  }), "px")) : null;
7836
8181
  }
7837
8182
  if (name === "set-column-width") {
@@ -7871,6 +8216,9 @@ var ContextMenu = function ContextMenu() {
7871
8216
  onKeyDown: function onKeyDown(e) {
7872
8217
  return e.stopPropagation();
7873
8218
  },
8219
+ onMouseDown: function onMouseDown(e) {
8220
+ return e.stopPropagation();
8221
+ },
7874
8222
  type: "number",
7875
8223
  min: 1,
7876
8224
  max: 545,
@@ -8035,11 +8383,11 @@ var ContextMenu = function ContextMenu() {
8035
8383
  left: contextMenu.x,
8036
8384
  top: contextMenu.y
8037
8385
  }
8038
- }, context.contextMenu.headerMenu === true ? settings.headerContextMenu.map(function (menu, i) {
8386
+ }, renderCustom(), context.contextMenu.headerMenu === true ? settings.headerContextMenu.map(function (menu, i) {
8039
8387
  return getMenuElement(menu, i);
8040
8388
  }) : settings.cellContextMenu().map(function (menu, i) {
8041
8389
  return getMenuElement(menu, i);
8042
- }), renderCustom());
8390
+ }));
8043
8391
  };
8044
8392
 
8045
8393
  var SVGDefines = function SVGDefines() {
@@ -9435,67 +9783,6 @@ var SVGDefines = function SVGDefines() {
9435
9783
  }))));
9436
9784
  };
9437
9785
 
9438
- var ChangeColor = function ChangeColor(_ref) {
9439
- var triggerParentUpdate = _ref.triggerParentUpdate;
9440
- var _useContext = React.useContext(WorkbookContext),
9441
- context = _useContext.context,
9442
- setContext = _useContext.setContext;
9443
- var _locale = core.locale(context),
9444
- toolbar = _locale.toolbar,
9445
- sheetconfig = _locale.sheetconfig,
9446
- button = _locale.button;
9447
- var _useState = React.useState("#000000"),
9448
- _useState2 = _slicedToArray(_useState, 2),
9449
- inputColor = _useState2[0],
9450
- setInputColor = _useState2[1];
9451
- var _useState3 = React.useState(context.luckysheetfile[core.getSheetIndex(context, context.currentSheetId)].color),
9452
- _useState4 = _slicedToArray(_useState3, 2),
9453
- selectColor = _useState4[0],
9454
- setSelectColor = _useState4[1];
9455
- var certainBtn = React.useCallback(function () {
9456
- setSelectColor(inputColor);
9457
- }, [inputColor]);
9458
- React.useEffect(function () {
9459
- setContext(function (ctx) {
9460
- if (ctx.allowEdit === false) return;
9461
- var index = core.getSheetIndex(ctx, ctx.currentSheetId);
9462
- ctx.luckysheetfile[index].color = selectColor;
9463
- });
9464
- }, [selectColor, setContext]);
9465
- return /*#__PURE__*/React__default['default'].createElement("div", {
9466
- id: "leankylin-change-color"
9467
- }, /*#__PURE__*/React__default['default'].createElement("div", {
9468
- className: "color-reset",
9469
- onClick: function onClick() {
9470
- return setSelectColor(undefined);
9471
- }
9472
- }, sheetconfig.resetColor), /*#__PURE__*/React__default['default'].createElement("div", {
9473
- className: "custom-color"
9474
- }, /*#__PURE__*/React__default['default'].createElement("div", null, toolbar.customColor, ":"), /*#__PURE__*/React__default['default'].createElement("input", {
9475
- type: "color",
9476
- value: inputColor,
9477
- onChange: function onChange(e) {
9478
- return setInputColor(e.target.value);
9479
- },
9480
- onFocus: function onFocus() {
9481
- triggerParentUpdate(true);
9482
- },
9483
- onBlur: function onBlur() {
9484
- triggerParentUpdate(false);
9485
- }
9486
- }), /*#__PURE__*/React__default['default'].createElement("div", {
9487
- className: "button-basic button-primary",
9488
- onClick: function onClick() {
9489
- certainBtn();
9490
- }
9491
- }, button.confirm)), /*#__PURE__*/React__default['default'].createElement(ColorPicker, {
9492
- onPick: function onPick(color) {
9493
- setInputColor(color);
9494
- setSelectColor(color);
9495
- }
9496
- }));
9497
- };
9498
-
9499
9786
  var SheetTabContextMenu = function SheetTabContextMenu() {
9500
9787
  var _settings$sheetTabCon;
9501
9788
  var _useContext = React.useContext(WorkbookContext),
@@ -9593,6 +9880,13 @@ var SheetTabContextMenu = function SheetTabContextMenu() {
9593
9880
  });
9594
9881
  });
9595
9882
  }, [context.allowEdit, setContext, sheet === null || sheet === void 0 ? void 0 : sheet.id]);
9883
+ var changeColor = function changeColor(selectColor) {
9884
+ setContext(function (ctx) {
9885
+ if (ctx.allowEdit === false) return;
9886
+ var index = core.getSheetIndex(ctx, ctx.currentSheetId);
9887
+ ctx.luckysheetfile[index].color = selectColor;
9888
+ });
9889
+ };
9596
9890
  if (!sheet || x == null || y == null) return null;
9597
9891
  return /*#__PURE__*/React__default['default'].createElement("div", {
9598
9892
  className: "leankylin-context-menu luckysheet-cols-menu",
@@ -9689,9 +9983,15 @@ var SheetTabContextMenu = function SheetTabContextMenu() {
9689
9983
  }, /*#__PURE__*/React__default['default'].createElement(SVGIcon, {
9690
9984
  name: "rightArrow",
9691
9985
  width: 18
9692
- })), isShowChangeColor && context.allowEdit && ( /*#__PURE__*/React__default['default'].createElement(ChangeColor, {
9693
- triggerParentUpdate: updateShowInputColor
9694
- })));
9986
+ })), isShowChangeColor && context.allowEdit && ( /*#__PURE__*/React__default['default'].createElement("div", {
9987
+ className: "leankylin-sheet-color-change"
9988
+ }, /*#__PURE__*/React__default['default'].createElement(CustomColor, {
9989
+ onCustomPick: function onCustomPick(color) {
9990
+ changeColor(color);
9991
+ setIsShowChangeColor(false);
9992
+ },
9993
+ onColorPick: changeColor
9994
+ }))));
9695
9995
  }
9696
9996
  if (name === "focus") {
9697
9997
  return /*#__PURE__*/React__default['default'].createElement(Menu, {
@@ -9726,6 +10026,9 @@ var MoreItemsContaier = function MoreItemsContaier(_ref) {
9726
10026
 
9727
10027
  function generateAPIs(context, setContext, handleUndo, handleRedo, settings, cellInput, scrollbarX, scrollbarY, refs) {
9728
10028
  return {
10029
+ replaceVariables: function replaceVariables(_map) {
10030
+ context.formulaCache.parser.replaceVariables(_map);
10031
+ },
9729
10032
  setVariable: function setVariable(name, value) {
9730
10033
  context.formulaCache.parser.setVariable(name, value);
9731
10034
  },
@@ -9919,6 +10222,12 @@ function generateAPIs(context, setContext, handleUndo, handleRedo, settings, cel
9919
10222
  return core.api.setCellValuesByRange(draftCtx, data, range, cellInput, options);
9920
10223
  });
9921
10224
  },
10225
+ setCellValues: function setCellValues(data) {
10226
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10227
+ return setContext(function (draftCtx) {
10228
+ return core.api.setCellValues(draftCtx, data, cellInput, options);
10229
+ });
10230
+ },
9922
10231
  setCellFormatByRange: function setCellFormatByRange(attr, value, range) {
9923
10232
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
9924
10233
  return setContext(function (draftCtx) {
@@ -10275,6 +10584,9 @@ var FilterMenu = function FilterMenu() {
10275
10584
  backgroundColor: v.color
10276
10585
  }
10277
10586
  }), /*#__PURE__*/React__default['default'].createElement("input", {
10587
+ onMouseDown: function onMouseDown(e) {
10588
+ return e.stopPropagation();
10589
+ },
10278
10590
  className: "luckysheet-mousedown-cancel",
10279
10591
  type: "checkbox",
10280
10592
  checked: v.checked,
@@ -10441,11 +10753,7 @@ var FilterMenu = function FilterMenu() {
10441
10753
  if (name === "filter-by-value") {
10442
10754
  return /*#__PURE__*/React__default['default'].createElement("div", {
10443
10755
  key: name
10444
- }, /*#__PURE__*/React__default['default'].createElement(Menu, {
10445
- onClick: function onClick() {}
10446
10756
  }, /*#__PURE__*/React__default['default'].createElement("div", {
10447
- className: "filter-caret right"
10448
- }), filter.filterByValues), /*#__PURE__*/React__default['default'].createElement("div", {
10449
10757
  className: "luckysheet-filter-byvalue"
10450
10758
  }, /*#__PURE__*/React__default['default'].createElement("div", {
10451
10759
  className: "leankylin-menuitem-row byvalue-btn-row"
@@ -10535,20 +10843,13 @@ var FilterMenu = function FilterMenu() {
10535
10843
  }), /*#__PURE__*/React__default['default'].createElement(Divider$1, null), /*#__PURE__*/React__default['default'].createElement("div", {
10536
10844
  className: "leankylin-menuitem-row"
10537
10845
  }, /*#__PURE__*/React__default['default'].createElement("div", {
10538
- className: "button-basic button-primary",
10846
+ className: "button-basic button-danger",
10539
10847
  onClick: function onClick() {
10540
- if (col == null) return;
10541
10848
  setContext(function (draftCtx) {
10542
- var rowHidden = ___default['default'].reduce(hiddenRows.current, function (pre, curr) {
10543
- pre[curr] = 0;
10544
- return pre;
10545
- }, {});
10546
- core.saveFilter(draftCtx, hiddenRows.current.length > 0, rowHidden, {}, startRow, endRow, col, startCol, endCol);
10547
- hiddenRows.current = [];
10548
- draftCtx.filterContextMenu = undefined;
10849
+ core.clearFilter(draftCtx);
10549
10850
  });
10550
10851
  }
10551
- }, filter.filterConform), /*#__PURE__*/React__default['default'].createElement("div", {
10852
+ }, filter.clearFilter), /*#__PURE__*/React__default['default'].createElement("div", {
10552
10853
  className: "button-basic button-default",
10553
10854
  onClick: function onClick() {
10554
10855
  setContext(function (draftCtx) {
@@ -10556,13 +10857,20 @@ var FilterMenu = function FilterMenu() {
10556
10857
  });
10557
10858
  }
10558
10859
  }, filter.filterCancel), /*#__PURE__*/React__default['default'].createElement("div", {
10559
- className: "button-basic button-danger",
10860
+ className: "button-basic button-primary",
10560
10861
  onClick: function onClick() {
10862
+ if (col == null) return;
10561
10863
  setContext(function (draftCtx) {
10562
- core.clearFilter(draftCtx);
10864
+ var rowHidden = ___default['default'].reduce(hiddenRows.current, function (pre, curr) {
10865
+ pre[curr] = 0;
10866
+ return pre;
10867
+ }, {});
10868
+ core.saveFilter(draftCtx, hiddenRows.current.length > 0, rowHidden, {}, startRow, endRow, col, startCol, endCol);
10869
+ hiddenRows.current = [];
10870
+ draftCtx.filterContextMenu = undefined;
10563
10871
  });
10564
10872
  }
10565
- }, filter.clearFilter))), showSubMenu && ( /*#__PURE__*/React__default['default'].createElement("div", {
10873
+ }, filter.filterConform))), showSubMenu && ( /*#__PURE__*/React__default['default'].createElement("div", {
10566
10874
  ref: subMenuRef,
10567
10875
  className: "luckysheet-filter-bycolor-submenu",
10568
10876
  style: subMenuPos,
@@ -10572,6 +10880,9 @@ var FilterMenu = function FilterMenu() {
10572
10880
  onMouseLeave: function onMouseLeave() {
10573
10881
  mouseHoverSubMenu.current = false;
10574
10882
  setShowSubMenu(false);
10883
+ },
10884
+ onMouseDown: function onMouseDown(e) {
10885
+ return e.stopPropagation();
10575
10886
  }
10576
10887
  }, filterColors.bgColors.length < 2 && filterColors.fcColors.length < 2 ? ( /*#__PURE__*/React__default['default'].createElement("div", {
10577
10888
  className: "one-color-tip"