@leankylin-sheet/react 5.2.59 → 5.2.61

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.css CHANGED
@@ -1579,8 +1579,9 @@ html::-webkit-scrollbar-button {
1579
1579
  color: #555;
1580
1580
  }
1581
1581
 
1582
- /* 搜索范围下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
- #leankylin-search-replace #searchTypeSelect {
1582
+ /* 搜索范围/搜索区域下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
+ #leankylin-search-replace #searchTypeSelect,
1584
+ #leankylin-search-replace #searchRangeSelect {
1584
1585
  display: flex;
1585
1586
  align-items: center;
1586
1587
  gap: 8px;
@@ -1589,11 +1590,13 @@ html::-webkit-scrollbar-button {
1589
1590
  white-space: nowrap;
1590
1591
  }
1591
1592
 
1592
- #leankylin-search-replace #searchTypeSelect > span {
1593
+ #leankylin-search-replace #searchTypeSelect > span,
1594
+ #leankylin-search-replace #searchRangeSelect > span {
1593
1595
  flex-shrink: 0;
1594
1596
  }
1595
1597
 
1596
- #leankylin-search-replace #searchTypeSelect select {
1598
+ #leankylin-search-replace #searchTypeSelect select,
1599
+ #leankylin-search-replace #searchRangeSelect select {
1597
1600
  flex: 1;
1598
1601
  width: auto;
1599
1602
  height: 32px;
@@ -1615,11 +1618,13 @@ html::-webkit-scrollbar-button {
1615
1618
  box-sizing: border-box;
1616
1619
  }
1617
1620
 
1618
- #leankylin-search-replace #searchTypeSelect select:hover {
1621
+ #leankylin-search-replace #searchTypeSelect select:hover,
1622
+ #leankylin-search-replace #searchRangeSelect select:hover {
1619
1623
  border-color: #b0aefe;
1620
1624
  }
1621
1625
 
1622
- #leankylin-search-replace #searchTypeSelect select:focus {
1626
+ #leankylin-search-replace #searchTypeSelect select:focus,
1627
+ #leankylin-search-replace #searchRangeSelect select:focus {
1623
1628
  border-color: #8C89FE;
1624
1629
  box-shadow: 0 0 0 3px rgba(140, 137, 254, 0.12);
1625
1630
  }
@@ -1650,10 +1655,12 @@ html::-webkit-scrollbar-button {
1650
1655
  background-color: #f9f9ff;
1651
1656
  }
1652
1657
 
1653
- /* 关闭按钮 */
1658
+ /* 关闭按钮:始终固定于弹窗右下角,宽度紧凑 */
1654
1659
  #leankylin-search-replace .close-button {
1655
- margin: 12px 0 0;
1656
- padding: 6px 20px;
1660
+ align-self: flex-end;
1661
+ flex-shrink: 0;
1662
+ margin: 20px 0 0;
1663
+ padding: 6px 14px;
1657
1664
  border-radius: 6px;
1658
1665
  font-size: 13px;
1659
1666
  transition: all 0.15s;
@@ -1579,8 +1579,9 @@ html::-webkit-scrollbar-button {
1579
1579
  color: #555;
1580
1580
  }
1581
1581
 
1582
- /* 搜索范围下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
- #leankylin-search-replace #searchTypeSelect {
1582
+ /* 搜索范围/搜索区域下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
+ #leankylin-search-replace #searchTypeSelect,
1584
+ #leankylin-search-replace #searchRangeSelect {
1584
1585
  display: flex;
1585
1586
  align-items: center;
1586
1587
  gap: 8px;
@@ -1589,11 +1590,13 @@ html::-webkit-scrollbar-button {
1589
1590
  white-space: nowrap;
1590
1591
  }
1591
1592
 
1592
- #leankylin-search-replace #searchTypeSelect > span {
1593
+ #leankylin-search-replace #searchTypeSelect > span,
1594
+ #leankylin-search-replace #searchRangeSelect > span {
1593
1595
  flex-shrink: 0;
1594
1596
  }
1595
1597
 
1596
- #leankylin-search-replace #searchTypeSelect select {
1598
+ #leankylin-search-replace #searchTypeSelect select,
1599
+ #leankylin-search-replace #searchRangeSelect select {
1597
1600
  flex: 1;
1598
1601
  width: auto;
1599
1602
  height: 32px;
@@ -1615,11 +1618,13 @@ html::-webkit-scrollbar-button {
1615
1618
  box-sizing: border-box;
1616
1619
  }
1617
1620
 
1618
- #leankylin-search-replace #searchTypeSelect select:hover {
1621
+ #leankylin-search-replace #searchTypeSelect select:hover,
1622
+ #leankylin-search-replace #searchRangeSelect select:hover {
1619
1623
  border-color: #b0aefe;
1620
1624
  }
1621
1625
 
1622
- #leankylin-search-replace #searchTypeSelect select:focus {
1626
+ #leankylin-search-replace #searchTypeSelect select:focus,
1627
+ #leankylin-search-replace #searchRangeSelect select:focus {
1623
1628
  border-color: #8C89FE;
1624
1629
  box-shadow: 0 0 0 3px rgba(140, 137, 254, 0.12);
1625
1630
  }
@@ -1650,10 +1655,12 @@ html::-webkit-scrollbar-button {
1650
1655
  background-color: #f9f9ff;
1651
1656
  }
1652
1657
 
1653
- /* 关闭按钮 */
1658
+ /* 关闭按钮:始终固定于弹窗右下角,宽度紧凑 */
1654
1659
  #leankylin-search-replace .close-button {
