@fileverse-dev/dsheet 2.0.0-text → 2.0.1-search-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.
Files changed (33) hide show
  1. package/dist/editor/components/import-button-ui.d.ts +1 -1
  2. package/dist/editor/open-find-and-replace.d.ts +11 -0
  3. package/dist/editor/utils/csv-import.d.ts +1 -1
  4. package/dist/editor/utils/custom-toolbar-item.d.ts +1 -1
  5. package/dist/editor/utils/export-filename.d.ts +1 -0
  6. package/dist/{es-DqFXH9BK.js → es-BJ3y6kL2.js} +29 -4
  7. package/dist/{hi-cBN4FoX2.js → hi-BLJfbm0w.js} +29 -4
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.es.js +22196 -20665
  10. package/dist/sheet-engine/core/api/cell.d.ts +1 -1
  11. package/dist/sheet-engine/core/context.d.ts +36 -0
  12. package/dist/sheet-engine/core/events/mouse.d.ts +1 -1
  13. package/dist/sheet-engine/core/index.d.ts +2 -1
  14. package/dist/sheet-engine/core/locale/en.d.ts +25 -0
  15. package/dist/sheet-engine/core/locale/es.d.ts +25 -0
  16. package/dist/sheet-engine/core/locale/hi.d.ts +25 -0
  17. package/dist/sheet-engine/core/locale/zh.d.ts +25 -0
  18. package/dist/sheet-engine/core/locale/zh_tw.d.ts +25 -0
  19. package/dist/sheet-engine/core/modules/formula.d.ts +13 -4
  20. package/dist/sheet-engine/core/modules/index.d.ts +4 -3
  21. package/dist/sheet-engine/core/modules/inline-string.d.ts +6 -6
  22. package/dist/sheet-engine/core/modules/rowcol.d.ts +3 -3
  23. package/dist/sheet-engine/core/modules/searchReplace.d.ts +118 -26
  24. package/dist/sheet-engine/core/modules/selection.d.ts +12 -6
  25. package/dist/sheet-engine/core/types.d.ts +4 -2
  26. package/dist/sheet-engine/react/components/QuickSearch/index.d.ts +4 -0
  27. package/dist/sheet-engine/react/components/Workbook/api.d.ts +6 -0
  28. package/dist/sheet-engine/react/components/Workbook/index.d.ts +4 -0
  29. package/dist/sheet-engine/react/hooks/useFormulaEditorHistory.d.ts +1 -1
  30. package/dist/style.css +1 -1
  31. package/dist/{zh-UJov73Dl.js → zh-DNw41bZD.js} +29 -4
  32. package/dist/{zh_tw-DTGOcDTq.js → zh_tw-MZjDyZzy.js} +29 -4
  33. package/package.json +2 -2
