@fileverse-dev/fortune-react 1.0.2-mod-21 → 1.0.2-mod-23

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
@@ -1419,6 +1419,30 @@ html::-webkit-scrollbar-button {
1419
1419
  min-width: 154px;
1420
1420
  }
1421
1421
 
1422
+ /* Add scrollbar styles */
1423
+ #fortune-search-replace .table-container {
1424
+ scrollbar-width: thin;
1425
+ scrollbar-color: #babac0 transparent;
1426
+ }
1427
+
1428
+ #fortune-search-replace .table-container::-webkit-scrollbar {
1429
+ width: 8px;
1430
+ height: 8px;
1431
+ }
1432
+
1433
+ #fortune-search-replace .table-container::-webkit-scrollbar-track {
1434
+ background-color: transparent;
1435
+ }
1436
+
1437
+ #fortune-search-replace .table-container::-webkit-scrollbar-thumb {
1438
+ background-color: #babac0;
1439
+ border-radius: 16px;
1440
+ }
1441
+
1442
+ #fortune-search-replace .table-container::-webkit-scrollbar-button {
1443
+ display: none;
1444
+ }
1445
+
1422
1446
  .fortune-link-modify-modal {
1423
1447
  position: absolute;
1424
1448
  overflow: hidden;
@@ -1419,6 +1419,30 @@ html::-webkit-scrollbar-button {
1419
1419
  min-width: 154px;
1420
1420
  }
1421
1421
 
1422
+ /* Add scrollbar styles */
1423
+ #fortune-search-replace .table-container {
1424
+ scrollbar-width: thin;
1425
+ scrollbar-color: #babac0 transparent;
1426
+ }
1427
+
1428
+ #fortune-search-replace .table-container::-webkit-scrollbar {
1429
+ width: 8px;
1430
+ height: 8px;
1431
+ }
1432
+
1433
+ #fortune-search-replace .table-container::-webkit-scrollbar-track {
1434
+ background-color: transparent;
1435
+ }
1436
+
1437
+ #fortune-search-replace .table-container::-webkit-scrollbar-thumb {
1438
+ background-color: #babac0;
1439
+ border-radius: 16px;
1440
+ }
1441
+
1442
+ #fortune-search-replace .table-container::-webkit-scrollbar-button {
1443
+ display: none;
1444
+ }
1445
+
1422
1446
  .fortune-link-modify-modal {
1423
1447
  position: absolute;
1424
1448
  overflow: hidden;
package/dist/index.esm.js CHANGED
@@ -1,8 +1,8 @@
1
- import { defaultContext, defaultSettings, getSheetIndex, colLocationByIndex, fixPositionOnFrozenCells, colLocation, getFlowdata, isAllowEdit, handleColumnHeaderMouseDown, handleColSizeHandleMouseDown, handleColFreezeHandleMouseDown, handleContextMenu, selectTitlesMap, selectTitlesRange, fixColumnStyleOverflowInFreeze, rowLocationByIndex, rowLocation, handleRowHeaderMouseDown, handleRowSizeHandleMouseDown, handleRowFreezeHandleMouseDown, fixRowStyleOverflowInFreeze, locale, getStyleByCell, getCellValue, createRangeHightlight, isInlineStringCell, getInlineStringHTML, valueShowEs, escapeHTMLTag, escapeScriptTag, moveToEnd, isShowHidenCR, getrangeseleciton, cancelNormalSelected, moveHighlightCell, israngeseleciton, handleFormulaInput, onSearchDialogMoveStart, replaceAll, replace, searchAll, searchNext, normalizeSelection, scrollToHighlightCell, isLinkValid, getRangetxt, goToLink, replaceHtml, removeHyperlink, onRangeSelectionModalMoveStart, saveHyperlink, createFilterOptions, onImageMoveStart, onImageResizeStart, showComments, setEditingComment, onCommentBoxMoveStart, confirmMessage, getRangeByTxt, getDropdownList, setCellValue, setConditionRules, mergeBorder, setDropcownValue, handleCellAreaMouseDown, handleCellAreaDoubleClick, selectAll, showLinkCard, getCellRowColumn, getCellHyperlink, handleOverlayMouseMove, handleOverlayMouseUp, handleKeydownForZoom, handleOverlayTouchStart, handleOverlayTouchMove, handleOverlayTouchEnd, insertRowCol, drawArrow, onCellsMoveStart, createDropCellRange, 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, getInlineStringNoStyle, rangeHightlightselected, updateCell, editSheetName, cancelActiveImgItem, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, addSheet, indexToColumnChar, sortSelection, handleCopy, deleteRowCol, hideSelected, showSelected, api, removeActiveImage, deleteSelectedCellText, jfrefreshgrid, handleLink, handlePasteByClick, deleteSheet, opToPatch, orderbydatafiler, getFilterColumnValues, getFilterColumnColors, saveFilter, calcSelectionInfo, patchToOp, filterPatch, inverseRowColOptions, ensureSheetIndex, initSheetIndex, handleGlobalKeyDown, handlePaste, groupValuesRefresh } from '@fileverse-dev/fortune-core';
1
+ import { defaultContext, defaultSettings, getSheetIndex, colLocationByIndex, fixPositionOnFrozenCells, colLocation, getFlowdata, isAllowEdit, handleColumnHeaderMouseDown, handleColSizeHandleMouseDown, handleColFreezeHandleMouseDown, handleContextMenu, selectTitlesMap, selectTitlesRange, fixColumnStyleOverflowInFreeze, rowLocationByIndex, rowLocation, handleRowHeaderMouseDown, handleRowSizeHandleMouseDown, handleRowFreezeHandleMouseDown, fixRowStyleOverflowInFreeze, locale, getStyleByCell, getCellValue, createRangeHightlight, isInlineStringCell, getInlineStringHTML, valueShowEs, escapeHTMLTag, escapeScriptTag, moveToEnd, isShowHidenCR, getrangeseleciton, cancelNormalSelected, moveHighlightCell, israngeseleciton, handleFormulaInput, onSearchDialogMoveStart, replaceAll, replace, searchAll, searchNext, normalizeSelection, scrollToHighlightCell, isLinkValid, getRangetxt, goToLink, replaceHtml, removeHyperlink, onRangeSelectionModalMoveStart, saveHyperlink, createFilterOptions, onImageMoveStart, onImageResizeStart, showComments, setEditingComment, onCommentBoxMoveStart, confirmMessage, getRangeByTxt, getDropdownList, setCellValue, setConditionRules, mergeBorder, setDropcownValue, handleCellAreaMouseDown, handleCellAreaDoubleClick, selectAll, showLinkCard, getCellRowColumn, getCellHyperlink, handleOverlayMouseMove, handleOverlayMouseUp, handleKeydownForZoom, handleOverlayTouchStart, handleOverlayTouchMove, handleOverlayTouchEnd, insertRowCol, drawArrow, onCellsMoveStart, createDropCellRange, 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, getInlineStringNoStyle, rangeHightlightselected, updateCell, editSheetName, cancelActiveImgItem, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, addSheet, indexToColumnChar, sortSelection, getFreezeState, toggleFreeze, jfrefreshgrid, handleCopy, deleteRowCol, hideSelected, showSelected, api, removeActiveImage, deleteSelectedCellText, handleLink, handlePasteByClick, deleteSheet, opToPatch, orderbydatafiler, getFilterColumnValues, getFilterColumnColors, saveFilter, calcSelectionInfo, patchToOp, filterPatch, inverseRowColOptions, ensureSheetIndex, initSheetIndex, handleGlobalKeyDown, handlePaste, groupValuesRefresh } from '@fileverse-dev/fortune-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';
5
- import { IconButton, Button as Button$1, TextField, Checkbox, Divider as Divider$2, Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from '@fileverse/ui';
5
+ import { IconButton, Button as Button$1, TextField, Checkbox, Divider as Divider$2, Table, TableHeader, TableRow, TableHead, TableBody, cn, TableCell } from '@fileverse/ui';
6
6
  import regeneratorRuntime from 'regenerator-runtime';
7
7
 
8
8
  function _arrayLikeToArray(r, a) {
@@ -1347,8 +1347,7 @@ var SearchReplace = function SearchReplace(_ref) {
1347
1347
  setContext = _useContext.setContext,
1348
1348
  refs = _useContext.refs;
1349
1349
  var _locale = locale(context),
1350
- findAndReplace = _locale.findAndReplace,
1351
- button = _locale.button;
1350
+ findAndReplace = _locale.findAndReplace;
1352
1351
  var _useState = useState(""),
1353
1352
  _useState2 = _slicedToArray(_useState, 2),
1354
1353
  searchText = _useState2[0],
@@ -1412,9 +1411,7 @@ var SearchReplace = function SearchReplace(_ref) {
1412
1411
  onSearchDialogMoveStart(refs.globalCache, nativeEvent, getContainer());
1413
1412
  e.stopPropagation();
1414
1413
  }
1415
- }, /*#__PURE__*/React.createElement("div", {
1416
- className: ""
1417
- }, /*#__PURE__*/React.createElement("div", {
1414
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
1418
1415
  className: "flex items-center justify-between border-b color-border-default py-3 px-6"
1419
1416
  }, /*#__PURE__*/React.createElement("h3", {
1420
1417
  className: "text-heading-sm"
@@ -1450,7 +1447,10 @@ var SearchReplace = function SearchReplace(_ref) {
1450
1447
  },
1451
1448
  value: searchText,
1452
1449
  onChange: function onChange(e) {
1453
- return setSearchText(e.target.value);
1450
+ if (e.target.value.length === 0) {
1451
+ setSearchResult([]);
1452
+ }
1453
+ setSearchText(e.target.value);
1454
1454
  }
1455
1455
  })), /*#__PURE__*/React.createElement("div", {
1456
1456
  id: "replaceInput",
@@ -1510,13 +1510,8 @@ var SearchReplace = function SearchReplace(_ref) {
1510
1510
  }), /*#__PURE__*/React.createElement("span", null, findAndReplace.wholeTextbox)))), /*#__PURE__*/React.createElement(Divider$2, {
1511
1511
  className: "w-full border-t-[1px]"
1512
1512
  }), /*#__PURE__*/React.createElement("div", {
1513
- className: "flex flex-row gap-2 justify-center items-center"
1513
+ className: "flex flex-row gap-2 justify-center items-center mb-4"
1514
1514
  }, /*#__PURE__*/React.createElement(Button$1, {
1515
- variant: "secondary",
1516
- className: "min-w-fit",
1517
- onClick: closeDialog,
1518
- tabIndex: 0
1519
- }, button.close), /*#__PURE__*/React.createElement(Button$1, {
1520
1515
  id: "replaceAllBtn",
1521
1516
  variant: "secondary",
1522
1517
  className: "min-w-fit",
@@ -1527,7 +1522,8 @@ var SearchReplace = function SearchReplace(_ref) {
1527
1522
  showAlert(alertMsg);
1528
1523
  });
1529
1524
  },
1530
- tabIndex: 0
1525
+ tabIndex: 0,
1526
+ disabled: searchText.length === 0 || replaceText.length === 0
1531
1527
  }, findAndReplace.allReplaceBtn), /*#__PURE__*/React.createElement(Button$1, {
1532
1528
  id: "replaceBtn",
1533
1529
  variant: "secondary",
@@ -1541,7 +1537,8 @@ var SearchReplace = function SearchReplace(_ref) {
1541
1537
  }
1542
1538
  });
1543
1539
  },