1655
- margin: 12px 0 0;
1656
- padding: 6px 20px;
1660
+ align-self: flex-end;
1661
+ flex-shrink: 0;
1662
+ margin: 20px 0 0;
1663
+ padding: 6px 14px;
1657
1664
  border-radius: 6px;
1658
1665
  font-size: 13px;
1659
1666
  transition: all 0.15s;
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defaultContext, defaultSettings, getSheetIndex, colLocationByIndex, fixPositionOnFrozenCells, colLocation, getFlowdata, isAllowEdit, handleColumnHeaderMouseDown, handleColSizeHandleMouseDown, handleColFreezeHandleMouseDown, handleContextMenu, selectTitlesMap, selectTitlesRange, fixColumnStyleOverflowInFreeze, rowLocationByIndex, rowLocation, handleRowHeaderMouseDown, handleRowSizeHandleMouseDown, handleRowFreezeHandleMouseDown, fixRowStyleOverflowInFreeze, functionHTMLGenerate, locale, getCellValue, createRangeHightlight, isInlineStringCell, getInlineStringHTML, valueShowEs, escapeHTMLTag, escapeScriptTag, isShowHidenCR, cancelNormalSelected, moveHighlightCell, updateCell, israngeseleciton, handleFormulaInput, onSearchDialogMoveStart, replaceAll, replace, searchAll, searchNext, changeSheet, normalizeSelection, scrollToHighlightCell, isLinkValid, getRangetxt, goToLink, replaceHtml, removeHyperlink, onRangeSelectionModalMoveStart, saveHyperlink, createFilterOptions, onImageMoveStart, onImageResizeStart, showComments, setEditingComment, onCommentBoxMoveStart, onCommentBoxResizeStart, confirmMessage, getRangeByTxt, getDropdownList, setCellValue, setConditionRules, mergeBorder, setDropcownValue, handleCellAreaMouseDown, handleCellAreaMouseMove, handleCellAreaDragOver, handleCellDrop, handleCellAreaDoubleClick, selectAll, showLinkCard, getCellRowColumn, getCellHyperlink, handleOverlayMouseMove, handleOverlayMouseUp, handleKeydownForZoom, handleOverlayTouchStart, handleOverlayTouchMove, handleOverlayTouchEnd, onCellsMoveStart, createDropCellRange, handleDropCellDoubleClick, updateContextWithSheetData, updateContextWithCanvas, initFreeze, Canvas, handleGlobalWheel, setCaretPosition, getDataArr, updateMoreCell, getRegStr, getOptionValue, getSelectRange, applyLocation, updateItem, update, normalizedCellAttr, updateFormat, handleTextSize, handleHorizontalAlign, handleVerticalAlign, handleScreenShot, showImgChooser, insertImage, editComment, deleteComment, showHideComment, showHideAllComments, newComment, handleSum, autoSelectionFormula, handleMerge, handleBorder, handleFreeze, handleSort, createFilter, clearFilter, toolbarItemSelectedFunc, toolbarItemClickHandler, handleTextColor, handleTextBackground, getDataBySelectionNoCopy, getInlineStringNoStyle, rangeHightlightselected, editSheetName, setNextSheet, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, addSheet, indexToColumnChar, sortSelection, handleCopy, insertRowCol, deleteRowCol, hideSelected, showSelected, api, removeActiveImage, deleteSelectedCellText, jfrefreshgrid, handleLink, deleteSheet, opToPatch, orderbydatafiler, getFilterColumnValues, getFilterColumnColors, saveFilter, cancelActiveImgItem, patchToOp, filterPatch, inverseRowColOptions, ensureSheetIndex, initSheetIndex, handleGlobalKeyDown, handlePasteByLeanklin, groupValuesRefresh } from '@leankylin-sheet/core';
1
+ import { defaultContext, defaultSettings, getSheetIndex, colLocationByIndex, fixPositionOnFrozenCells, colLocation, getFlowdata, isAllowEdit, handleColumnHeaderMouseDown, handleColSizeHandleMouseDown, handleColFreezeHandleMouseDown, handleContextMenu, selectTitlesMap, selectTitlesRange, fixColumnStyleOverflowInFreeze, rowLocationByIndex, rowLocation, handleRowHeaderMouseDown, handleRowSizeHandleMouseDown, handleRowFreezeHandleMouseDown, fixRowStyleOverflowInFreeze, functionHTMLGenerate, locale, getCellValue, createRangeHightlight, isInlineStringCell, getInlineStringHTML, valueShowEs, escapeHTMLTag, escapeScriptTag, isShowHidenCR, cancelNormalSelected, moveHighlightCell, updateCell, israngeseleciton, handleFormulaInput, onSearchDialogMoveStart, replaceAll, replace, searchAll, searchNext, changeSheet, normalizeSelection, scrollToHighlightCell, chatatABC, isLinkValid, getRangetxt, goToLink, replaceHtml, removeHyperlink, onRangeSelectionModalMoveStart, saveHyperlink, createFilterOptions, onImageMoveStart, onImageResizeStart, showComments, setEditingComment, onCommentBoxMoveStart, onCommentBoxResizeStart, confirmMessage, getRangeByTxt, getDropdownList, setCellValue, setConditionRules, mergeBorder, setDropcownValue, handleCellAreaMouseDown, handleCellAreaMouseMove, handleCellAreaDragOver, handleCellDrop, handleCellAreaDoubleClick, selectAll, showLinkCard, getCellRowColumn, getCellHyperlink, handleOverlayMouseMove, handleOverlayMouseUp, handleKeydownForZoom, handleOverlayTouchStart, handleOverlayTouchMove, handleOverlayTouchEnd, onCellsMoveStart, createDropCellRange, handleDropCellDoubleClick, updateContextWithSheetData, updateContextWithCanvas, initFreeze, Canvas, handleGlobalWheel, setCaretPosition, getDataArr, updateMoreCell, getRegStr, getOptionValue, getSelectRange, applyLocation, updateItem, update, normalizedCellAttr, updateFormat, handleTextSize, handleHorizontalAlign, handleVerticalAlign, handleScreenShot, showImgChooser, insertImage, editComment, deleteComment, showHideComment, showHideAllComments, newComment, handleSum, autoSelectionFormula, handleMerge, handleBorder, handleFreeze, handleSort, createFilter, clearFilter, toolbarItemSelectedFunc, toolbarItemClickHandler, handleTextColor, handleTextBackground, getDataBySelectionNoCopy, getInlineStringNoStyle, rangeHightlightselected, editSheetName, setNextSheet, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, addSheet, indexToColumnChar, sortSelection, handleCopy, insertRowCol, deleteRowCol, hideSelected, showSelected, api, removeActiveImage, deleteSelectedCellText, jfrefreshgrid, handleLink, deleteSheet, opToPatch, orderbydatafiler, getFilterColumnValues, getFilterColumnColors, saveFilter, cancelActiveImgItem, patchToOp, filterPatch, inverseRowColOptions, ensureSheetIndex, initSheetIndex, handleGlobalKeyDown, handlePasteByLeanklin, groupValuesRefresh } from '@leankylin-sheet/core';
2
2
  import React, { useContext, useRef, useState, useMemo, useCallback, useEffect, useLayoutEffect, useImperativeHandle } from 'react';
