@fileverse-dev/fortune-react 1.0.2-mod-41 → 1.0.2-mod-41-patch-1

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.
@@ -1172,5 +1172,5 @@ export declare function generateAPIs(context: Context, setContext: (recipe: (ctx
1172
1172
  support: string;
1173
1173
  };
1174
1174
  };
1175
- getWorkbookContect: () => Context;
1175
+ getWorkbookContext: () => Context;
1176
1176
  };
@@ -1179,6 +1179,6 @@ declare const Workbook: React.ForwardRefExoticComponent<Settings & AdditionalPro
1179
1179
  support: string;
1180
1180
  };
1181
1181
  };
1182
- getWorkbookContect: () => Context;
1182
+ getWorkbookContext: () => Context;
1183
1183
  }>>;
1184
1184
  export default Workbook;
package/dist/index.esm.js CHANGED
@@ -784,12 +784,37 @@ var ContentEditable = function ContentEditable(_ref) {
784
784
  };
785
785
 
786
786
  var FormulaSearch = function FormulaSearch(props) {
787
+ var _context$luckysheet_s;
787
788
  var _useContext = useContext(WorkbookContext),
788
789
  context = _useContext.context;
790
+ var firstSelection = (_context$luckysheet_s = context.luckysheet_select_save) === null || _context$luckysheet_s === void 0 ? void 0 : _context$luckysheet_s[0];
791
+ var hintRef = useRef(null);
792
+ var _useState = useState(0),
793
+ _useState2 = _slicedToArray(_useState, 2),
794
+ top = _useState2[0],
795
+ setTop = _useState2[1];
796
+ var calcuatePopUpPlacement = function calcuatePopUpPlacement() {
797
+ var _hintRef$current;
798
+ if (!(firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.top) || !firstSelection.height_move || !hintRef.current) return;
799
+ var hintHeight = hintRef.current.offsetHeight;
800
+ var inputBottom = firstSelection.top + firstSelection.height_move;
801
+ var availableBelow = window.innerHeight - inputBottom;
802
+ var hintAbove = hintHeight > availableBelow;
803
+ var selectionHeight = (firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.height_move) || 0;
804
+ var divOffset = ((_hintRef$current = hintRef.current) === null || _hintRef$current === void 0 ? void 0 : _hintRef$current.offsetHeight) || 0;
805
+ setTop(hintAbove ? selectionHeight - (divOffset + 70) : selectionHeight + 4);
806
+ };
807
+ useEffect(function () {
808
+ calcuatePopUpPlacement();
809
+ });
789
810
  if (_.isEmpty(context.functionCandidates)) return null;
790
811
  return /*#__PURE__*/React.createElement("div", _objectSpread2(_objectSpread2({}, props), {}, {
812
+ ref: hintRef,
791
813
  id: "luckysheet-formula-search-c",
792
- className: "luckysheet-formula-search-c"
814
+ className: "luckysheet-formula-search-c",
815
+ style: {
816
+ top: top
817
+ }
793
818
  }), context.functionCandidates.map(function (v, index) {
794
819
  return /*#__PURE__*/React.createElement("div", {
795
820
  key: v.n,
@@ -839,8 +864,10 @@ var FormulaSearch = function FormulaSearch(props) {
839
864
  };
840
865
 
841
866
  var FormulaHint = function FormulaHint(props) {
867
+ var _context$luckysheet_s;
842
868
  var _useContext = useContext(WorkbookContext),
843
869
  context = _useContext.context;
870
+ var firstSelection = (_context$luckysheet_s = context.luckysheet_select_save) === null || _context$luckysheet_s === void 0 ? void 0 : _context$luckysheet_s[0];
844
871
  var _locale = locale(context),
845
872
  formulaMore = _locale.formulaMore;
846
873
  var fn = context.formulaCache.functionlistMap[context.functionHint];
@@ -856,7 +883,7 @@ var FormulaHint = function FormulaHint(props) {
856
883
  _useState6 = _slicedToArray(_useState5, 2),
857
884
  isKeyAdded = _useState6[0],
858
885
  setApiKeyAdded = _useState6[1];
859
- var _useState7 = useState(false),
886
+ var _useState7 = useState(true),
860
887
  _useState8 = _slicedToArray(_useState7, 2),
861
888
  showFunctionBody = _useState8[0],
862
889
  setShouldShowFunctionBody = _useState8[1];
@@ -870,11 +897,66 @@ var FormulaHint = function FormulaHint(props) {
870
897
  var apiKeyPlaceholder = {
871
898
  ETHERSCAN_API_KEY: "Etherscan API key"
872
899
  };
900
+ var hintRef = useRef(null);
901
+ var _useState9 = useState(0),
902
+ _useState0 = _slicedToArray(_useState9, 2),
903
+ top = _useState0[0],
904
+ setTop = _useState0[1];
905
+ var calcuatePopUpPlacement = function calcuatePopUpPlacement() {
906
+ var _hintRef$current;
907
+ if (!(firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.top) || !firstSelection.height_move || !hintRef.current) return;
908
+ var hintHeight = 422;
909
+ var inputBottom = firstSelection.top + firstSelection.height_move;
910
+ var availableBelow = window.innerHeight - inputBottom;
911
+ var hintAbove = hintHeight > availableBelow;
912
+ var selectionHeight = (firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.height_move) || 0;
913
+ var divOffset = ((_hintRef$current = hintRef.current) === null || _hintRef$current === void 0 ? void 0 : _hintRef$current.offsetHeight) || 0;
914
+ setTop(hintAbove ? selectionHeight - (divOffset + 70) : selectionHeight + 4);
915
+ };
916
+ useEffect(function () {
917
+ calcuatePopUpPlacement();
918
+ });
919
+ useEffect(function () {
920
+ var el = document.getElementById("function-details");
921
+ var handleWheel;
922
+ if (el) {
923
+ var scrollLockTimeout = null;
924
+ var cache = {
925
+ verticalScrollLock: false,
926
+ horizontalScrollLock: false
927
+ };
928
+ handleWheel = function handleWheel(e) {
929
+ e.preventDefault();
930
+ var step = 40;
931
+ var ratio = 1;
932
+ if (e.deltaY !== 0 && !cache.verticalScrollLock) {
933
+ cache.horizontalScrollLock = true;
934
+ el.scrollTop += (e.deltaY > 0 ? 1 : -1) * step * ratio;
935
+ } else if (e.deltaX !== 0 && !cache.horizontalScrollLock) {
936
+ cache.verticalScrollLock = true;
937
+ el.scrollLeft += (e.deltaX > 0 ? 1 : -1) * step * ratio;
938
+ }
939
+ clearTimeout(scrollLockTimeout);
940
+ scrollLockTimeout = setTimeout(function () {
941
+ cache.verticalScrollLock = false;
942
+ cache.horizontalScrollLock = false;
943
+ }, 50);
944
+ };
945
+ el.addEventListener("wheel", handleWheel, {
946
+ passive: false
947
+ });
948
+ }
949
+ return function () {
950
+ if (el && handleWheel) el.removeEventListener("wheel", handleWheel);
951
+ };
952
+ }, []);
873
953
  if (!fn) return null;
874
954
  return /*#__PURE__*/React.createElement("div", _objectSpread2(_objectSpread2({}, props), {}, {
955
+ ref: hintRef,
875
956
  id: "luckysheet-formula-help-c",
876
957
  className: "luckysheet-formula-help-c",
877
958
  style: {
959
+ top: top,
878
960
  borderWidth: "1px",
879
961
  borderColor: (fn === null || fn === void 0 ? void 0 : fn.BRAND_SECONDARY_COLOR) ? fn === null || fn === void 0 ? void 0 : fn.BRAND_SECONDARY_COLOR : "#F8F9FA",
880
962
  backgroundColor: "".concat(fn.BRAND_COLOR ? fn.BRAND_COLOR : "#F8F9FA"),
@@ -965,8 +1047,11 @@ var FormulaHint = function FormulaHint(props) {
965
1047
  height: 16
966
1048
  })))), showFunctionBody && (/*#__PURE__*/React.createElement("div", {
967
1049
  className: "luckysheet-formula-help-content",
1050
+ id: "function-details",
968
1051
  style: {
969
- backgroundColor: "".concat(fn.BRAND_COLOR ? fn.BRAND_COLOR : "#F8F9FA")
1052
+ backgroundColor: "".concat(fn.BRAND_COLOR ? fn.BRAND_COLOR : "#F8F9FA"),
1053
+ maxHeight: "318px",
1054
+ overflowY: "scroll"
970
1055
  }
971
1056
  }, fn.API_KEY && (/*#__PURE__*/React.createElement("div", {
972
1057
  style: {
@@ -1103,8 +1188,12 @@ var FormulaHint = function FormulaHint(props) {
1103
1188
  borderBottomRightRadius: "10px"
1104
1189
  },
1105
1190
  className: "w-full"
1106
- }, /*#__PURE__*/React.createElement("p", {
1107
- className: "color-text-link text-helper-text-sm"
1191
+ }, /*#__PURE__*/React.createElement("div", {
1192
+ onClick: function onClick() {
1193
+ var _document$getElementB;
1194
+ (_document$getElementB = document.getElementById("function-button")) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.click();
1195
+ },
1196
+ className: "color-text-link cursor-pointer text-helper-text-sm"
1108
1197
  }, "Learn More")));
1109
1198
  };
1110
1199
 
@@ -1203,6 +1292,38 @@ var InputBox = function InputBox() {
1203
1292
  var getActiveFormula = useCallback(function () {
1204
1293
  return document.querySelector(".luckysheet-formula-search-item-active");
1205
1294
  }, []);
1295
+ var insertSelectedFormula = useCallback(function (formulaName) {
1296
+ var _getrangeseleciton;
1297
+ var textEditor = document.getElementById("luckysheet-rich-text-editor");
1298
+ if (!textEditor) return;
1299
+ var searchTxt = ((_getrangeseleciton = getrangeseleciton()) === null || _getrangeseleciton === void 0 ? void 0 : _getrangeseleciton.textContent) || "";
1300
+ var deleteCount = searchTxt.length;
1301
+ textEditor.focus();
1302
+ var selection = window.getSelection();
1303
+ if (!selection || selection.rangeCount === 0) return;
1304
+ var range = selection.getRangeAt(0);
1305
+ if (deleteCount !== 0 && range) {
1306
+ var startOffset = Math.max(range.startOffset - deleteCount, 0);
1307
+ var endOffset = range.startOffset;
1308
+ range.setStart(range.startContainer, startOffset);
1309
+ range.setEnd(range.startContainer, endOffset);
1310
+ range.deleteContents();
1311
+ }
1312
+ var funcNode = new DOMParser().parseFromString("<span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span>"), "text/html").body.firstChild;
1313
+ var parNode = new DOMParser().parseFromString("<span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>", "text/html").body.firstChild;
1314
+ if (range === null || range === void 0 ? void 0 : range.startContainer.parentNode) {
1315
+ range.setStart(range.startContainer.parentNode, 1);
1316
+ }
1317
+ if (parNode) range.insertNode(parNode);
1318
+ if (funcNode) range.insertNode(funcNode);
1319
+ range.collapse();
1320
+ selection.removeAllRanges();
1321
+ selection.addRange(range);
1322
+ setContext(function (draftCtx) {
1323
+ draftCtx.functionCandidates = [];
1324
+ draftCtx.functionHint = formulaName;
1325
+ });
1326
+ }, [setContext]);
1206
1327
  var clearSearchItemActiveClass = useCallback(function () {
1207
1328
  var activeFormula = getActiveFormula();
1208
1329
  if (activeFormula) {
@@ -1210,89 +1331,24 @@ var InputBox = function InputBox() {
1210
1331
  }
1211
1332
  }, [getActiveFormula]);
1212
1333
  var selectActiveFormula = useCallback(function (e) {
1213
- var activeFormula = getActiveFormula();
1214
- var formulaNameDiv = activeFormula === null || activeFormula === void 0 ? void 0 : activeFormula.querySelector(".luckysheet-formula-search-func");
1215
- if (formulaNameDiv) {
1216
- var formulaName = formulaNameDiv.textContent;
1217
- var textEditor = document.getElementById("luckysheet-rich-text-editor");
1218
- if (textEditor) {
1219
- var _getrangeseleciton;
1220
- var searchTxt = ((_getrangeseleciton = getrangeseleciton()) === null || _getrangeseleciton === void 0 ? void 0 : _getrangeseleciton.textContent) || "";
1221
- var deleteCount = searchTxt.length;
1222
- textEditor.focus();
1223
- var selection = window.getSelection();
1224
- if ((selection === null || selection === void 0 ? void 0 : selection.rangeCount) === 0) return;
1225
- var range = selection === null || selection === void 0 ? void 0 : selection.getRangeAt(0);
1226
- if (deleteCount !== 0 && range) {
1227
- var startOffset = Math.max(range.startOffset - deleteCount, 0);
1228
- var endOffset = range.startOffset;
1229
- range.setStart(range.startContainer, startOffset);
1230
- range.setEnd(range.startContainer, endOffset);
1231
- range.deleteContents();
1232
- }
1233
- var functionStr = "<span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span>");
1234
- var lParStr = "<span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>";
1235
- var functionNode = new DOMParser().parseFromString(functionStr, "text/html").body.childNodes[0];
1236
- var lParNode = new DOMParser().parseFromString(lParStr, "text/html").body.childNodes[0];
1237
- if (range === null || range === void 0 ? void 0 : range.startContainer.parentNode) {
1238
- range === null || range === void 0 ? void 0 : range.setStart(range.startContainer.parentNode, 1);
1239
- }
1240
- range === null || range === void 0 ? void 0 : range.insertNode(lParNode);
1241
- range === null || range === void 0 ? void 0 : range.insertNode(functionNode);
1242
- range === null || range === void 0 ? void 0 : range.collapse();
1243
- selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
1244
- if (range) selection === null || selection === void 0 ? void 0 : selection.addRange(range);
1245
- setContext(function (draftCtx) {
1246
- draftCtx.functionCandidates = [];
1247
- draftCtx.functionHint = formulaName;
1248
- });
1249
- }
1334
+ var _getActiveFormula, _getActiveFormula$que;
1335
+ var formulaName = (_getActiveFormula = getActiveFormula()) === null || _getActiveFormula === void 0 ? void 0 : (_getActiveFormula$que = _getActiveFormula.querySelector(".luckysheet-formula-search-func")) === null || _getActiveFormula$que === void 0 ? void 0 : _getActiveFormula$que.textContent;
1336
+ if (formulaName) {
1337
+ insertSelectedFormula(formulaName);
1250
1338
  e.preventDefault();
1251
1339
  e.stopPropagation();
1252
1340
  }
1253
- }, [getActiveFormula, setContext]);
1341
+ }, [getActiveFormula, insertSelectedFormula]);
1254
1342
  var selectActiveFormulaOnClick = useCallback(function (e) {
1255
- var activeFormula = getActiveFormula();
1256
- var formulaNameDiv = activeFormula === null || activeFormula === void 0 ? void 0 : activeFormula.querySelector(".luckysheet-formula-search-func");
1257
- if (formulaNameDiv) {
1258
- var formulaName = formulaNameDiv.textContent;
1259
- var textEditor = document.getElementById("luckysheet-rich-text-editor");
1260
- if (textEditor) {
1261
- var _getrangeseleciton2;
1262
- var searchTxt = ((_getrangeseleciton2 = getrangeseleciton()) === null || _getrangeseleciton2 === void 0 ? void 0 : _getrangeseleciton2.textContent) || "";
1263
- var deleteCount = searchTxt.length;
1264
- textEditor.focus();
1265
- var selection = window.getSelection();
1266
- if ((selection === null || selection === void 0 ? void 0 : selection.rangeCount) === 0) return;
1267
- var range = selection === null || selection === void 0 ? void 0 : selection.getRangeAt(0);
1268
- if (deleteCount !== 0 && range) {
1269
- var startOffset = Math.max(range.startOffset - deleteCount, 0);
1270
- var endOffset = range.startOffset;
1271
- range.setStart(range.startContainer, startOffset);
1272
- range.setEnd(range.startContainer, endOffset);
1273
- range.deleteContents();
1274
- }
1275
- var functionStr = "<span dir=\"auto\" class=\"luckysheet-formula-text-func\">".concat(formulaName, "</span>");
1276
- var lParStr = "<span dir=\"auto\" class=\"luckysheet-formula-text-lpar\">(</span>";
1277
- var functionNode = new DOMParser().parseFromString(functionStr, "text/html").body.childNodes[0];
1278
- var lParNode = new DOMParser().parseFromString(lParStr, "text/html").body.childNodes[0];
1279
- if (range === null || range === void 0 ? void 0 : range.startContainer.parentNode) {
1280
- range === null || range === void 0 ? void 0 : range.setStart(range.startContainer.parentNode, 1);
1281
- }
1282
- range === null || range === void 0 ? void 0 : range.insertNode(lParNode);
1283
- range === null || range === void 0 ? void 0 : range.insertNode(functionNode);
1284
- range === null || range === void 0 ? void 0 : range.collapse();
1285
- selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
1286
- if (range) selection === null || selection === void 0 ? void 0 : selection.addRange(range);
1287
- setContext(function (draftCtx) {
1288
- draftCtx.functionCandidates = [];
1289
- draftCtx.functionHint = formulaName;
1290
- });
1291
- }
1343
+ var _getActiveFormula2, _getActiveFormula2$qu;
1344
+ preText.current = inputRef.current.innerText;
1345
+ var formulaName = (_getActiveFormula2 = getActiveFormula()) === null || _getActiveFormula2 === void 0 ? void 0 : (_getActiveFormula2$qu = _getActiveFormula2.querySelector(".luckysheet-formula-search-func")) === null || _getActiveFormula2$qu === void 0 ? void 0 : _getActiveFormula2$qu.textContent;
1346
+ if (formulaName) {
1347
+ insertSelectedFormula(formulaName);
1292
1348
  e.preventDefault();
1293
1349
  e.stopPropagation();
1294
1350
  }
1295
- }, [getActiveFormula, setContext]);
1351
+ }, [getActiveFormula, insertSelectedFormula]);
1296
1352
  var onKeyDown = useCallback(function (e) {
1297
1353
  lastKeyDownEventRef.current = new KeyboardEvent(e.type, e.nativeEvent);
1298
1354
  preText.current = inputRef.current.innerText;
@@ -1409,10 +1465,7 @@ var InputBox = function InputBox() {
1409
1465
  onKeyDown: onKeyDown,
1410
1466
  onPaste: onPaste,
1411
1467
  allowEdit: edit ? !isHidenRC : edit
1412
- })), document.activeElement === inputRef.current && (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormulaSearch, {
1413
- style: {
1414
- top: ((firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.height_move) || 0) + 4
1415
- },
1468
+ })), (context.functionCandidates.length > 0 || context.functionHint) && (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormulaSearch, {
1416
1469
  onMouseOver: function onMouseOver(e) {
1417
1470
  if (document.getElementById("luckysheet-formula-search-c")) {
1418
1471
  var hoveredItem = e.target.closest(".luckysheet-formula-search-item");
@@ -1422,14 +1475,10 @@ var InputBox = function InputBox() {
1422
1475
  }
1423
1476
  e.preventDefault();
1424
1477
  },
1425
- onClick: function onClick(e) {
1478
+ onMouseDown: function onMouseDown(e) {
1426
1479
  selectActiveFormulaOnClick(e);
1427
1480
  }
1428
- }), /*#__PURE__*/React.createElement(FormulaHint, {
1429
- style: {
1430
- top: ((firstSelection === null || firstSelection === void 0 ? void 0 : firstSelection.height_move) || 0) + 4
1431
- }
1432
- }))));
1481
+ }), /*#__PURE__*/React.createElement(FormulaHint, null))));
1433
1482
  };
1434
1483
 
1435
1484
  var ScrollBar = function ScrollBar(_ref) {
@@ -4314,6 +4363,9 @@ var Sheet = function Sheet(_ref) {
4314
4363
  }
4315
4364
  }, [context, refs.canvas, refs.globalCache.freezen, setContext, sheet.id]);
4316
4365
  var onWheel = useCallback(function (e) {
4366
+ var el = document.getElementById("function-details");
4367
+ var isMouseOver = el === null || el === void 0 ? void 0 : el.matches(":hover");
4368
+ if (el && isMouseOver) return;
4317
4369
  setContext(function (draftCtx) {
4318
4370
  handleGlobalWheel(draftCtx, e, refs.globalCache, refs.scrollbarX.current, refs.scrollbarY.current);
4319
4371
  });
@@ -10535,7 +10587,7 @@ function generateAPIs(context, setContext, handleUndo, handleRedo, settings, cel
10535
10587
  getLocaleContext: function getLocaleContext() {
10536
10588
  return locale(context);
10537
10589
  },
10538
- getWorkbookContect: function getWorkbookContect() {
10590
+ getWorkbookContext: function getWorkbookContext() {
10539
10591
  return context;
10540
10592
  }
10541
10593
  };