1544
- tabIndex: 0
1540
+ tabIndex: 0,
1541
+ disabled: searchText.length === 0 || replaceText.length === 0
1545
1542
  }, findAndReplace.replaceBtn), /*#__PURE__*/React.createElement(Button$1, {
1546
1543
  id: "searchAllBtn",
1547
1544
  variant: "secondary",
@@ -1555,10 +1552,11 @@ var SearchReplace = function SearchReplace(_ref) {
1555
1552
  if (_.isEmpty(res)) showAlert(findAndReplace.noFindTip);
1556
1553
  });
1557
1554
  },
1558
- tabIndex: 0
1555
+ tabIndex: 0,
1556
+ disabled: searchText.length === 0
1559
1557
  }, findAndReplace.allFindBtn), /*#__PURE__*/React.createElement(Button$1, {
1560
1558
  id: "searchNextBtn",
1561
- variant: "secondary",
1559
+ variant: "default",
1562
1560
  className: "min-w-fit",
1563
1561
  onClick: function onClick() {
1564
1562
  return setContext(function (draftCtx) {
@@ -1567,10 +1565,13 @@ var SearchReplace = function SearchReplace(_ref) {
1567
1565
  if (alertMsg != null) showAlert(alertMsg);
1568
1566
  });
1569
1567
  },
1570
- tabIndex: 0
1571
- }, findAndReplace.findBtn)))), searchResult.length > 0 && (/*#__PURE__*/React.createElement("div", {
1568
+ tabIndex: 0,
1569
+ disabled: searchText.length === 0
1570
+ }, findAndReplace.findBtn))), searchResult.length > 0 && (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Divider$2, {
1571
+ className: "w-full border-t-[1px] mb-4"
1572
+ }), /*#__PURE__*/React.createElement("div", {
1572
1573
  ref: tableContainerRef,
1573
- className: "px-6 pb-6 max-h-[300px] overflow-y-auto",
1574
+ className: "mb-6 table-container max-h-[300px] overflow-y-auto",
1574
1575
  onMouseDown: function onMouseDown(e) {
1575
1576
  var _tableContainerRef$cu;
1576
1577
  if (e.target === tableContainerRef.current || ((_tableContainerRef$cu = tableContainerRef.current) === null || _tableContainerRef$cu === void 0 ? void 0 : _tableContainerRef$cu.contains(e.target))) {
@@ -1579,6 +1580,19 @@ var SearchReplace = function SearchReplace(_ref) {
1579
1580
  (_tableContainerRef$cu2 = tableContainerRef.current) === null || _tableContainerRef$cu2 === void 0 ? void 0 : _tableContainerRef$cu2.focus();
1580
1581
  }
1581
1582
  },
1583
+ onWheel: function onWheel(e) {
1584
+ e.preventDefault();
1585
+ e.stopPropagation();
1586
+ if (tableContainerRef.current) {
1587
+ tableContainerRef.current.scrollTop += e.deltaY;
1588
+ }
1589
+ },
1590
+ onTouchStart: function onTouchStart(e) {
1591
+ e.stopPropagation();
1592
+ },
1593
+ onTouchMove: function onTouchMove(e) {
1594
+ e.stopPropagation();
1595
+ },
1582
1596
  tabIndex: 0
1583
1597
  }, /*#__PURE__*/React.createElement(Table, {
1584
1598
  id: "searchAllbox"
@@ -1586,10 +1600,10 @@ var SearchReplace = function SearchReplace(_ref) {
1586
1600
  className: "color-bg-secondary"
1587
1601
  }, /*#__PURE__*/React.createElement(TableRow, null, /*#__PURE__*/React.createElement(TableHead, null, findAndReplace.searchTargetSheet), /*#__PURE__*/React.createElement(TableHead, null, findAndReplace.searchTargetCell), /*#__PURE__*/React.createElement(TableHead, null, findAndReplace.searchTargetValue))), /*#__PURE__*/React.createElement(TableBody, null, searchResult.map(function (v) {
1588
1602
  return /*#__PURE__*/React.createElement(TableRow, {
1589
- className: "".concat(_.isEqual(selectedCell, {
1603
+ className: cn(_.isEqual(selectedCell, {
1590
1604
  r: v.r,
1591
1605
  c: v.c
1592
- }) ? "on" : ""),
1606
+ }) ? "color-bg-default-selected" : ""),
1593
1607
  key: v.cellPosition,
1594
1608
  onClick: function onClick() {
1595
1609
  setContext(function (draftCtx) {
@@ -1612,7 +1626,7 @@ var SearchReplace = function SearchReplace(_ref) {
1612
1626
  }, v.cellPosition), /*#__PURE__*/React.createElement(TableCell, {
1613
1627
  className: "find-replace-table-cell"
1614
1628
  }, v.value));
1615
- })))))));
1629
+ })))))))));
1616
1630
  };