3
3
  import produce, { applyPatches, enablePatches, produceWithPatches } from 'immer';
4
4
  import _ from 'lodash';
@@ -1585,6 +1585,29 @@ function useAlert() {
1585
1585
  };
1586
1586
  }
1587
1587
 
1588
+ function getSelectionRangeName(selection) {
1589
+ if (selection == null || selection.length === 0) return null;
1590
+ var names = [];
1591
+ var _iterator = _createForOfIteratorHelper(selection),
1592
+ _step;
1593
+ try {
1594
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1595
+ var item = _step.value;
1596
+ var row = item.row,
1597
+ column = item.column;
1598
+ var row1 = Math.min(row[0], row[1]);
1599
+ var row2 = Math.max(row[0], row[1]);
1600
+ var col1 = Math.min(column[0], column[1]);
1601
+ var col2 = Math.max(column[0], column[1]);
1602
+ names.push(row1 === row2 && col1 === col2 ? "".concat(chatatABC(col1)).concat(row1 + 1) : "".concat(chatatABC(col1)).concat(row1 + 1, ":").concat(chatatABC(col2)).concat(row2 + 1));
1603
+ }
1604
+ } catch (err) {
1605
+ _iterator.e(err);
1606
+ } finally {
1607
+ _iterator.f();
1608
+ }
1609
+ return names.join(",");
1610
+ }
1588
1611
  var SearchReplace = function SearchReplace() {
1589
1612
  var _useContext = useContext(WorkbookContext),
1590
1613
  context = _useContext.context,
@@ -1627,6 +1650,28 @@ var SearchReplace = function SearchReplace() {
1627
1650
  _useState14 = _slicedToArray(_useState13, 2),
1628
1651
  searchType = _useState14[0],
1629
1652
  setSearchType = _useState14[1];
1653
+ var _useState15 = useState("currentSheet"),
1654
+ _useState16 = _slicedToArray(_useState15, 2),
1655
+ searchRange = _useState16[0],
1656
+ setSearchRange = _useState16[1];
1657
+ var _useState17 = useState(function () {
1658
+ var selection = context.luckysheet_select_save;
1659
+ var isRealSelection = selection != null && selection.length > 0 && !(selection.length === 1 && selection[0].row[0] === selection[0].row[1] && selection[0].column[0] === selection[0].column[1]);
1660
+ return isRealSelection ? _.assign([], selection) : [];
1661
+ }),
1662
+ _useState18 = _slicedToArray(_useState17, 2),
1663
+ searchSelection = _useState18[0],
1664
+ setSearchSelection = _useState18[1];
1665
+ var sheetIndex = getSheetIndex(context, context.currentSheetId);
1666
+ var currentSheetName = sheetIndex == null ? null : context.luckysheetfile[sheetIndex].name;
1667
+ var hasSelectionOption = useMemo(function () {
1668
+ return searchSelection != null && searchSelection.length > 0;
1669
+ }, [searchSelection]);
1670
+ var selectionRangeName = getSelectionRangeName(searchSelection);
1671
+ var selectionRangeDisplay = findAndReplace.searchRangeSelection;
1672
+ if (selectionRangeName != null) {
1673
+ selectionRangeDisplay = currentSheetName ? "".concat(findAndReplace.searchRangeSelection, " (").concat(currentSheetName, "!").concat(selectionRangeName, ")") : "".concat(findAndReplace.searchRangeSelection, " (").concat(selectionRangeName, ")");
1674
+ }
1630
1675
  var closeDialog = useCallback(function () {
1631
1676
  _.set(refs.globalCache, "searchDialog.mouseEnter", false);
1632
1677
  setContext(function (draftCtx) {
@@ -1724,6 +1769,23 @@ var SearchReplace = function SearchReplace() {
1724
1769
  }, findAndReplace.searchTypeFormula), /*#__PURE__*/React.createElement("option", {
1725
1770
  value: "m"
1726
1771
  }, findAndReplace.searchTypeDisplay))), /*#__PURE__*/React.createElement("div", {
1772
+ id: "searchRangeSelect"
1773
+ }, /*#__PURE__*/React.createElement("span", null, findAndReplace.searchRangeLabel, "\uFF1A"), /*#__PURE__*/React.createElement("select", {
1774
+ value: searchRange,
1775
+ onChange: function onChange(e) {
1776
+ var value = e.target.value;
1777
+ setSearchRange(value);
1778
+ if (value === "selection") {
1779
+ setSearchSelection(_.assign([], context.luckysheet_select_save));
1780
+ }
1781
+ }
1782
+ }, /*#__PURE__*/React.createElement("option", {
1783
+ value: "currentSheet"
1784
+ }, currentSheetName ? "".concat(findAndReplace.searchRangeCurrentSheet, "\uFF08").concat(currentSheetName, "\uFF09") : findAndReplace.searchRangeCurrentSheet), hasSelectionOption && ( /*#__PURE__*/React.createElement("option", {
1785
+ value: "selection"
1786
+ }, selectionRangeDisplay)), /*#__PURE__*/React.createElement("option", {
1787
+ value: "all"
1788
+ }, findAndReplace.searchRangeAllSheet))), /*#__PURE__*/React.createElement("div", {
1727
1789
  className: "textboxs",
1728
1790
  id: "searchInput"
1729
1791
  }, findAndReplace.findTextbox, "\uFF1A", /*#__PURE__*/React.createElement("input", {
@@ -1787,7 +1849,7 @@ var SearchReplace = function SearchReplace() {
1787
1849
  onClick: function onClick() {
1788
1850
  setContext(function (draftCtx) {
1789
1851
  setSelectedCell(undefined);
1790
- var alertMsg = replaceAll(draftCtx, searchText, replaceText, checkMode, searchType);
1852
+ var alertMsg = replaceAll(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
1791
1853
  showAlert(alertMsg);
1792
1854
  });
1793
1855
  }
@@ -1797,7 +1859,7 @@ var SearchReplace = function SearchReplace() {
1797
1859
  onClick: function onClick() {
1798
1860
  return setContext(function (draftCtx) {
1799
1861
  setSelectedCell(undefined);
1800
- var alertMsg = replace(draftCtx, searchText, replaceText, checkMode, searchType);
1862
+ var alertMsg = replace(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
1801
1863
  if (alertMsg != null) {
1802
1864
  showAlert(alertMsg);
1803
1865
  }
@@ -1810,7 +1872,7 @@ var SearchReplace = function SearchReplace() {
1810
1872
  return setContext(function (draftCtx) {
1811
1873
  setSelectedCell(undefined);
1812
1874
  if (!searchText) return;
1813
- var res = searchAll(draftCtx, searchText, checkMode, searchType);
1875
+ var res = searchAll(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
1814
1876
  setSearchResult(res);
1815
1877
  if (_.isEmpty(res)) showAlert(findAndReplace.noFindTip);
1816
1878
  });
@@ -1821,14 +1883,11 @@ var SearchReplace = function SearchReplace() {
1821
1883
  onClick: function onClick() {
1822
1884
  return setContext(function (draftCtx) {
1823
1885
  setSearchResult([]);
1824
- var alertMsg = searchNext(draftCtx, searchText, checkMode, searchType);
1886
+ var alertMsg = searchNext(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
1825
1887
  if (alertMsg != null) showAlert(alertMsg);
1826
1888
  });
1827
1889
  }
1828
- }, findAndReplace.findBtn))), /*#__PURE__*/React.createElement("div", {
1829
- className: "close-button leankylin-message-box-button button-default",
1830
- onClick: closeDialog
1831
- }, button.close), searchResult.length > 0 && ( /*#__PURE__*/React.createElement("div", {
1890
+ }, findAndReplace.findBtn))), searchResult.length > 0 && ( /*#__PURE__*/React.createElement("div", {
1832
1891
  id: "searchAllbox",
1833
1892
  onScroll: function onScroll(e) {
1834
1893
  return e.stopPropagation();
@@ -1861,7 +1920,10 @@ var SearchReplace = function SearchReplace() {
1861
1920
  });
1862
1921
  }
1863
1922
  }, /*#__PURE__*/React.createElement("span", null, v.sheetName), /*#__PURE__*/React.createElement("span", null, v.cellPosition), /*#__PURE__*/React.createElement("span", null, v.value), /*#__PURE__*/React.createElement("span", null, v.formula), /*#__PURE__*/React.createElement("span", null, v.displayValue));
1864
- })))))), body);
1923
+ })))), /*#__PURE__*/React.createElement("div", {
1924
+ className: "close-button leankylin-message-box-button button-default",
1925
+ onClick: closeDialog
1926
+ }, button.close))), body);
1865
1927
  };