@@ -8,4 +8,4 @@ export declare function getCellValue(ctx: Context, row: number, column: number,
8
8
  export declare function setCellValue(ctx: Context, row: number, column: number, value: any, cellInput: HTMLDivElement | null, options?: CommonOptions, callAfterUpdate?: boolean): void;
9
9
  export declare function clearCell(ctx: Context, row: number, column: number, options?: CommonOptions): void;
10
10
  export declare function setCellFormat(ctx: Context, row: number, column: number, attr: keyof Cell, value: any, options?: CommonOptions): void;
11
- export declare function autoFillCell(ctx: Context, copyRange: SingleRange, applyRange: SingleRange, direction: "up" | "down" | "left" | "right"): void;
11
+ export declare function autoFillCell(ctx: Context, copyRange: SingleRange, applyRange: SingleRange, direction: 'up' | 'down' | 'left' | 'right'): void;
@@ -40,6 +40,37 @@ export type Context = {
40
40
  presences?: Presence[];
41
41
  showSearch?: boolean;
42
42
  showReplace?: boolean;
43
+ /**
44
+ * While picking a range for Find & Replace, the modal is closed (flags false) but
45
+ * this stays true so `SearchReplace` stays mounted and keeps form state. Restored
46
+ * when the range dialog closes.
47
+ */
48
+ findReplaceHiddenDuringRangePick?: boolean;
49
+ /** Snapshot of `showSearch` / `showReplace` before hiding for range pick. */
50
+ findReplaceRestoreVisibility?: {
51
+ showSearch: boolean;
52
+ showReplace: boolean;
53
+ };
54
+ /** In-sheet find bar (Ctrl/Cmd+F); separate from Find and Replace modal */
55
+ showQuickSearch?: boolean;
56
+ /** Bumped when Ctrl/Cmd+F is pressed while Quick Search is already open (refocus + select-all). */
57
+ quickSearchFocusNonce?: number;
58
+ /** One-shot prefill when opening Find and Replace from Quick Search; cleared after consume. */
59
+ findReplacePrefill?: string;
60
+ quickSearchLoading?: boolean;
61
+ /** Non-destructive match highlights for Quick Search; null when closed or no query. */
62
+ quickSearchHighlight?: {
63
+ matches: {
64
+ r: number;
65
+ c: number;
66
+ }[];
67
+ activeIndex: number;
68
+ } | null;
69
+ /** Highlighted region when Find & Replace scope is "Specific range"; null when not active. */
70
+ searchRangeScopeHighlight?: {
71
+ row: number[];
72
+ column: number[];
73
+ } | null;
43
74
  linkCard?: LinkCardProps;
44
75
  rangeDialog?: RangeDialogProps;
45
76
  warnDialog?: string;
@@ -192,6 +223,11 @@ export type Context = {
192
223
  luckysheetPaintSingle: boolean;
193
224
  defaultCell: Cell;
194
225
  groupValuesRefreshData: any[];
226
+ /**
227
+ * Incremented when formula `func_selectedrange` moves via keyboard (`rangeOfFormula`)
228
+ * so React re-renders — `FormulaCache` is a class and Immer does not track it.
229
+ */
230
+ formulaRangeNavRevision: number;
195
231
  formulaCache: FormulaCache;
196
232
  hooks: Hooks;
197
233
  showSheetList?: boolean;
@@ -12,7 +12,7 @@ export declare function fixPositionOnFrozenCells(freeze: Freezen | undefined, x:
12
12
  };
13
13
  export declare function handleCellAreaMouseDown(ctx: Context, globalCache: GlobalCache, e: MouseEvent, cellInput: HTMLDivElement, container: HTMLDivElement, fxInput?: HTMLDivElement | null, canvas?: CanvasRenderingContext2D): void;
14
14
  export declare function handleCellAreaDoubleClick(ctx: Context, globalCache: GlobalCache, settings: Settings, e: MouseEvent, container: HTMLElement): void;
15
- export declare function handleContextMenu(ctx: Context, settings: Settings, e: MouseEvent, workbookContainer: HTMLDivElement, container: HTMLDivElement, area: "cell" | "rowHeader" | "columnHeader"): void;
15
+ export declare function handleContextMenu(ctx: Context, settings: Settings, e: MouseEvent, workbookContainer: HTMLDivElement, container: HTMLDivElement, area: 'cell' | 'rowHeader' | 'columnHeader'): void;
16
16
  export declare function mouseRender(ctx: Context, globalCache: GlobalCache, e: MouseEvent, cellInput: HTMLDivElement, scrollX: HTMLDivElement, scrollY: HTMLDivElement, container: HTMLDivElement, fxInput?: HTMLDivElement | null): void;
17
17
  export declare function handleOverlayMouseMove(ctx: Context, globalCache: GlobalCache, e: MouseEvent, cellInput: HTMLDivElement, scrollX: HTMLDivElement, scrollY: HTMLDivElement, container: HTMLDivElement, fxInput?: HTMLDivElement | null): void;
18
18
  export declare function handleOverlayMouseUp(ctx: Context, globalCache: GlobalCache, settings: Settings, e: MouseEvent, scrollbarX: HTMLDivElement, scrollbarY: HTMLDivElement, container: HTMLDivElement, cellInput: HTMLDivElement | null, fxInput: HTMLDivElement | null): void;
@@ -7,9 +7,10 @@ export { defaultSettings } from './settings';
7
7
  export type { Settings, Hooks } from './settings';
8
8
  export { handleCopy, handleGlobalKeyDown, handlePaste, handlePasteByClick, fixPositionOnFrozenCells, handleCellAreaMouseDown, handleCellAreaDoubleClick, handleContextMenu, mouseRender, handleOverlayMouseMove, handleOverlayMouseUp, handleRowHeaderMouseDown, handleColumnHeaderMouseDown, handleColSizeHandleMouseDown, handleColSizeHandleDoubleClick, handleRowSizeHandleMouseDown, handleColFreezeHandleMouseDown, handleRowFreezeHandleMouseDown, } from './events';
9
9
  export * from './locale';
10
- export { getBorderInfoComputeRange, getBorderInfoCompute, normalizedCellAttr, normalizedAttr, getCellValue, setCellValue, getRealCellValue, mergeBorder, cancelNormalSelected, updateCell, getRangetxt, getRangeByTxt, getInlineStringHTML, getStyleByCell, clearSelectedCellFormat, clearRowsCellsFormat, clearColumnsCellsFormat, clipboard, moveToEnd, getRangeRectsByCharacterOffset, update, is_date, valueShowEs, FormulaCache, groupValuesRefresh, setCaretPosition, getrangeseleciton, getFormulaEditorOwner, rangeHightlightselected, handleFormulaInput, israngeseleciton, createRangeHightlight, maybeRecoverDirtyRangeSelection, getFormulaRangeIndexAtCaret, isCaretAtValidFormulaRangeInsertionPoint, isLegacyFormulaRangeMode, markRangeSelectionDirty, setFormulaEditorOwner, functionHTMLGenerate, suppressFormulaRangeSelectionForInitialEdit, rangeSetValue, getFormulaRangeIndexForKeyboardSync, createFormulaRangeSelect, isFormulaReferenceInputMode, initFreeze, isInlineStringCell, getInlineStringNoStyle, rowLocation, rowLocationByIndex, colLocation, colLocationByIndex, insertRowCol, deleteRowCol, hideSelected, showSelected, isShowHidenCR, scrollToHighlightCell, selectTitlesMap, selectTitlesRange, normalizeSelection, syncPrimaryCellActiveFromSelection, setPrimaryCellActive, advancePrimaryCellInLastMultiSelection, moveHighlightCell, deleteSelectedCellText, selectAll, fixRowStyleOverflowInFreeze, fixColumnStyleOverflowInFreeze, calcSelectionInfo, addSheet, deleteSheet, editSheetName, changeSheet, updateFormat, autoSelectionFormula, handleBold, handleItalic, handleStrikeThrough, handleUnderline, handleHorizontalAlign, handleVerticalAlign, handleTextColor, handleTextBackground, handleBorder, handleMerge, handleSort, handleFreeze, handleTextSize, handleSum, handleLink, toolbarItemClickHandler, toolbarItemSelectedFunc, handleScreenShot, insertImage, showImgChooser, drawArrow, setEditingComment, removeEditingComment, newComment, editComment, deleteComment, showComments, showHideComment, showHideAllComments, onCommentBoxMoveStart, removeActiveImage, cancelActiveImgItem, onImageMoveStart, onImageResizeStart, createDropCellRange, sortSelection, searchAll, searchNext, replace, replaceAll, getCellRowColumn, getCellHyperlink, saveHyperlink, removeHyperlink, showLinkCard, goToLink, isLinkValid, createFilterOptions, clearFilter, createFilter, getFilterColumnValues, getFilterColumnColors, orderbydatafiler, saveFilter, onCellsMoveStart, cfSplitRange, updateMoreCell, getRegStr, getDataArr, applyLocation, getOptionValue, getSelectRange, getDropdownList, setDropdownValue, confirmMessage, setConditionRules, handleOverlayTouchStart, handleOverlayTouchEnd, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, handleKeydownForZoom, jfrefreshgrid, sanitizeDuneUrl, insertDuneChart, onIframeMoveStart, onIframeResizeStart, onIframeMove, onIframeMoveEnd, onIframeResize, onIframeResizeEnd, setCellError, clearCellError, isdatatypemulti, diff, isdatetime, isRealNull, isRealNum, isNumericCellType, iscelldata, getcellrange, cancelFunctionrangeSelected, seletedHighlistByindex, spillSortResult, execfunction, insertUpdateFunctionGroup, remapFormulaReferencesByMap, checkCF, getComputeMap, cancelPaintModel, hideCRCount, getdatabyselection, } from './modules';
10
+ export { getBorderInfoComputeRange, getBorderInfoCompute, normalizedCellAttr, normalizedAttr, getCellValue, setCellValue, getRealCellValue, mergeBorder, cancelNormalSelected, updateCell, getRangetxt, getRangeByTxt, getInlineStringHTML, getStyleByCell, clearSelectedCellFormat, clearRowsCellsFormat, clearColumnsCellsFormat, clipboard, moveToEnd, getRangeRectsByCharacterOffset, update, is_date, valueShowEs, FormulaCache, groupValuesRefresh, execFunctionGroup, setCaretPosition, getrangeseleciton, getFormulaEditorOwner, rangeHightlightselected, handleFormulaInput, israngeseleciton, createRangeHightlight, maybeRecoverDirtyRangeSelection, getFormulaRangeIndexAtCaret, isCaretAtValidFormulaRangeInsertionPoint, isLegacyFormulaRangeMode, markRangeSelectionDirty, setFormulaEditorOwner, functionHTMLGenerate, suppressFormulaRangeSelectionForInitialEdit, rangeSetValue, getFormulaRangeIndexForKeyboardSync, createFormulaRangeSelect, isFormulaReferenceInputMode, seedFormulaFuncSelectedRangeFromLastSelection, initFreeze, isInlineStringCell, getInlineStringNoStyle, rowLocation, rowLocationByIndex, colLocation, colLocationByIndex, insertRowCol, deleteRowCol, hideSelected, showSelected, isShowHidenCR, scrollToHighlightCell, selectTitlesMap, selectTitlesRange, normalizeSelection, syncPrimaryCellActiveFromSelection, setPrimaryCellActive, advancePrimaryCellInLastMultiSelection, snapSheetSelectionFocusToCellPreserveMultiRange, moveHighlightCell, deleteSelectedCellText, selectAll, fixRowStyleOverflowInFreeze, fixColumnStyleOverflowInFreeze, calcSelectionInfo, addSheet, deleteSheet, editSheetName, changeSheet, updateFormat, autoSelectionFormula, handleBold, handleItalic, handleStrikeThrough, handleUnderline, handleHorizontalAlign, handleVerticalAlign, handleTextColor, handleTextBackground, handleBorder, handleMerge, handleSort, handleFreeze, handleTextSize, handleSum, handleLink, toolbarItemClickHandler, toolbarItemSelectedFunc, handleScreenShot, insertImage, showImgChooser, drawArrow, setEditingComment, removeEditingComment, newComment, editComment, deleteComment, showComments, showHideComment, showHideAllComments, onCommentBoxMoveStart, removeActiveImage, cancelActiveImgItem, onImageMoveStart, onImageResizeStart, createDropCellRange, sortSelection, searchAll, searchNext, replace, replaceAll, getSearchIndexArr, getSearchIndexArrAsync, getFindRangeOnCurrentSheet, getQuickSearchIndexArr, getQuickSearchHiddenConfig, expandCellRectForMerge, shouldQuickSearchUseAsync, runQuickSearchIndexArrAsync, QUICK_SEARCH_ASYNC_ROW_THRESHOLD, parseRangeText, getCellRowColumn, getCellHyperlink, saveHyperlink, removeHyperlink, showLinkCard, goToLink, isLinkValid, createFilterOptions, clearFilter, createFilter, getFilterColumnValues, getFilterColumnColors, orderbydatafiler, saveFilter, onCellsMoveStart, cfSplitRange, updateMoreCell, getRegStr, getDataArr, applyLocation, getOptionValue, getSelectRange, getDropdownList, setDropdownValue, confirmMessage, setConditionRules, handleOverlayTouchStart, handleOverlayTouchEnd, MAX_ZOOM_RATIO, MIN_ZOOM_RATIO, handleKeydownForZoom, jfrefreshgrid, sanitizeDuneUrl, insertDuneChart, onIframeMoveStart, onIframeResizeStart, onIframeMove, onIframeMoveEnd, onIframeResize, onIframeResizeEnd, setCellError, clearCellError, isdatatypemulti, diff, isdatetime, isRealNull, isRealNum, isNumericCellType, iscelldata, getcellrange, cancelFunctionrangeSelected, seletedHighlistByindex, spillSortResult, execfunction, insertUpdateFunctionGroup, remapFormulaReferencesByMap, checkCF, getComputeMap, cancelPaintModel, hideCRCount, getdatabyselection, } from './modules';
11
11
  export type { FilterDate, FilterValue, FilterColor } from './modules';
12
12
  export { getFreezeState, toggleFreeze, indexToColumnChar, escapeScriptTag, escapeHTMLTag, getSheetIndex, replaceHtml, isAllowEdit, isAllowEditReadOnly, filterPatch, patchToOp, opToPatch, inverseRowColOptions, } from './utils';
13
13
  export type { PatchOptions, ChangedSheet } from './utils';
14
14
  export type { Op, Cell, CellWithRowAndCol, CellMatrix, Selection, Presence, Sheet, GlobalCache, SingleRange, Range, SearchResult, LinkCardProps, LiveQueryData, Freezen, } from './types';
15
+ export type { CheckModes, HyperlinkMap, FindSearchScope, SearchHiddenConfig, SearchNextResult, ReplaceAllResult, } from './modules/searchReplace';
15
16
  export { cellFadeAnimator, markCellChanged } from './animate';
@@ -472,6 +472,20 @@ declare const _default: {
472
472
  regexTextbox: string;
473
473
  wholeTextbox: string;
474
474
  distinguishTextbox: string;
475
+ formulaTextbox: string;
476
+ linkTextbox: string;
477
+ allSheetsTextbox: string;
478
+ searchScopeLabel: string;
479
+ searchScopeAllSheets: string;
480
+ searchScopeThisSheet: string;
481
+ searchScopeSpecificRange: string;
482
+ rangeInputPlaceholder: string;
483
+ rangeInputInvalidError: string;
484
+ rangeSelectOnSheetTitle: string;
485
+ selectDataRangeTitle: string;
486
+ replaceAllWithSkippedTip: string;
487
+ replaceAllSuccessInfotext: string;
488
+ replaceAllSuccessWithSkippedInfotext: string;
475
489
  allReplaceBtn: string;
476
490
  replaceBtn: string;
477
491
  allFindBtn: string;
@@ -499,6 +513,17 @@ declare const _default: {
499
513
  locationTiplessTwoRow: string;
500
514
  locationTiplessTwoColumn: string;
501
515
  locationTipNotFindCell: string;
516
+ quickSearchPlaceholder: string;
517
+ quickSearchDialogAria: string;
518
+ quickSearchMoreOptionsTitle: string;
519
+ quickSearchOpenFindReplaceAria: string;
520
+ quickSearchNextAria: string;
521
+ quickSearchPrevAria: string;
522
+ quickSearchCloseAria: string;
523
+ quickSearchNoResults: string;
524
+ quickSearchSearching: string;
525
+ quickSearchCounterTemplate: string;
526
+ quickSearchMatchCountAria: string;
502
527
  };
503
528
  sheetconfig: {
504
529
  delete: string;
@@ -635,6 +635,20 @@ declare const _default: {
635
635
  regexTextbox: string;
636
636
  wholeTextbox: string;
637
637
  distinguishTextbox: string;
638
+ formulaTextbox: string;
639
+ linkTextbox: string;
640
+ allSheetsTextbox: string;
641
+ searchScopeLabel: string;
642
+ searchScopeAllSheets: string;
643
+ searchScopeThisSheet: string;
644
+ searchScopeSpecificRange: string;
645
+ rangeInputPlaceholder: string;
646
+ rangeInputInvalidError: string;
647
+ rangeSelectOnSheetTitle: string;
648
+ selectDataRangeTitle: string;
649
+ replaceAllWithSkippedTip: string;
650
+ replaceAllSuccessInfotext: string;
651
+ replaceAllSuccessWithSkippedInfotext: string;
638
652
  allReplaceBtn: string;
639
653
  replaceBtn: string;
640
654
  allFindBtn: string;
@@ -662,6 +676,17 @@ declare const _default: {
662
676
  locationTiplessTwoRow: string;
663
677
  locationTiplessTwoColumn: string;
664
678
  locationTipNotFindCell: string;
679
+ quickSearchPlaceholder: string;
680
+ quickSearchDialogAria: string;
681
+ quickSearchMoreOptionsTitle: string;
682
+ quickSearchOpenFindReplaceAria: string;
683
+ quickSearchNextAria: string;
684
+ quickSearchPrevAria: string;
685
+ quickSearchCloseAria: string;
686
+ quickSearchNoResults: string;
687
+ quickSearchSearching: string;
688
+ quickSearchCounterTemplate: string;
689
+ quickSearchMatchCountAria: string;
665
690
  };
666
691
  sheetconfig: {
667
692
  delete: string;
@@ -510,6 +510,20 @@ declare const _default: {
510
510
  regexTextbox: string;
511
511
  wholeTextbox: string;
512
512
  distinguishTextbox: string;
513
+ formulaTextbox: string;
514
+ linkTextbox: string;
515
+ allSheetsTextbox: string;
516
+ searchScopeLabel: string;
517
+ searchScopeAllSheets: string;
518
+ searchScopeThisSheet: string;
519
+ searchScopeSpecificRange: string;
520
+ rangeInputPlaceholder: string;
521
+ rangeInputInvalidError: string;
522
+ rangeSelectOnSheetTitle: string;
523
+ selectDataRangeTitle: string;
524
+ replaceAllWithSkippedTip: string;
525
+ replaceAllSuccessInfotext: string;
526
+ replaceAllSuccessWithSkippedInfotext: string;
513
527
  allReplaceBtn: string;
514
528
  replaceBtn: string;
515
529
  allFindBtn: string;
@@ -537,6 +551,17 @@ declare const _default: {
537
551
  locationTiplessTwoRow: string;
538
552
  locationTiplessTwoColumn: string;
539
553
  locationTipNotFindCell: string;
554
+ quickSearchPlaceholder: string;
555
+ quickSearchDialogAria: string;
556
+ quickSearchMoreOptionsTitle: string;
557
+ quickSearchOpenFindReplaceAria: string;
558
+ quickSearchNextAria: string;
559
+ quickSearchPrevAria: string;
560
+ quickSearchCloseAria: string;
561
+ quickSearchNoResults: string;
562
+ quickSearchSearching: string;
563
+ quickSearchCounterTemplate: string;
564
+ quickSearchMatchCountAria: string;
540
565
  };
541
566
  sheetconfig: {
542
567
  delete: string;
@@ -528,6 +528,20 @@ declare const _default: {
528
528
  regexTextbox: string;
529
529
  wholeTextbox: string;
530
530
  distinguishTextbox: string;
531
+ formulaTextbox: string;
532
+ linkTextbox: string;
533
+ allSheetsTextbox: string;
534
+ searchScopeLabel: string;
535
+ searchScopeAllSheets: string;
536
+ searchScopeThisSheet: string;
537
+ searchScopeSpecificRange: string;
538
+ rangeInputPlaceholder: string;
539
+ rangeInputInvalidError: string;
540
+ rangeSelectOnSheetTitle: string;
541
+ selectDataRangeTitle: string;
542
+ replaceAllWithSkippedTip: string;
543
+ replaceAllSuccessInfotext: string;
544
+ replaceAllSuccessWithSkippedInfotext: string;
531
545
  allReplaceBtn: string;
532
546
  replaceBtn: string;
533
547
  allFindBtn: string;
@@ -555,6 +569,17 @@ declare const _default: {
555
569
  locationTiplessTwoRow: string;
556
570
  locationTiplessTwoColumn: string;
557
571
  locationTipNotFindCell: string;
572
+ quickSearchPlaceholder: string;
573
+ quickSearchDialogAria: string;
574
+ quickSearchMoreOptionsTitle: string;
575
+ quickSearchOpenFindReplaceAria: string;
576
+ quickSearchNextAria: string;
577
+ quickSearchPrevAria: string;
578
+ quickSearchCloseAria: string;
579
+ quickSearchNoResults: string;
580
+ quickSearchSearching: string;
581
+ quickSearchCounterTemplate: string;
582
+ quickSearchMatchCountAria: string;
558
583
  };
559
584
  sheetconfig: {
560
585
  delete: string;
@@ -673,6 +673,20 @@ declare const _default: {
673
673
  regexTextbox: string;
674
674
  wholeTextbox: string;
675
675
  distinguishTextbox: string;
676
+ formulaTextbox: string;
677
+ linkTextbox: string;
678
+ allSheetsTextbox: string;
679
+ searchScopeLabel: string;
680
+ searchScopeAllSheets: string;
681
+ searchScopeThisSheet: string;
682
+ searchScopeSpecificRange: string;
683
+ rangeInputPlaceholder: string;
684
+ rangeInputInvalidError: string;
685
+ rangeSelectOnSheetTitle: string;
686
+ selectDataRangeTitle: string;
687
+ replaceAllWithSkippedTip: string;
688
+ replaceAllSuccessInfotext: string;
689
+ replaceAllSuccessWithSkippedInfotext: string;
676
690
  allReplaceBtn: string;
677
691
  replaceBtn: string;
678
692
  allFindBtn: string;
@@ -700,6 +714,17 @@ declare const _default: {
700
714
  locationTiplessTwoRow: string;
701
715
  locationTiplessTwoColumn: string;
702
716
  locationTipNotFindCell: string;
717
+ quickSearchPlaceholder: string;
718
+ quickSearchDialogAria: string;
719
+ quickSearchMoreOptionsTitle: string;
720
+ quickSearchOpenFindReplaceAria: string;
721
+ quickSearchNextAria: string;
722
+ quickSearchPrevAria: string;
723
+ quickSearchCloseAria: string;
724
+ quickSearchNoResults: string;
725
+ quickSearchSearching: string;
726
+ quickSearchCounterTemplate: string;
727
+ quickSearchMatchCountAria: string;
703
728
  };
704
729
  sheetconfig: {
705
730
  delete: string;
@@ -23,7 +23,9 @@ export declare class FormulaCache {
23
23
  rangedrag_row_start?: boolean;
24
24
  rangeSelectionActive?: boolean | null;
25
25
  keyboardRangeSelectionLock?: boolean;
26
- formulaEditorOwner?: "cell" | "fx" | null;
26
+ /** True after arrow/Shift+arrow moved `func_selectedrange` without updating yellow selection. */
27
+ formulaKeyboardRefSync?: boolean;
28
+ formulaEditorOwner?: 'cell' | 'fx' | null;
27
29
  functionRangeIndex?: number[];
28
30
  functionlistMap: any;
29
31
  execFunctionExist?: any[];
@@ -39,6 +41,13 @@ export declare function insertUpdateFunctionGroup(ctx: Context, r: number, c: nu
39
41
  export declare function execfunction(ctx: Context, txt: string, r: number, c: number, id?: string, calcChainSet?: Set<string>, isrefresh?: boolean, notInsertFunc?: boolean): any[];
40
42
  export declare function groupValuesRefresh(ctx: Context): void;
41
43
  export declare function execFunctionGroup(ctx: Context, origin_r: number, origin_c: number, value: any, id?: string, data?: any, isForce?: boolean): void;
44
+ /**
45
+ * Before the first `moveHighlightCell/Range(..., "rangeOfFormula")` while editing
46
+ * a formula, copy the current yellow selection into `func_selectedrange` so
47
+ * keyboard navigation updates only the blue formula overlay (like mouse drag),
48
+ * without resizing `luckysheet_select_save`.
49
+ */
50
+ export declare function seedFormulaFuncSelectedRangeFromLastSelection(ctx: Context): boolean;
42
51
  export declare function createFormulaRangeSelect(ctx: Context, select: {
43
52
  rangeIndex: number;
44
53
  } & Rect): void;
@@ -51,8 +60,8 @@ export declare function functionHTMLGenerate(txt: string): string;
51
60
  export declare function getLastFormulaRangeIndex($editor: HTMLDivElement): number | null;
52
61
  /** Range cell that contains the caret, if any (inside #luckysheet-rich-text-editor tree). */
53
62
  export declare function getFormulaRangeIndexAtCaret($editor: HTMLDivElement): number | null;
54
- export declare function setFormulaEditorOwner(ctx: Context, owner: "cell" | "fx" | null): void;
55
- export declare function getFormulaEditorOwner(ctx: Context): "cell" | "fx" | null;
63
+ export declare function setFormulaEditorOwner(ctx: Context, owner: 'cell' | 'fx' | null): void;
64
+ export declare function getFormulaEditorOwner(ctx: Context): 'cell' | 'fx' | null;
56
65
  /**
57
66
  * True when the formula text looks like a truncated A1-style range: LHS has a row
58
67
  * number but RHS after ":" is only column letters (e.g. =A1:A after deleting the
@@ -86,7 +95,7 @@ export declare function isLegacyFormulaRangeMode(ctx: Context): boolean;
86
95
  export declare function israngeseleciton(ctx: Context, istooltip?: boolean): boolean;
87
96
  export declare function isFormulaReferenceInputMode(ctx: Context): boolean;
88
97
  export declare function maybeRecoverDirtyRangeSelection(ctx: Context): boolean;
89
- export declare function functionStrChange(txt: string, type: string, rc: "row" | "col", orient: string | null, stindex: number, step: number): string;
98
+ export declare function functionStrChange(txt: string, type: string, rc: 'row' | 'col', orient: string | null, stindex: number, step: number): string;
90
99
  export declare function rangeSetValue(ctx: Context, cellInput: HTMLDivElement, selected: any, fxInput?: HTMLDivElement | null): void;
91
100
  export declare function onFormulaRangeDragEnd(ctx: Context): void;
92
101
  export declare function rangeDrag(ctx: Context, e: MouseEvent, cellInput: HTMLDivElement, scrollLeft: number, scrollTop: number, container: HTMLDivElement, fxInput?: HTMLDivElement | null): void;
@@ -3,12 +3,12 @@ export { normalizedCellAttr, normalizedAttr, getCellValue, setCellValue, getReal
3
3
  export { default as clipboard } from './clipboard';
4
4
  export { moveToEnd, getRangeRectsByCharacterOffset } from './cursor';
5
5
  export { update, is_date, valueShowEs } from './format';
6
- export { FormulaCache, groupValuesRefresh, setCaretPosition, getrangeseleciton, getFormulaEditorOwner, rangeHightlightselected, handleFormulaInput, israngeseleciton, createRangeHightlight, createFormulaRangeSelect, maybeRecoverDirtyRangeSelection, delFunctionGroup, functionHTMLGenerate, onFormulaRangeDragEnd, rangeDrag, rangeSetValue, remapFormulaReferencesByMap, getFormulaRangeIndexAtCaret, isCaretAtValidFormulaRangeInsertionPoint, isLegacyFormulaRangeMode, markRangeSelectionDirty, getFormulaRangeIndexForKeyboardSync, isFormulaReferenceInputMode, functionStrChange, setFormulaEditorOwner, getAllFunctionGroup, suppressFormulaRangeSelectionForInitialEdit, } from './formula';
6
+ export { FormulaCache, groupValuesRefresh, setCaretPosition, getrangeseleciton, getFormulaEditorOwner, rangeHightlightselected, handleFormulaInput, israngeseleciton, createRangeHightlight, createFormulaRangeSelect, maybeRecoverDirtyRangeSelection, delFunctionGroup, functionHTMLGenerate, onFormulaRangeDragEnd, rangeDrag, rangeSetValue, remapFormulaReferencesByMap, getFormulaRangeIndexAtCaret, isCaretAtValidFormulaRangeInsertionPoint, isLegacyFormulaRangeMode, markRangeSelectionDirty, getFormulaRangeIndexForKeyboardSync, isFormulaReferenceInputMode, seedFormulaFuncSelectedRangeFromLastSelection, functionStrChange, setFormulaEditorOwner, getAllFunctionGroup, execFunctionGroup, suppressFormulaRangeSelectionForInitialEdit, } from './formula';
7
7
  export { initFreeze } from './freeze';
8
8
  export { isInlineStringCell, getInlineStringNoStyle } from './inline-string';
9
9
  export { rowLocation, rowLocationByIndex, colLocation, colLocationByIndex, } from './location';
10
10
  export { insertRowCol, deleteRowCol, hideSelected, showSelected, isShowHidenCR, hideCRCount, } from './rowcol';
11
- export { scrollToHighlightCell, seletedHighlistByindex, selectTitlesMap, selectTitlesRange, normalizeSelection, syncPrimaryCellActiveFromSelection, setPrimaryCellActive, advancePrimaryCellInLastMultiSelection, moveHighlightCell, deleteSelectedCellText, selectAll, fixRowStyleOverflowInFreeze, fixColumnStyleOverflowInFreeze, calcSelectionInfo, rangeValueToHtml, } from './selection';
11
+ export { scrollToHighlightCell, seletedHighlistByindex, selectTitlesMap, selectTitlesRange, normalizeSelection, syncPrimaryCellActiveFromSelection, setPrimaryCellActive, advancePrimaryCellInLastMultiSelection, snapSheetSelectionFocusToCellPreserveMultiRange, moveHighlightCell, deleteSelectedCellText, selectAll, fixRowStyleOverflowInFreeze, fixColumnStyleOverflowInFreeze, calcSelectionInfo, rangeValueToHtml, } from './selection';
12
12
  export { addSheet, deleteSheet, editSheetName, changeSheet, updateSheet, } from './sheet';
13
13
  export { updateFormat, autoSelectionFormula, handleBold, handleItalic, handleStrikeThrough, handleUnderline, handleHorizontalAlign, handleVerticalAlign, handleTextColor, handleTextBackground, handleBorder, handleMerge, handleSort, handleFreeze, handleTextSize, handleSum, handleLink, toolbarItemClickHandler, toolbarItemSelectedFunc, updateFormatCell, cancelPaintModel, } from './toolbar';
14
14
  export { handleScreenShot } from './screenshot';
@@ -17,7 +17,8 @@ export { showImgChooser, insertImage, removeActiveImage, cancelActiveImgItem, on
17
17
  export { createDropCellRange, dropCellCache, getTypeItemHide, updateDropCell, } from './dropCell';
18
18
  export { mergeCells } from './merge';
19
19
  export { sortSelection, spillSortResult } from './sort';
20
- export { searchAll, searchNext, replace, replaceAll } from './searchReplace';
20
+ export { searchAll, searchNext, replace, replaceAll, getSearchIndexArr, getSearchIndexArrAsync, getFindRangeOnCurrentSheet, getQuickSearchIndexArr, getQuickSearchHiddenConfig, expandCellRectForMerge, shouldQuickSearchUseAsync, runQuickSearchIndexArrAsync, QUICK_SEARCH_ASYNC_ROW_THRESHOLD, parseRangeText, } from './searchReplace';
21
+ export type { CheckModes, HyperlinkMap, FindSearchScope, SearchHiddenConfig, SearchNextResult, ReplaceAllResult, } from './searchReplace';
21
22
  export { getCellRowColumn, getCellHyperlink, saveHyperlink, removeHyperlink, showLinkCard, goToLink, isLinkValid, } from './hyperlink';
22
23
  export { createFilterOptions, clearFilter, createFilter, getFilterColumnValues, getFilterColumnColors, orderbydatafiler, saveFilter, } from './filter';
23
24
  export type { FilterDate, FilterValue, FilterColor } from './filter';
@@ -20,12 +20,12 @@ export declare const inlineStyleAffectAttribute: {
20
20
  fc: number;
21
21
  };
22
22
  export declare const inlineStyleAffectCssName: {
23
- "font-weight": number;
24
- "font-style": number;
25
- "font-family": number;
26
- "text-decoration": number;
27
- "border-bottom": number;
28
- "font-size": number;
23
+ 'font-weight': number;
24
+ 'font-style': number;
25
+ 'font-family': number;
26
+ 'text-decoration': number;
27
+ 'border-bottom': number;
28
+ 'font-size': number;
29
29
  color: number;
30
30
  };
31
31
  export declare function isInlineStringCell(cell: any): boolean;
@@ -10,10 +10,10 @@ import { Context } from '../context';
10
10
  * @returns
11
11
  */
12
12
  export declare function insertRowCol(ctx: Context, op: {
13
- type: "row" | "column";
13
+ type: 'row' | 'column';
14
14
  index: number;
15
15
  count: number;
16
- direction: "lefttop" | "rightbottom";
16
+ direction: 'lefttop' | 'rightbottom';
17
17
  id: string;
18
18
  /** Pre-insert row index for each inserted row (length must equal count). */
19
19
  templateSourceRows?: number[];
@@ -21,7 +21,7 @@ export declare function insertRowCol(ctx: Context, op: {
21
21
  templateSourceColumns?: number[];
22
22
  }, changeSelection?: boolean): void;
23
23
  export declare function deleteRowCol(ctx: Context, op: {
24
- type: "row" | "column";
24
+ type: 'row' | 'column';
25
25
  start: number;
26
26
  end: number;
27
27
  id?: string;
@@ -1,37 +1,129 @@
1
1
  import { Context } from '../context';
2
- import { CellMatrix, SearchResult, GlobalCache } from '../types';
2
+ import { CellMatrix, Selection, SearchResult, GlobalCache } from '../types';
3
3
 
4
+ /** Where find/replace scans on the current sheet (workbook-wide only applies to find-all). */
5
+ export type FindSearchScope = 'allSheets' | 'thisSheet' | 'specificRange';
6
+ /**
7
+ * Return value of {@link searchNext}.
8
+ *
9
+ * @remarks
10
+ * **Semver:** Older releases returned `string | null` from `searchNext` (a localized message, or `null` on success).
11
+ * The object form is a **breaking change** for callers that still expect `string | null`; update them to read
12
+ * {@link SearchNextResult.alertMsg} (and optionally {@link SearchNextResult.matchIndex} /
13
+ * {@link SearchNextResult.matchTotal} for on-sheet scoped search UI).
14
+ */
15
+ export type SearchNextResult = {
16
+ /** Localized message for an alert dialog, or `null` when the next/previous hit was selected successfully. */
17
+ alertMsg: string | null;
18
+ /**
19
+ * 0-based index of the selected hit in the current sheet's ordered hit list when
20
+ * `scope` is `thisSheet` or `specificRange` and navigation succeeded; otherwise `0`.
21
+ */
22
+ matchIndex: number;
23
+ /**
24
+ * Size of that hit list for `thisSheet` / `specificRange`; `0` when not applicable (e.g. `allSheets`, errors,
25
+ * or empty search).
26
+ */
27
+ matchTotal: number;
28
+ };
29
+ /** Outcome of {@link replaceAll} for UI (inline status vs. error message). */
30
+ export type ReplaceAllResult = {
31
+ ok: false;
32
+ message: string;
33
+ } | {
34
+ ok: true;
35
+ replaced: number;
36
+ skipped: number;
37
+ };
38
+ /** Full used grid on the active sheet for find/replace on this sheet; `null` if the sheet has no cells. */
39
+ export declare function getFindRangeOnCurrentSheet(flowdata: CellMatrix): Selection[] | null;
40
+ export type HyperlinkMap = Record<string, {
41
+ linkType?: string;
42
+ linkAddress?: string;
43
+ }>;
44
+ export interface CheckModes {
45
+ regCheck?: boolean;
46
+ wordCheck?: boolean;
47
+ caseCheck?: boolean;
48
+ /** Also search inside formula strings (cell.f) */
49
+ formulaCheck?: boolean;
50
+ /** Also search sheet hyperlink address/type for the cell */
51
+ linkCheck?: boolean;
52
+ }
53
+ /** Skip cells in hidden rows/columns (manual hide + filter). */
54
+ export type SearchHiddenConfig = {
55
+ rowhidden?: Record<string, number> | null;
56
+ colhidden?: Record<string, number> | null;
57
+ };
4
58
  export declare function getSearchIndexArr(searchText: string, range: {
5
59
  row: number[];
6
60
  column: number[];
7
- }[], flowdata: CellMatrix, { regCheck, wordCheck, caseCheck }?: {
8
- regCheck: boolean;
9
- wordCheck: boolean;
10
- caseCheck: boolean;
11
- }): {
61
+ }[], flowdata: CellMatrix, { regCheck, wordCheck, caseCheck, formulaCheck, linkCheck, }?: CheckModes, hyperlinkMap?: HyperlinkMap, hiddenConfig?: SearchHiddenConfig): {
12
62
  r: number;
13
63
  c: number;
14
64
  }[];
15
- export declare function searchNext(ctx: Context, searchText: string, checkModes: {
16
- regCheck: boolean;
17
- wordCheck: boolean;
18
- caseCheck: boolean;
19
- }): any;
20
- export declare function searchAll(ctx: Context, searchText: string, checkModes: {
21
- regCheck: boolean;
22
- wordCheck: boolean;
23
- caseCheck: boolean;
24
- }): SearchResult[];
65
+ /** Use chunked async scan when the active sheet has at least this many rows. */
66
+ export declare const QUICK_SEARCH_ASYNC_ROW_THRESHOLD = 50000;
67
+ export declare function getQuickSearchHiddenConfig(ctx: Context): SearchHiddenConfig;
68
+ /** Display-only, case-insensitive substring find; skips hidden rows/columns. */
69
+ export declare function getQuickSearchIndexArr(ctx: Context, searchText: string, flowdata: CellMatrix): {
70
+ r: number;
71
+ c: number;
72
+ }[];
73
+ /** Bounding grid rect for overlay (merged region or single cell). */
74
+ export declare function expandCellRectForMerge(ctx: Context, r: number, c: number): {
75
+ r1: number;
76
+ r2: number;
77
+ c1: number;
78
+ c2: number;
79
+ };
80
+ export declare function shouldQuickSearchUseAsync(flowdata: CellMatrix): boolean;
81
+ /**
82
+ * Finds the next or previous match, updates selection and scroll, and optionally switches sheet when
83
+ * `scope` is `allSheets`.
84
+ *
85
+ * @param specificRange - When `scope` is `specificRange`, restricts the scan to this rectangle on the active sheet.
86
+ * @returns Structured result; see {@link SearchNextResult} and semver note on {@link SearchNextResult} remarks.
87
+ */
88
+ export declare function searchNext(ctx: Context, searchText: string, checkModes: CheckModes, scope?: FindSearchScope, direction?: 'next' | 'prev', specificRange?: Selection): SearchNextResult;
89
+ export declare function searchAll(ctx: Context, searchText: string, checkModes: CheckModes, scope?: FindSearchScope, specificRange?: Selection): SearchResult[];
25
90
  export declare function onSearchDialogMoveStart(globalCache: GlobalCache, e: MouseEvent, container: HTMLDivElement): void;
26
91
  export declare function onSearchDialogMove(globalCache: GlobalCache, e: MouseEvent): void;
27
92
  export declare function onSearchDialogMoveEnd(globalCache: GlobalCache): void;
28
- export declare function replace(ctx: Context, searchText: string, replaceText: string, checkModes: {
29
- regCheck: boolean;
30
- wordCheck: boolean;
31
- caseCheck: boolean;
32
- }): any;
33
- export declare function replaceAll(ctx: Context, searchText: string, replaceText: string, checkModes: {
34
- regCheck: boolean;
35
- wordCheck: boolean;
36
- caseCheck: boolean;
37
- }): any;
93
+ export declare function replace(ctx: Context, searchText: string, replaceText: string, checkModes: CheckModes, specificRange?: Selection): any;
94
+ export declare function replaceAll(ctx: Context, searchText: string, replaceText: string, checkModes: CheckModes, specificRange?: Selection): ReplaceAllResult;
95
+ /**
96
+ * Asynchronously scans `flowdata` for `searchText` in chunks, yielding
97
+ * between chunks so the main thread stays responsive.
98
+ *
99
+ * Returns an AbortController — call `.abort()` to cancel an in-flight scan.
100
+ *
101
+ * @param onProgress - called with partial results after each chunk
102
+ * @param onComplete - called once with the full result array when done
103
+ */
104
+ export declare function getSearchIndexArrAsync(searchText: string, range: {
105
+ row: number[];
106
+ column: number[];
107
+ }[], flowdata: CellMatrix, modes: CheckModes, hyperlinkMap?: HyperlinkMap, hiddenConfig?: SearchHiddenConfig, onProgress?: (partial: {
108
+ r: number;
109
+ c: number;
110
+ }[]) => void, onComplete?: (all: {
111
+ r: number;
112
+ c: number;
113
+ }[]) => void): AbortController;
114
+ /** Chunked quick search with hidden row/column skip (same semantics as `getQuickSearchIndexArr`). */
115
+ export declare function runQuickSearchIndexArrAsync(ctx: Context, searchText: string, flowdata: CellMatrix, onProgress: (partial: {
116
+ r: number;
117
+ c: number;
118
+ }[]) => void, onComplete: (all: {
119
+ r: number;
120
+ c: number;
121
+ }[]) => void): AbortController;
122
+ /**
123
+ * Parses an A1-notation range string (e.g. "E10:H14" or "Sheet1!E10:H14")
124
+ * into a `Selection` suitable for scoping find/replace.
125
+ *
126
+ * Returns `null` if the text is empty or cannot be parsed.
127
+ * The sheet-name prefix is stripped before parsing — the active sheet is always used.
128
+ */
129
+ export declare function parseRangeText(rangeText: string, ctx: Context): Selection | null;
@@ -17,7 +17,7 @@ export declare function seletedHighlistByindex(ctx: Context, r1: number, r2: num
17
17
  * else null). Pass `selection` explicitly when normalizing a **new** array that is not
18
18
  * yet assigned to `ctx.luckysheet_select_save`.
19
19
  */
20
- export declare function syncPrimaryCellActiveFromSelection(ctx: Context, selection?: SheetType["luckysheet_select_save"] | null): void;
20
+ export declare function syncPrimaryCellActiveFromSelection(ctx: Context, selection?: SheetType['luckysheet_select_save'] | null): void;
21
21
  /**
22
22
  * Multi-cell range only: move `row_focus` / `column_focus` (and primary) in
23
23
  * column-major order — forward: down then next column right, wrapping top-left;
@@ -32,24 +32,30 @@ export declare function advancePrimaryCellInLastMultiSelection(ctx: Context, for
32
32
  * selection that runs `normalizeSelection` will re-sync from the new range.
33
33
  */
34
34
  export declare function setPrimaryCellActive(ctx: Context, r: number, c: number): void;
35
- export declare function normalizeSelection(ctx: Context, selection: SheetType["luckysheet_select_save"]): import('..').Selection[] | undefined;
35
+ /**
36
+ * After formula segment / delete handling, move selection focus to the edited cell
37
+ * (r,c). If the sheet already has a multi-cell range and (r,c) is inside it, keep
38
+ * that range so Enter-primary navigation + typing do not collapse the yellow box.
39
+ */
40
+ export declare function snapSheetSelectionFocusToCellPreserveMultiRange(ctx: Context, r: number, c: number): void;
41
+ export declare function normalizeSelection(ctx: Context, selection: SheetType['luckysheet_select_save']): import('..').Selection[] | undefined;
36
42
  export declare function selectTitlesMap(rangeMap: Record<string, number>, range1: number, range2: number): Record<string, number>;
37
43
  export declare function selectTitlesRange(map: Record<string, number>): number[][];
38
- export declare function pasteHandlerOfPaintModel(ctx: Context, copyRange: Context["luckysheet_copy_save"]): void;
44
+ export declare function pasteHandlerOfPaintModel(ctx: Context, copyRange: Context['luckysheet_copy_save']): void;
39
45
  export declare function selectionCopyShow(range: any, ctx: Context): void;
40
46
  export declare function rowHasMerged(ctx: Context, r: number, c1: number, c2: number): boolean;
41
47
  export declare function colHasMerged(ctx: Context, c: number, r1: number, r2: number): boolean;
42
48
  export declare function getRowMerge(ctx: Context, rIndex: number, c1: number, c2: number): (number | null)[];
43
49
  export declare function getColMerge(ctx: Context, cIndex: number, r1: number, r2: number): (number | null)[];
44
- export declare function moveHighlightCell(ctx: Context, postion: "down" | "right", index: number, type: "rangeOfSelect" | "rangeOfFormula"): void;
45
- export declare function moveHighlightRange(ctx: Context, postion: "down" | "right", index: number, type: "rangeOfSelect" | "rangeOfFormula"): void;
50
+ export declare function moveHighlightCell(ctx: Context, postion: 'down' | 'right', index: number, type: 'rangeOfSelect' | 'rangeOfFormula'): void;
51
+ export declare function moveHighlightRange(ctx: Context, postion: 'down' | 'right', index: number, type: 'rangeOfSelect' | 'rangeOfFormula'): void;
46
52
  export declare function rangeValueToHtml(ctx: Context, sheetId: string, ranges?: Range): string | null;
47
53
  export declare function copy(ctx: Context): void;
48
54
  export declare function deleteSelectedCellText(ctx: Context): string;
49
55
  export declare function deleteSelectedCellFormat(ctx: Context): string;
50
56
  export declare function fillRightData(ctx: Context): string;
51
57
  export declare function fillDownData(ctx: Context): string;
52
- export declare function textFormat(ctx: Context, type: "left" | "center" | "right"): string;
58
+ export declare function textFormat(ctx: Context, type: 'left' | 'center' | 'right'): string;
53
59
  export declare function fillDate(ctx: Context): string;
54
60
  export declare function fillTime(ctx: Context): string;
55
61
  export declare function selectIsOverlap(ctx: Context, range?: any): boolean;
@@ -2,7 +2,7 @@ import { Patch as ImmerPatch } from 'immer';
2
2
  import { PatchOptions } from './utils';
3
3
 
4
4
  export type Op = {
5
- op: "replace" | "remove" | "add" | "insertRowCol" | "deleteRowCol" | "addSheet" | "deleteSheet";
5
+ op: 'replace' | 'remove' | 'add' | 'insertRowCol' | 'deleteRowCol' | 'addSheet' | 'deleteSheet';
6
6
  id?: string;
7
7
  path: (string | number)[];
8
8
  value?: any;
@@ -227,7 +227,7 @@ export type Sheet = {
227
227
  dynamicArray_compute?: any;
228
228
  dynamicArray?: any[];
229
229
  frozen?: {
230
- type: "row" | "column" | "both" | "rangeRow" | "rangeColumn" | "rangeBoth";
230
+ type: 'row' | 'column' | 'both' | 'rangeRow' | 'rangeColumn' | 'rangeBoth';
231
231
  range?: {
232
232
  row_focus: number;
233
233
  column_focus: number;
@@ -388,6 +388,8 @@ export type GlobalCache = {
388
388
  } | undefined;
389
389
  };
390
390
  };
391
+ /** Element to restore focus to after closing Quick Search (not stored in Immer context). */
392
+ quickSearchReturnFocus?: Element | null;
391
393
  linkCard?: {
392
394
  mouseEnter?: boolean;
393
395
  rangeSelectionModal?: {