1617
1631
 
1618
1632
  var LinkEditCard = function LinkEditCard(_ref) {
@@ -7425,6 +7439,65 @@ var ContextMenu = function ContextMenu() {
7425
7439
  key: "divider-".concat(i)
7426
7440
  });
7427
7441
  }
7442
+ if (name === "freeze-row") {
7443
+ var freezeState = getFreezeState(context);
7444
+ var isFrozen = freezeState.isRowFrozen;
7445
+ var isEntireRowSelected = (selection === null || selection === void 0 ? void 0 : selection.row_select) === true;
7446
+ if (!isEntireRowSelected) return null;
7447
+ return /*#__PURE__*/React.createElement(Menu, {
7448
+ key: "freeze-row",
7449
+ onClick: function onClick() {
7450
+ setContext(function (draftCtx) {
7451
+ if (isFrozen) {
7452
+ toggleFreeze(draftCtx, "unfreeze-row");
7453
+ } else {
7454
+ toggleFreeze(draftCtx, "row");
7455
+ }
7456
+ draftCtx.contextMenu = {};
7457
+ });
7458
+ }
7459
+ }, /*#__PURE__*/React.createElement("div", {
7460
+ className: "context-item"
7461
+ }, /*#__PURE__*/React.createElement(SVGIcon, {
7462
+ name: "freeze-flv",
7463
+ width: 18,
7464
+ height: 18,
7465
+ style: {
7466
+ marginTop: "4px",
7467
+ marginRight: "4px"
7468
+ }
7469
+ }), isFrozen ? "Unfreeze row" : "Freeze to current row"));
7470
+ }
7471
+ if (name === "freeze-column") {
7472
+ var _freezeState = getFreezeState(context);
7473
+ var _isFrozen = _freezeState.isColFrozen;
7474
+ var isEntireColumnSelected = (selection === null || selection === void 0 ? void 0 : selection.column_select) === true;
7475
+ if (!isEntireColumnSelected) return null;
7476
+ return /*#__PURE__*/React.createElement(Menu, {
7477
+ key: "freeze-column",
7478
+ onClick: function onClick() {
7479
+ setContext(function (draftCtx) {
7480
+ if (_isFrozen) {
7481
+ toggleFreeze(draftCtx, "unfreeze-column");
7482
+ } else {
7483
+ toggleFreeze(draftCtx, "column");
7484
+ jfrefreshgrid(draftCtx, null, undefined, false);
7485
+ }
7486
+ draftCtx.contextMenu = {};
7487
+ });
7488
+ }
7489
+ }, /*#__PURE__*/React.createElement("div", {
7490
+ className: "context-item"
7491
+ }, /*#__PURE__*/React.createElement(SVGIcon, {
7492
+ name: "freeze-flv",
7493
+ width: 18,
7494
+ height: 18,
7495
+ style: {
7496
+ marginTop: "4px",
7497
+ marginRight: "4px"
7498
+ }
7499
+ }), /*#__PURE__*/React.createElement("p", null, _isFrozen ? "Unfreeze column" : "Freeze to current column")));
7500
+ }
7428
7501
  if (name === "comment") {
7429
7502
  return /*#__PURE__*/React.createElement(Menu, {
7430
7503
  key: name,
@@ -9560,6 +9633,20 @@ var SVGDefines = function SVGDefines(_ref) {
9560
9633
  "clip-rule": "evenodd",
9561
9634
  d: "M3.75 1.5C3.15326 1.5 2.58097 1.73705 2.15901 2.15901C1.73705 2.58097 1.5 3.15326 1.5 3.75V15.75C1.5 16.0533 1.68273 16.3268 1.96299 16.4429C2.24324 16.559 2.56583 16.4948 2.78033 16.2803L5.56066 13.5H14.25C14.8467 13.5 15.419 13.2629 15.841 12.841C16.2629 12.419 16.5 11.8467 16.5 11.25V3.75C16.5 3.15326 16.2629 2.58097 15.841 2.15901C15.419 1.73705 14.8467 1.5 14.25 1.5H3.75ZM3.21967 3.21967C3.36032 3.07902 3.55109 3 3.75 3H14.25C14.4489 3 14.6397 3.07902 14.7803 3.21967C14.921 3.36032 15 3.55109 15 3.75V11.25C15 11.4489 14.921 11.6397 14.7803 11.7803C14.6397 11.921 14.4489 12 14.25 12H5.25C5.05109 12 4.86032 12.079 4.71967 12.2197L3 13.9393V3.75C3 3.55109 3.07902 3.36032 3.21967 3.21967Z",
9562
9635
  fill: "#363B3F"
9636
+ }))), /*#__PURE__*/React.createElement("symbol", {
9637
+ id: "freeze-flv",
9638
+ viewBox: "0 0 24 24"
9639
+ }, /*#__PURE__*/React.createElement("svg", {
9640
+ width: "18",
9641
+ height: "16",
9642
+ viewBox: "0 0 18 16",
9643
+ fill: "none",
9644
+ xmlns: "http://www.w3.org/2000/svg"
9645
+ }, /*#__PURE__*/React.createElement("path", {
9646
+ "fill-rule": "evenodd",
9647
+ "clip-rule": "evenodd",
9648
+ d: "M13.4208 1.58557C13.6061 1.21509 13.4559 0.764586 13.0854 0.579344C12.7149 0.394102 12.2644 0.54427 12.0792 0.914754L11.4375 2.19811L11.1708 1.66475C10.9856 1.29427 10.5351 1.1441 10.1646 1.32934C9.79411 1.51459 9.64394 1.96509 9.82918 2.33557L10.599 3.87516L10.0365 5.00016H7.96353L7.40103 3.87516L8.17083 2.33557C8.35607 1.96509 8.2059 1.51459 7.83541 1.32934C7.46493 1.1441 7.01443 1.29427 6.82918 1.66475L6.5625 2.19811L5.92082 0.914754C5.73558 0.54427 5.28508 0.394102 4.91459 0.579344C4.54411 0.764586 4.39394 1.21509 4.57918 1.58557L5.22086 2.86893L4.63417 2.76226C4.22664 2.68817 3.8362 2.95847 3.7621 3.366C3.688 3.77353 3.95831 4.16397 4.36584 4.23807L6.05939 4.54598L6.66148 5.75016L5.91147 7.25016H4.49999L3.6 6.05018C3.35147 5.71881 2.88137 5.65165 2.55 5.90018C2.21863 6.14871 2.15147 6.61881 2.4 6.95018L2.62499 7.25016H1.5C1.08579 7.25016 0.75 7.58595 0.75 8.00016C0.75 8.41438 1.08579 8.75016 1.5 8.75016H2.62501L2.4 9.05018C2.15147 9.38155 2.21863 9.85165 2.55 10.1002C2.88137 10.3487 3.35147 10.2816 3.6 9.95018L4.50001 8.75016H5.91148L6.66148 10.2502L6.05938 11.4544L4.36584 11.7623C3.95831 11.8364 3.688 12.2268 3.7621 12.6344C3.8362 13.0419 4.22664 13.3122 4.63417 13.2381L5.22085 13.1314L4.57918 14.4148C4.39394 14.7852 4.54411 15.2357 4.91459 15.421C5.28508 15.6062 5.73558 15.4561 5.92082 15.0856L6.5625 13.8022L6.82918 14.3356C7.01443 14.7061 7.46493 14.8562 7.83541 14.671C8.2059 14.4858 8.35607 14.0353 8.17083 13.6648L7.40102 12.1252L7.96352 11.0002H10.0365L10.599 12.1252L9.82918 13.6648C9.64394 14.0353 9.79411 14.4858 10.1646 14.671C10.5351 14.8562 10.9856 14.7061 11.1708 14.3356L11.4375 13.8022L12.0792 15.0856C12.2644 15.4561 12.7149 15.6062 13.0854 15.421C13.4559 15.2358 13.6061 14.7853 13.4208 14.4148L12.7791 13.1314L13.3658 13.2381C13.7734 13.3122 14.1638 13.0419 14.2379 12.6344C14.312 12.2268 14.0417 11.8364 13.6342 11.7623L11.9406 11.4544L11.3385 10.2502L12.0885 8.75018H13.5L14.4 9.95018C14.6485 10.2816 15.1186 10.3487 15.45 10.1002C15.7814 9.85165 15.8485 9.38155 15.6 9.05018L15.375 8.75018H16.5C16.9142 8.75018 17.25 8.4144 17.25 8.00018C17.25 7.58597 16.9142 7.25018 16.5 7.25018H15.375L15.6 6.95018C15.8485 6.61881 15.7814 6.14871 15.45 5.90018C15.1186 5.65165 14.6485 5.71881 14.4 6.05018L13.5 7.25018H12.0885L11.3385 5.75016L11.9406 4.54599L13.6342 4.23807C14.0417 4.16397 14.312 3.77353 14.2379 3.366C14.1638 2.95847 13.7734 2.68817 13.3658 2.76226L12.7791 2.86893L13.4208 1.58557ZM7.96353 6.50016L7.21353 8.00016L7.96354 9.50018H10.0365L10.7865 8.00018L10.0365 6.50016H7.96353Z",
9649
+ fill: "#363B3F"
9563
9650
  }))), /*#__PURE__*/React.createElement("symbol", {
9564
9651
  viewBox: "0 0 1024 1024",
9565
9652
  id: "tab"
package/dist/index.js CHANGED
@@ -1358,8 +1358,7 @@ var SearchReplace = function SearchReplace(_ref) {
1358
1358
  setContext = _useContext.setContext,
1359
1359
  refs = _useContext.refs;
1360
1360
  var _locale = fortuneCore.locale(context),
1361
- findAndReplace = _locale.findAndReplace,
1362
- button = _locale.button;
1361
+ findAndReplace = _locale.findAndReplace;
1363
1362
  var _useState = React.useState(""),
1364
1363
  _useState2 = _slicedToArray(_useState, 2),
1365
1364
  searchText = _useState2[0],
@@ -1423,9 +1422,7 @@ var SearchReplace = function SearchReplace(_ref) {
1423
1422
  fortuneCore.onSearchDialogMoveStart(refs.globalCache, nativeEvent, getContainer());
1424
1423
  e.stopPropagation();
1425
1424
  }
1426
- }, /*#__PURE__*/React__default['default'].createElement("div", {
1427
- className: ""
1428
- }, /*#__PURE__*/React__default['default'].createElement("div", {
1425
+ }, /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("div", {
1429
1426
  className: "flex items-center justify-between border-b color-border-default py-3 px-6"
1430
1427
  }, /*#__PURE__*/React__default['default'].createElement("h3", {
1431
1428
  className: "text-heading-sm"
@@ -1461,7 +1458,10 @@ var SearchReplace = function SearchReplace(_ref) {
1461
1458
  },
1462
1459
  value: searchText,
1463
1460
  onChange: function onChange(e) {
1464
- return setSearchText(e.target.value);
1461
+ if (e.target.value.length === 0) {
1462
+ setSearchResult([]);
1463
+ }
1464
+ setSearchText(e.target.value);
1465
1465
  }
1466
1466
  })), /*#__PURE__*/React__default['default'].createElement("div", {
1467
1467
  id: "replaceInput",
@@ -1521,13 +1521,8 @@ var SearchReplace = function SearchReplace(_ref) {
1521
1521
  }), /*#__PURE__*/React__default['default'].createElement("span", null, findAndReplace.wholeTextbox)))), /*#__PURE__*/React__default['default'].createElement(ui.Divider, {
1522
1522
  className: "w-full border-t-[1px]"
1523
1523
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1524
- className: "flex flex-row gap-2 justify-center items-center"
1524
+ className: "flex flex-row gap-2 justify-center items-center mb-4"
1525
1525
  }, /*#__PURE__*/React__default['default'].createElement(ui.Button, {
1526
- variant: "secondary",
1527
- className: "min-w-fit",
1528
- onClick: closeDialog,
1529
- tabIndex: 0
1530
- }, button.close), /*#__PURE__*/React__default['default'].createElement(ui.Button, {
1531
1526
  id: "replaceAllBtn",
1532
1527
  variant: "secondary",
1533
1528
  className: "min-w-fit",
@@ -1538,7 +1533,8 @@ var SearchReplace = function SearchReplace(_ref) {
1538
1533
  showAlert(alertMsg);
1539
1534
  });
1540
1535
  },
1541
- tabIndex: 0
1536
+ tabIndex: 0,
1537
+ disabled: searchText.length === 0 || replaceText.length === 0
1542
1538
  }, findAndReplace.allReplaceBtn), /*#__PURE__*/React__default['default'].createElement(ui.Button, {
1543
1539
  id: "replaceBtn",
1544
1540
  variant: "secondary",
@@ -1552,7 +1548,8 @@ var SearchReplace = function SearchReplace(_ref) {
1552
1548
  }
1553
1549
  });
1554
1550
  },