1866
1928
 
1867
1929
  var LinkEditCard = function LinkEditCard(_ref) {
package/dist/index.js CHANGED
@@ -1595,6 +1595,29 @@ function useAlert() {
1595
1595
  };
1596
1596
  }
1597
1597
 
1598
+ function getSelectionRangeName(selection) {
1599
+ if (selection == null || selection.length === 0) return null;
1600
+ var names = [];
1601
+ var _iterator = _createForOfIteratorHelper(selection),
1602
+ _step;
1603
+ try {
1604
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1605
+ var item = _step.value;
1606
+ var row = item.row,
1607
+ column = item.column;
1608
+ var row1 = Math.min(row[0], row[1]);
1609
+ var row2 = Math.max(row[0], row[1]);
1610
+ var col1 = Math.min(column[0], column[1]);
1611
+ var col2 = Math.max(column[0], column[1]);
1612
+ names.push(row1 === row2 && col1 === col2 ? "".concat(core.chatatABC(col1)).concat(row1 + 1) : "".concat(core.chatatABC(col1)).concat(row1 + 1, ":").concat(core.chatatABC(col2)).concat(row2 + 1));
1613
+ }
1614
+ } catch (err) {
1615
+ _iterator.e(err);
1616
+ } finally {
1617
+ _iterator.f();
1618
+ }
1619
+ return names.join(",");
1620
+ }
1598
1621
  var SearchReplace = function SearchReplace() {
1599
1622
  var _useContext = React.useContext(WorkbookContext),
1600
1623
  context = _useContext.context,
@@ -1637,6 +1660,28 @@ var SearchReplace = function SearchReplace() {
1637
1660
  _useState14 = _slicedToArray(_useState13, 2),
1638
1661
  searchType = _useState14[0],
1639
1662
  setSearchType = _useState14[1];
1663
+ var _useState15 = React.useState("currentSheet"),
1664
+ _useState16 = _slicedToArray(_useState15, 2),
1665
+ searchRange = _useState16[0],
1666
+ setSearchRange = _useState16[1];
1667
+ var _useState17 = React.useState(function () {
1668
+ var selection = context.luckysheet_select_save;
1669
+ var isRealSelection = selection != null && selection.length > 0 && !(selection.length === 1 && selection[0].row[0] === selection[0].row[1] && selection[0].column[0] === selection[0].column[1]);
1670
+ return isRealSelection ? ___default['default'].assign([], selection) : [];
1671
+ }),
1672
+ _useState18 = _slicedToArray(_useState17, 2),
1673
+ searchSelection = _useState18[0],
1674
+ setSearchSelection = _useState18[1];
1675
+ var sheetIndex = core.getSheetIndex(context, context.currentSheetId);
1676
+ var currentSheetName = sheetIndex == null ? null : context.luckysheetfile[sheetIndex].name;
1677
+ var hasSelectionOption = React.useMemo(function () {
1678
+ return searchSelection != null && searchSelection.length > 0;
1679
+ }, [searchSelection]);
1680
+ var selectionRangeName = getSelectionRangeName(searchSelection);
1681
+ var selectionRangeDisplay = findAndReplace.searchRangeSelection;
1682
+ if (selectionRangeName != null) {
1683
+ selectionRangeDisplay = currentSheetName ? "".concat(findAndReplace.searchRangeSelection, " (").concat(currentSheetName, "!").concat(selectionRangeName, ")") : "".concat(findAndReplace.searchRangeSelection, " (").concat(selectionRangeName, ")");
1684
+ }
1640
1685
  var closeDialog = React.useCallback(function () {
1641
1686
  ___default['default'].set(refs.globalCache, "searchDialog.mouseEnter", false);
1642
1687
  setContext(function (draftCtx) {
@@ -1734,6 +1779,23 @@ var SearchReplace = function SearchReplace() {
1734
1779
  }, findAndReplace.searchTypeFormula), /*#__PURE__*/React__default['default'].createElement("option", {
1735
1780
  value: "m"
1736
1781
  }, findAndReplace.searchTypeDisplay))), /*#__PURE__*/React__default['default'].createElement("div", {
1782
+ id: "searchRangeSelect"
1783
+ }, /*#__PURE__*/React__default['default'].createElement("span", null, findAndReplace.searchRangeLabel, "\uFF1A"), /*#__PURE__*/React__default['default'].createElement("select", {
1784
+ value: searchRange,
1785
+ onChange: function onChange(e) {
1786
+ var value = e.target.value;
1787
+ setSearchRange(value);
1788
+ if (value === "selection") {
1789
+ setSearchSelection(___default['default'].assign([], context.luckysheet_select_save));
1790
+ }
1791
+ }
1792
+ }, /*#__PURE__*/React__default['default'].createElement("option", {
1793
+ value: "currentSheet"
1794
+ }, currentSheetName ? "".concat(findAndReplace.searchRangeCurrentSheet, "\uFF08").concat(currentSheetName, "\uFF09") : findAndReplace.searchRangeCurrentSheet), hasSelectionOption && ( /*#__PURE__*/React__default['default'].createElement("option", {
1795
+ value: "selection"
1796
+ }, selectionRangeDisplay)), /*#__PURE__*/React__default['default'].createElement("option", {
1797
+ value: "all"
1798
+ }, findAndReplace.searchRangeAllSheet))), /*#__PURE__*/React__default['default'].createElement("div", {
1737
1799
  className: "textboxs",
1738
1800
  id: "searchInput"
1739
1801
  }, findAndReplace.findTextbox, "\uFF1A", /*#__PURE__*/React__default['default'].createElement("input", {
@@ -1797,7 +1859,7 @@ var SearchReplace = function SearchReplace() {
1797
1859
  onClick: function onClick() {
1798
1860
  setContext(function (draftCtx) {
1799
1861
  setSelectedCell(undefined);
1800
- var alertMsg = core.replaceAll(draftCtx, searchText, replaceText, checkMode, searchType);
1862
+ var alertMsg = core.replaceAll(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
1801
1863
  showAlert(alertMsg);
1802
1864
  });
1803
1865
  }
@@ -1807,7 +1869,7 @@ var SearchReplace = function SearchReplace() {
1807
1869
  onClick: function onClick() {
1808
1870
  return setContext(function (draftCtx) {
1809
1871
  setSelectedCell(undefined);
1810
- var alertMsg = core.replace(draftCtx, searchText, replaceText, checkMode, searchType);
1872
+ var alertMsg = core.replace(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
1811
1873
  if (alertMsg != null) {
1812
1874
  showAlert(alertMsg);
1813
1875
  }
@@ -1820,7 +1882,7 @@ var SearchReplace = function SearchReplace() {
1820
1882
  return setContext(function (draftCtx) {
1821
1883
  setSelectedCell(undefined);
1822
1884
  if (!searchText) return;
1823
- var res = core.searchAll(draftCtx, searchText, checkMode, searchType);
1885
+ var res = core.searchAll(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
1824
1886
  setSearchResult(res);
1825
1887
  if (___default['default'].isEmpty(res)) showAlert(findAndReplace.noFindTip);
1826
1888
  });
@@ -1831,14 +1893,11 @@ var SearchReplace = function SearchReplace() {
1831
1893
  onClick: function onClick() {
1832
1894
  return setContext(function (draftCtx) {
1833
1895
  setSearchResult([]);
1834
- var alertMsg = core.searchNext(draftCtx, searchText, checkMode, searchType);
1896
+ var alertMsg = core.searchNext(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
1835
1897
  if (alertMsg != null) showAlert(alertMsg);
1836
1898
  });
1837
1899
  }
1838
- }, findAndReplace.findBtn))), /*#__PURE__*/React__default['default'].createElement("div", {
1839
- className: "close-button leankylin-message-box-button button-default",
1840
- onClick: closeDialog
1841
- }, button.close), searchResult.length > 0 && ( /*#__PURE__*/React__default['default'].createElement("div", {
1900
+ }, findAndReplace.findBtn))), searchResult.length > 0 && ( /*#__PURE__*/React__default['default'].createElement("div", {
1842
1901
  id: "searchAllbox",
1843
1902
  onScroll: function onScroll(e) {
1844
1903
  return e.stopPropagation();
@@ -1871,7 +1930,10 @@ var SearchReplace = function SearchReplace() {
1871
1930
  });
1872
1931
  }
1873
1932
  }, /*#__PURE__*/React__default['default'].createElement("span", null, v.sheetName), /*#__PURE__*/React__default['default'].createElement("span", null, v.cellPosition), /*#__PURE__*/React__default['default'].createElement("span", null, v.value), /*#__PURE__*/React__default['default'].createElement("span", null, v.formula), /*#__PURE__*/React__default['default'].createElement("span", null, v.displayValue));
1874
- })))))), body);
1933
+ })))), /*#__PURE__*/React__default['default'].createElement("div", {
1934
+ className: "close-button leankylin-message-box-button button-default",
1935
+ onClick: closeDialog
1936
+ }, button.close))), body);
1875
1937
  };