1555
- tabIndex: 0
1551
+ tabIndex: 0,
1552
+ disabled: searchText.length === 0 || replaceText.length === 0
1556
1553
  }, findAndReplace.replaceBtn), /*#__PURE__*/React__default['default'].createElement(ui.Button, {
1557
1554
  id: "searchAllBtn",
1558
1555
  variant: "secondary",
@@ -1566,10 +1563,11 @@ var SearchReplace = function SearchReplace(_ref) {
1566
1563
  if (___default['default'].isEmpty(res)) showAlert(findAndReplace.noFindTip);
1567
1564
  });
1568
1565
  },
1569
- tabIndex: 0
1566
+ tabIndex: 0,
1567
+ disabled: searchText.length === 0
1570
1568
  }, findAndReplace.allFindBtn), /*#__PURE__*/React__default['default'].createElement(ui.Button, {
1571
1569
  id: "searchNextBtn",
1572
- variant: "secondary",
1570
+ variant: "default",
1573
1571
  className: "min-w-fit",
1574
1572
  onClick: function onClick() {
1575
1573
  return setContext(function (draftCtx) {
@@ -1578,10 +1576,13 @@ var SearchReplace = function SearchReplace(_ref) {
1578
1576
  if (alertMsg != null) showAlert(alertMsg);
1579
1577
  });
1580
1578
  },
1581
- tabIndex: 0
1582
- }, findAndReplace.findBtn)))), searchResult.length > 0 && (/*#__PURE__*/React__default['default'].createElement("div", {
1579
+ tabIndex: 0,
1580
+ disabled: searchText.length === 0
1581
+ }, findAndReplace.findBtn))), searchResult.length > 0 && (/*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(ui.Divider, {
1582
+ className: "w-full border-t-[1px] mb-4"
1583
+ }), /*#__PURE__*/React__default['default'].createElement("div", {
1583
1584
  ref: tableContainerRef,
1584
- className: "px-6 pb-6 max-h-[300px] overflow-y-auto",
1585
+ className: "mb-6 table-container max-h-[300px] overflow-y-auto",
1585
1586
  onMouseDown: function onMouseDown(e) {
1586
1587
  var _tableContainerRef$cu;
1587
1588
  if (e.target === tableContainerRef.current || ((_tableContainerRef$cu = tableContainerRef.current) === null || _tableContainerRef$cu === void 0 ? void 0 : _tableContainerRef$cu.contains(e.target))) {
@@ -1590,6 +1591,19 @@ var SearchReplace = function SearchReplace(_ref) {
1590
1591
  (_tableContainerRef$cu2 = tableContainerRef.current) === null || _tableContainerRef$cu2 === void 0 ? void 0 : _tableContainerRef$cu2.focus();
1591
1592
  }
1592
1593
  },
1594
+ onWheel: function onWheel(e) {
1595
+ e.preventDefault();
1596
+ e.stopPropagation();
1597
+ if (tableContainerRef.current) {
1598
+ tableContainerRef.current.scrollTop += e.deltaY;
1599
+ }
1600
+ },
1601
+ onTouchStart: function onTouchStart(e) {
1602
+ e.stopPropagation();
1603
+ },
1604
+ onTouchMove: function onTouchMove(e) {
1605
+ e.stopPropagation();
1606
+ },
1593
1607
  tabIndex: 0
1594
1608
  }, /*#__PURE__*/React__default['default'].createElement(ui.Table, {
1595
1609
  id: "searchAllbox"
@@ -1597,10 +1611,10 @@ var SearchReplace = function SearchReplace(_ref) {
1597
1611
  className: "color-bg-secondary"
1598
1612
  }, /*#__PURE__*/React__default['default'].createElement(ui.TableRow, null, /*#__PURE__*/React__default['default'].createElement(ui.TableHead, null, findAndReplace.searchTargetSheet), /*#__PURE__*/React__default['default'].createElement(ui.TableHead, null, findAndReplace.searchTargetCell), /*#__PURE__*/React__default['default'].createElement(ui.TableHead, null, findAndReplace.searchTargetValue))), /*#__PURE__*/React__default['default'].createElement(ui.TableBody, null, searchResult.map(function (v) {
1599
1613
  return /*#__PURE__*/React__default['default'].createElement(ui.TableRow, {
1600
- className: "".concat(___default['default'].isEqual(selectedCell, {
1614
+ className: ui.cn(___default['default'].isEqual(selectedCell, {
1601
1615
  r: v.r,
1602
1616
  c: v.c
1603
- }) ? "on" : ""),
1617
+ }) ? "color-bg-default-selected" : ""),
1604
1618
  key: v.cellPosition,
1605
1619
  onClick: function onClick() {
1606
1620
  setContext(function (draftCtx) {
@@ -1623,7 +1637,7 @@ var SearchReplace = function SearchReplace(_ref) {
1623
1637
  }, v.cellPosition), /*#__PURE__*/React__default['default'].createElement(ui.TableCell, {
1624
1638
  className: "find-replace-table-cell"
1625
1639
  }, v.value));
1626
- })))))));
1640
+ })))))))));
1627
1641
  };