1876
1938
 
1877
1939
  var LinkEditCard = function LinkEditCard(_ref) {
@@ -1579,8 +1579,9 @@ html::-webkit-scrollbar-button {
1579
1579
  color: #555;
1580
1580
  }
1581
1581
 
1582
- /* 搜索范围下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
- #leankylin-search-replace #searchTypeSelect {
1582
+ /* 搜索范围/搜索区域下拉 - 与查找/替换输入行同样的布局,select 展开至 input 相同宽度 */
1583
+ #leankylin-search-replace #searchTypeSelect,
1584
+ #leankylin-search-replace #searchRangeSelect {
1584
1585
  display: flex;
1585
1586
  align-items: center;
1586
1587
  gap: 8px;
@@ -1589,11 +1590,13 @@ html::-webkit-scrollbar-button {
1589
1590
  white-space: nowrap;
1590
1591
  }
1591
1592
 
1592
- #leankylin-search-replace #searchTypeSelect > span {
1593
+ #leankylin-search-replace #searchTypeSelect > span,
1594
+ #leankylin-search-replace #searchRangeSelect > span {
1593
1595
  flex-shrink: 0;
1594
1596
  }
1595
1597
 
1596
- #leankylin-search-replace #searchTypeSelect select {
1598
+ #leankylin-search-replace #searchTypeSelect select,
1599
+ #leankylin-search-replace #searchRangeSelect select {
1597
1600
  flex: 1;
1598
1601
  width: auto;
1599
1602
  height: 32px;
@@ -1615,11 +1618,13 @@ html::-webkit-scrollbar-button {
1615
1618
  box-sizing: border-box;
1616
1619
  }
1617
1620
 
1618
- #leankylin-search-replace #searchTypeSelect select:hover {
1621
+ #leankylin-search-replace #searchTypeSelect select:hover,
1622
+ #leankylin-search-replace #searchRangeSelect select:hover {
1619
1623
  border-color: #b0aefe;
1620
1624
  }
1621
1625
 
1622
- #leankylin-search-replace #searchTypeSelect select:focus {
1626
+ #leankylin-search-replace #searchTypeSelect select:focus,
1627
+ #leankylin-search-replace #searchRangeSelect select:focus {
1623
1628
  border-color: #8C89FE;
1624
1629
  box-shadow: 0 0 0 3px rgba(140, 137, 254, 0.12);
1625
1630
  }
@@ -1650,10 +1655,12 @@ html::-webkit-scrollbar-button {
1650
1655
  background-color: #f9f9ff;
1651
1656
  }
1652
1657
 
1653
- /* 关闭按钮 */
1658
+ /* 关闭按钮:始终固定于弹窗右下角,宽度紧凑 */
1654
1659
  #leankylin-search-replace .close-button {