1628
1642
 
1629
1643
  var LinkEditCard = function LinkEditCard(_ref) {
@@ -7436,6 +7450,65 @@ var ContextMenu = function ContextMenu() {
7436
7450
  key: "divider-".concat(i)
7437
7451
  });
7438
7452
  }
7453
+ if (name === "freeze-row") {
7454
+ var freezeState = fortuneCore.getFreezeState(context);
7455
+ var isFrozen = freezeState.isRowFrozen;
7456
+ var isEntireRowSelected = (selection === null || selection === void 0 ? void 0 : selection.row_select) === true;
7457
+ if (!isEntireRowSelected) return null;
7458
+ return /*#__PURE__*/React__default['default'].createElement(Menu, {
7459
+ key: "freeze-row",
7460
+ onClick: function onClick() {
7461
+ setContext(function (draftCtx) {
7462
+ if (isFrozen) {
7463
+ fortuneCore.toggleFreeze(draftCtx, "unfreeze-row");
7464
+ } else {
7465
+ fortuneCore.toggleFreeze(draftCtx, "row");
7466
+ }
7467
+ draftCtx.contextMenu = {};
7468
+ });
7469
+ }
7470
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
7471
+ className: "context-item"
7472
+ }, /*#__PURE__*/React__default['default'].createElement(SVGIcon, {
7473
+ name: "freeze-flv",
7474
+ width: 18,
7475
+ height: 18,
7476
+ style: {
7477
+ marginTop: "4px",
7478
+ marginRight: "4px"
7479
+ }
7480
+ }), isFrozen ? "Unfreeze row" : "Freeze to current row"));
7481
+ }
7482
+ if (name === "freeze-column") {
7483
+ var _freezeState = fortuneCore.getFreezeState(context);
7484
+ var _isFrozen = _freezeState.isColFrozen;
7485
+ var isEntireColumnSelected = (selection === null || selection === void 0 ? void 0 : selection.column_select) === true;
7486
+ if (!isEntireColumnSelected) return null;
7487
+ return /*#__PURE__*/React__default['default'].createElement(Menu, {
7488
+ key: "freeze-column",
7489
+ onClick: function onClick() {
7490
+ setContext(function (draftCtx) {
7491
+ if (_isFrozen) {
7492
+ fortuneCore.toggleFreeze(draftCtx, "unfreeze-column");
7493
+ } else {
7494
+ fortuneCore.toggleFreeze(draftCtx, "column");
7495
+ fortuneCore.jfrefreshgrid(draftCtx, null, undefined, false);
7496
+ }
7497
+ draftCtx.contextMenu = {};
7498
+ });
7499
+ }
7500
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
7501
+ className: "context-item"
7502
+ }, /*#__PURE__*/React__default['default'].createElement(SVGIcon, {
7503
+ name: "freeze-flv",
7504
+ width: 18,
7505
+ height: 18,
7506
+ style: {
7507
+ marginTop: "4px",
7508
+ marginRight: "4px"
7509
+ }
7510
+ }), /*#__PURE__*/React__default['default'].createElement("p", null, _isFrozen ? "Unfreeze column" : "Freeze to current column")));
7511
+ }
7439
7512
  if (name === "comment") {
7440
7513
  return /*#__PURE__*/React__default['default'].createElement(Menu, {
7441
7514
  key: name,
@@ -9571,6 +9644,20 @@ var SVGDefines = function SVGDefines(_ref) {
9571
9644
  "clip-rule": "evenodd",
9572
9645
  d: "M3.75 1.5C3.15326 1.5 2.58097 1.73705 2.15901 2.15901C1.73705 2.58097 1.5 3.15326 1.5 3.75V15.75C1.5 16.0533 1.68273 16.3268 1.96299 16.4429C2.24324 16.559 2.56583 16.4948 2.78033 16.2803L5.56066 13.5H14.25C14.8467 13.5 15.419 13.2629 15.841 12.841C16.2629 12.419 16.5 11.8467 16.5 11.25V3.75C16.5 3.15326 16.2629 2.58097 15.841 2.15901C15.419 1.73705 14.8467 1.5 14.25 1.5H3.75ZM3.21967 3.21967C3.36032 3.07902 3.55109 3 3.75 3H14.25C14.4489 3 14.6397 3.07902 14.7803 3.21967C14.921 3.36032 15 3.55109 15 3.75V11.25C15 11.4489 14.921 11.6397 14.7803 11.7803C14.6397 11.921 14.4489 12 14.25 12H5.25C5.05109 12 4.86032 12.079 4.71967 12.2197L3 13.9393V3.75C3 3.55109 3.07902 3.36032 3.21967 3.21967Z",
9573
9646
  fill: "#363B3F"
9647
+ }))), /*#__PURE__*/React__default['default'].createElement("symbol", {
9648
+ id: "freeze-flv",
9649
+ viewBox: "0 0 24 24"
9650
+ }, /*#__PURE__*/React__default['default'].createElement("svg", {
9651
+ width: "18",
9652
+ height: "16",
9653
+ viewBox: "0 0 18 16",
9654
+ fill: "none",
9655
+ xmlns: "http://www.w3.org/2000/svg"
9656
+ }, /*#__PURE__*/React__default['default'].createElement("path", {
9657
+ "fill-rule": "evenodd",
9658
+ "clip-rule": "evenodd",
9659
+ d: "M13.4208 1.58557C13.6061 1.21509 13.4559 0.764586 13.0854 0.579344C12.7149 0.394102 12.2644 0.54427 12.0792 0.914754L11.4375 2.19811L11.1708 1.66475C10.9856 1.29427 10.5351 1.1441 10.1646 1.32934C9.79411 1.51459 9.64394 1.96509 9.82918 2.33557L10.599 3.87516L10.0365 5.00016H7.96353L7.40103 3.87516L8.17083 2.33557C8.35607 1.96509 8.2059 1.51459 7.83541 1.32934C7.46493 1.1441 7.01443 1.29427 6.82918 1.66475L6.5625 2.19811L5.92082 0.914754C5.73558 0.54427 5.28508 0.394102 4.91459 0.579344C4.54411 0.764586 4.39394 1.21509 4.57918 1.58557L5.22086 2.86893L4.63417 2.76226C4.22664 2.68817 3.8362 2.95847 3.7621 3.366C3.688 3.77353 3.95831 4.16397 4.36584 4.23807L6.05939 4.54598L6.66148 5.75016L5.91147 7.25016H4.49999L3.6 6.05018C3.35147 5.71881 2.88137 5.65165 2.55 5.90018C2.21863 6.14871 2.15147 6.61881 2.4 6.95018L2.62499 7.25016H1.5C1.08579 7.25016 0.75 7.58595 0.75 8.00016C0.75 8.41438 1.08579 8.75016 1.5 8.75016H2.62501L2.4 9.05018C2.15147 9.38155 2.21863 9.85165 2.55 10.1002C2.88137 10.3487 3.35147 10.2816 3.6 9.95018L4.50001 8.75016H5.91148L6.66148 10.2502L6.05938 11.4544L4.36584 11.7623C3.95831 11.8364 3.688 12.2268 3.7621 12.6344C3.8362 13.0419 4.22664 13.3122 4.63417 13.2381L5.22085 13.1314L4.57918 14.4148C4.39394 14.7852 4.54411 15.2357 4.91459 15.421C5.28508 15.6062 5.73558 15.4561 5.92082 15.0856L6.5625 13.8022L6.82918 14.3356C7.01443 14.7061 7.46493 14.8562 7.83541 14.671C8.2059 14.4858 8.35607 14.0353 8.17083 13.6648L7.40102 12.1252L7.96352 11.0002H10.0365L10.599 12.1252L9.82918 13.6648C9.64394 14.0353 9.79411 14.4858 10.1646 14.671C10.5351 14.8562 10.9856 14.7061 11.1708 14.3356L11.4375 13.8022L12.0792 15.0856C12.2644 15.4561 12.7149 15.6062 13.0854 15.421C13.4559 15.2358 13.6061 14.7853 13.4208 14.4148L12.7791 13.1314L13.3658 13.2381C13.7734 13.3122 14.1638 13.0419 14.2379 12.6344C14.312 12.2268 14.0417 11.8364 13.6342 11.7623L11.9406 11.4544L11.3385 10.2502L12.0885 8.75018H13.5L14.4 9.95018C14.6485 10.2816 15.1186 10.3487 15.45 10.1002C15.7814 9.85165 15.8485 9.38155 15.6 9.05018L15.375 8.75018H16.5C16.9142 8.75018 17.25 8.4144 17.25 8.00018C17.25 7.58597 16.9142 7.25018 16.5 7.25018H15.375L15.6 6.95018C15.8485 6.61881 15.7814 6.14871 15.45 5.90018C15.1186 5.65165 14.6485 5.71881 14.4 6.05018L13.5 7.25018H12.0885L11.3385 5.75016L11.9406 4.54599L13.6342 4.23807C14.0417 4.16397 14.312 3.77353 14.2379 3.366C14.1638 2.95847 13.7734 2.68817 13.3658 2.76226L12.7791 2.86893L13.4208 1.58557ZM7.96353 6.50016L7.21353 8.00016L7.96354 9.50018H10.0365L10.7865 8.00018L10.0365 6.50016H7.96353Z",
9660
+ fill: "#363B3F"
9574
9661
  }))), /*#__PURE__*/React__default['default'].createElement("symbol", {
9575
9662
  viewBox: "0 0 1024 1024",
9576
9663
  id: "tab"
@@ -1419,6 +1419,30 @@ html::-webkit-scrollbar-button {
1419
1419
  min-width: 154px;
1420
1420
  }
1421
1421
 
1422
+ /* Add scrollbar styles */
1423
+ #fortune-search-replace .table-container {
1424
+ scrollbar-width: thin;
1425
+ scrollbar-color: #babac0 transparent;
1426
+ }
1427
+
1428
+ #fortune-search-replace .table-container::-webkit-scrollbar {
1429
+ width: 8px;
1430
+ height: 8px;
1431
+ }
1432
+
1433
+ #fortune-search-replace .table-container::-webkit-scrollbar-track {
1434
+ background-color: transparent;
1435
+ }
1436
+
1437
+ #fortune-search-replace .table-container::-webkit-scrollbar-thumb {
1438
+ background-color: #babac0;
1439
+ border-radius: 16px;
1440
+ }
1441
+
1442
+ #fortune-search-replace .table-container::-webkit-scrollbar-button {
1443
+ display: none;
1444
+ }
1445
+
1422
1446
  .fortune-link-modify-modal {
1423
1447
  position: absolute;
1424
1448
  overflow: hidden;