1655
- margin: 12px 0 0;
1656
- padding: 6px 20px;
1660
+ align-self: flex-end;
1661
+ flex-shrink: 0;
1662
+ margin: 20px 0 0;
1663
+ padding: 6px 14px;
1657
1664
  border-radius: 6px;
1658
1665
  font-size: 13px;
1659
1666
  transition: all 0.15s;
package/dist/index.umd.js CHANGED
@@ -20669,6 +20669,29 @@
20669
20669
  };
20670
20670
  }
20671
20671
 
20672
+ function getSelectionRangeName(selection) {
20673
+ if (selection == null || selection.length === 0) return null;
20674
+ var names = [];
20675
+ var _iterator = _createForOfIteratorHelper(selection),
20676
+ _step;
20677
+ try {
20678
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
20679
+ var item = _step.value;
20680
+ var row = item.row,
20681
+ column = item.column;
20682
+ var row1 = Math.min(row[0], row[1]);
20683
+ var row2 = Math.max(row[0], row[1]);
20684
+ var col1 = Math.min(column[0], column[1]);
20685
+ var col2 = Math.max(column[0], column[1]);
20686
+ names.push(row1 === row2 && col1 === col2 ? "".concat(core.chatatABC(col1)).concat(row1 + 1) : "".concat(core.chatatABC(col1)).concat(row1 + 1, ":").concat(core.chatatABC(col2)).concat(row2 + 1));
20687
+ }
20688
+ } catch (err) {
20689
+ _iterator.e(err);
20690
+ } finally {
20691
+ _iterator.f();
20692
+ }
20693
+ return names.join(",");
20694
+ }
20672
20695
  var SearchReplace = function SearchReplace() {
20673
20696
  var _useContext = React.useContext(WorkbookContext),
20674
20697
  context = _useContext.context,
@@ -20711,6 +20734,28 @@
20711
20734
  _useState14 = _slicedToArray(_useState13, 2),
20712
20735
  searchType = _useState14[0],
20713
20736
  setSearchType = _useState14[1];
20737
+ var _useState15 = React.useState("currentSheet"),
20738
+ _useState16 = _slicedToArray(_useState15, 2),
20739
+ searchRange = _useState16[0],
20740
+ setSearchRange = _useState16[1];
20741
+ var _useState17 = React.useState(function () {
20742
+ var selection = context.luckysheet_select_save;
20743
+ var isRealSelection = selection != null && selection.length > 0 && !(selection.length === 1 && selection[0].row[0] === selection[0].row[1] && selection[0].column[0] === selection[0].column[1]);
20744
+ return isRealSelection ? lodash.assign([], selection) : [];
20745
+ }),
20746
+ _useState18 = _slicedToArray(_useState17, 2),
20747
+ searchSelection = _useState18[0],
20748
+ setSearchSelection = _useState18[1];
20749
+ var sheetIndex = core.getSheetIndex(context, context.currentSheetId);
20750
+ var currentSheetName = sheetIndex == null ? null : context.luckysheetfile[sheetIndex].name;
20751
+ var hasSelectionOption = React.useMemo(function () {
20752
+ return searchSelection != null && searchSelection.length > 0;
20753
+ }, [searchSelection]);
20754
+ var selectionRangeName = getSelectionRangeName(searchSelection);
20755
+ var selectionRangeDisplay = findAndReplace.searchRangeSelection;
20756
+ if (selectionRangeName != null) {
20757
+ selectionRangeDisplay = currentSheetName ? "".concat(findAndReplace.searchRangeSelection, " (").concat(currentSheetName, "!").concat(selectionRangeName, ")") : "".concat(findAndReplace.searchRangeSelection, " (").concat(selectionRangeName, ")");
20758
+ }
20714
20759
  var closeDialog = React.useCallback(function () {
20715
20760
  lodash.set(refs.globalCache, "searchDialog.mouseEnter", false);
20716
20761
  setContext(function (draftCtx) {
@@ -20808,6 +20853,23 @@
20808
20853
  }, findAndReplace.searchTypeFormula), /*#__PURE__*/React__default['default'].createElement("option", {
20809
20854
  value: "m"
20810
20855
  }, findAndReplace.searchTypeDisplay))), /*#__PURE__*/React__default['default'].createElement("div", {
20856
+ id: "searchRangeSelect"
20857
+ }, /*#__PURE__*/React__default['default'].createElement("span", null, findAndReplace.searchRangeLabel, "\uFF1A"), /*#__PURE__*/React__default['default'].createElement("select", {
20858
+ value: searchRange,
20859
+ onChange: function onChange(e) {
20860
+ var value = e.target.value;
20861
+ setSearchRange(value);
20862
+ if (value === "selection") {
20863
+ setSearchSelection(lodash.assign([], context.luckysheet_select_save));
20864
+ }
20865
+ }
20866
+ }, /*#__PURE__*/React__default['default'].createElement("option", {
20867
+ value: "currentSheet"
20868
+ }, currentSheetName ? "".concat(findAndReplace.searchRangeCurrentSheet, "\uFF08").concat(currentSheetName, "\uFF09") : findAndReplace.searchRangeCurrentSheet), hasSelectionOption && ( /*#__PURE__*/React__default['default'].createElement("option", {
20869
+ value: "selection"
20870
+ }, selectionRangeDisplay)), /*#__PURE__*/React__default['default'].createElement("option", {
20871
+ value: "all"
20872
+ }, findAndReplace.searchRangeAllSheet))), /*#__PURE__*/React__default['default'].createElement("div", {
20811
20873
  className: "textboxs",
20812
20874
  id: "searchInput"
20813
20875
  }, findAndReplace.findTextbox, "\uFF1A", /*#__PURE__*/React__default['default'].createElement("input", {
@@ -20871,7 +20933,7 @@
20871
20933
  onClick: function onClick() {
20872
20934
  setContext(function (draftCtx) {
20873
20935
  setSelectedCell(undefined);
20874
- var alertMsg = core.replaceAll(draftCtx, searchText, replaceText, checkMode, searchType);
20936
+ var alertMsg = core.replaceAll(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
20875
20937
  showAlert(alertMsg);
20876
20938
  });
20877
20939
  }
@@ -20881,7 +20943,7 @@
20881
20943
  onClick: function onClick() {
20882
20944
  return setContext(function (draftCtx) {
20883
20945
  setSelectedCell(undefined);
20884
- var alertMsg = core.replace(draftCtx, searchText, replaceText, checkMode, searchType);
20946
+ var alertMsg = core.replace(draftCtx, searchText, replaceText, checkMode, searchType, searchRange, searchSelection);
20885
20947
  if (alertMsg != null) {
20886
20948
  showAlert(alertMsg);
20887
20949
  }
@@ -20894,7 +20956,7 @@
20894
20956
  return setContext(function (draftCtx) {
20895
20957
  setSelectedCell(undefined);
20896
20958
  if (!searchText) return;
20897
- var res = core.searchAll(draftCtx, searchText, checkMode, searchType);
20959
+ var res = core.searchAll(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
20898
20960
  setSearchResult(res);
20899
20961
  if (lodash.isEmpty(res)) showAlert(findAndReplace.noFindTip);
20900
20962
  });
@@ -20905,14 +20967,11 @@
20905
20967
  onClick: function onClick() {
20906
20968
  return setContext(function (draftCtx) {
20907
20969
  setSearchResult([]);
20908
- var alertMsg = core.searchNext(draftCtx, searchText, checkMode, searchType);
20970
+ var alertMsg = core.searchNext(draftCtx, searchText, checkMode, searchType, searchRange, searchSelection);
20909
20971
  if (alertMsg != null) showAlert(alertMsg);
20910
20972
  });
20911
20973
  }
20912
- }, findAndReplace.findBtn))), /*#__PURE__*/React__default['default'].createElement("div", {
20913
- className: "close-button leankylin-message-box-button button-default",
20914
- onClick: closeDialog
20915
- }, button.close), searchResult.length > 0 && ( /*#__PURE__*/React__default['default'].createElement("div", {
20974
+ }, findAndReplace.findBtn))), searchResult.length > 0 && ( /*#__PURE__*/React__default['default'].createElement("div", {
20916
20975
  id: "searchAllbox",
20917
20976
  onScroll: function onScroll(e) {
20918
20977
  return e.stopPropagation();
@@ -20945,7 +21004,10 @@
20945
21004
  });
20946
21005
  }
20947
21006
  }, /*#__PURE__*/React__default['default'].createElement("span", null, v.sheetName), /*#__PURE__*/React__default['default'].createElement("span", null, v.cellPosition), /*#__PURE__*/React__default['default'].createElement("span", null, v.value), /*#__PURE__*/React__default['default'].createElement("span", null, v.formula), /*#__PURE__*/React__default['default'].createElement("span", null, v.displayValue));
20948
- })))))), body);
21007
+ })))), /*#__PURE__*/React__default['default'].createElement("div", {
21008
+ className: "close-button leankylin-message-box-button button-default",
21009
+ onClick: closeDialog
21010
+ }, button.close))), body);
20949
21011
  };
20950
21012
 
20951
21013
  var LinkEditCard = function LinkEditCard(_ref) {