@odoo/o-spreadsheet 16.4.0 → 16.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -112,8 +112,8 @@ const SELECTION_BORDER_COLOR = "#3266ca";
112
112
  const HEADER_BORDER_COLOR = "#C0C0C0";
113
113
  const CELL_BORDER_COLOR = "#E2E3E3";
114
114
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
115
- const MENU_ITEM_DISABLED_COLOR = "#CACACA";
116
115
  const BG_HOVER_COLOR = "#EBEBEB";
116
+ const DISABLED_TEXT_COLOR = "#CACACA";
117
117
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
118
118
  const LINK_COLOR = "#01666b";
119
119
  const FILTERS_COLOR = "#188038";
@@ -4055,7 +4055,6 @@ const readonlyAllowedCommands = new Set([
4055
4055
  "SET_VIEWPORT_OFFSET",
4056
4056
  "SELECT_SEARCH_NEXT_MATCH",
4057
4057
  "SELECT_SEARCH_PREVIOUS_MATCH",
4058
- "REFRESH_SEARCH",
4059
4058
  "UPDATE_SEARCH",
4060
4059
  "CLEAR_SEARCH",
4061
4060
  "EVALUATE_CELLS",
@@ -5994,7 +5993,7 @@ css /* scss */ `
5994
5993
  }
5995
5994
  }
5996
5995
  &.disabled {
5997
- color: ${MENU_ITEM_DISABLED_COLOR};
5996
+ color: ${DISABLED_TEXT_COLOR};
5998
5997
  cursor: not-allowed;
5999
5998
  }
6000
5999
  }
@@ -22694,6 +22693,7 @@ class FindAndReplacePanel extends owl.Component {
22694
22693
  state = owl.useState(this.initialState());
22695
22694
  debounceTimeoutId;
22696
22695
  showFormulaState = false;
22696
+ debouncedUpdateSearch;
22697
22697
  findAndReplaceRef = owl.useRef("findAndReplace");
22698
22698
  get hasSearchResult() {
22699
22699
  return this.env.model.getters.getCurrentSelectedMatchIndex() !== null;
@@ -22703,11 +22703,16 @@ class FindAndReplacePanel extends owl.Component {
22703
22703
  }
22704
22704
  setup() {
22705
22705
  this.showFormulaState = this.env.model.getters.shouldShowFormulas();
22706
+ this.debouncedUpdateSearch = debounce(this.updateSearch.bind(this), 200);
22706
22707
  owl.onMounted(() => this.focusInput());
22707
22708
  owl.onWillUnmount(() => {
22708
22709
  this.env.model.dispatch("CLEAR_SEARCH");
22709
22710
  this.env.model.dispatch("SET_FORMULA_VISIBILITY", { show: this.showFormulaState });
22710
22711
  });
22712
+ owl.useEffect(() => {
22713
+ this.state.searchOptions.searchFormulas = this.env.model.getters.shouldShowFormulas();
22714
+ this.searchFormulas();
22715
+ }, () => [this.env.model.getters.shouldShowFormulas()]);
22711
22716
  }
22712
22717
  onInput(ev) {
22713
22718
  this.state.toSearch = ev.target.value;
@@ -22727,10 +22732,6 @@ class FindAndReplacePanel extends owl.Component {
22727
22732
  this.replace();
22728
22733
  }
22729
22734
  }
22730
- onFocusSidePanel() {
22731
- this.state.searchOptions.searchFormulas = this.env.model.getters.shouldShowFormulas();
22732
- this.env.model.dispatch("REFRESH_SEARCH");
22733
- }
22734
22735
  searchFormulas() {
22735
22736
  this.env.model.dispatch("SET_FORMULA_VISIBILITY", {
22736
22737
  show: this.state.searchOptions.searchFormulas,
@@ -22749,13 +22750,6 @@ class FindAndReplacePanel extends owl.Component {
22749
22750
  searchOptions: this.state.searchOptions,
22750
22751
  });
22751
22752
  }
22752
- debouncedUpdateSearch() {
22753
- clearTimeout(this.debounceTimeoutId);
22754
- this.debounceTimeoutId = setTimeout(() => {
22755
- this.updateSearch();
22756
- this.debounceTimeoutId = undefined;
22757
- }, 400);
22758
- }
22759
22753
  replace() {
22760
22754
  this.env.model.dispatch("REPLACE_SEARCH", {
22761
22755
  replaceWith: this.state.replaceWith,
@@ -24695,6 +24689,15 @@ function dragFigureForResize(initialFigure, dirX, dirY, { x: mouseX, y: mouseY }
24695
24689
  y = initialFigure.y - deltaY;
24696
24690
  }
24697
24691
  }
24692
+ // Restrict resizing if x or y reaches header boundaries
24693
+ if (x < 0) {
24694
+ width += x;
24695
+ x = 0;
24696
+ }
24697
+ if (y < 0) {
24698
+ height += y;
24699
+ y = 0;
24700
+ }
24698
24701
  return { ...initialFigure, x, y, width, height };
24699
24702
  }
24700
24703
 
@@ -38534,6 +38537,7 @@ class FindAndReplacePlugin extends UIPlugin {
38534
38537
  searchFormulas: false,
38535
38538
  };
38536
38539
  toSearch = "";
38540
+ isSearchDirty = false;
38537
38541
  // ---------------------------------------------------------------------------
38538
38542
  // Command Handling
38539
38543
  // ---------------------------------------------------------------------------
@@ -38557,18 +38561,33 @@ class FindAndReplacePlugin extends UIPlugin {
38557
38561
  case "REPLACE_ALL_SEARCH":
38558
38562
  this.replaceAll(cmd.replaceWith);
38559
38563
  break;
38564
+ case "EVALUATE_CELLS":
38565
+ case "UPDATE_CELL":
38566
+ case "REMOVE_FILTER_TABLE":
38567
+ case "UPDATE_FILTER":
38568
+ this.isSearchDirty = true;
38569
+ break;
38560
38570
  case "UNDO":
38561
38571
  case "REDO":
38562
38572
  case "REMOVE_COLUMNS_ROWS":
38573
+ case "HIDE_COLUMNS_ROWS":
38574
+ case "UNHIDE_COLUMNS_ROWS":
38563
38575
  case "ADD_COLUMNS_ROWS":
38564
- this.clearSearch();
38576
+ case "EVALUATE_CELLS":
38577
+ case "UPDATE_CELL":
38578
+ this.isSearchDirty = true;
38565
38579
  break;
38566
38580
  case "ACTIVATE_SHEET":
38567
- case "REFRESH_SEARCH":
38568
38581
  this.refreshSearch();
38569
38582
  break;
38570
38583
  }
38571
38584
  }
38585
+ finalize() {
38586
+ if (this.isSearchDirty) {
38587
+ this.refreshSearch();
38588
+ this.isSearchDirty = false;
38589
+ }
38590
+ }
38572
38591
  // ---------------------------------------------------------------------------
38573
38592
  // Getters
38574
38593
  // ---------------------------------------------------------------------------
@@ -38624,6 +38643,11 @@ class FindAndReplacePlugin extends UIPlugin {
38624
38643
  if (this.toSearch) {
38625
38644
  for (const cell of Object.values(cells)) {
38626
38645
  const { col, row } = this.getters.getCellPosition(cell.id);
38646
+ const isColHidden = this.getters.isColHidden(sheetId, col);
38647
+ const isRowHidden = this.getters.isRowHidden(sheetId, row);
38648
+ if (isColHidden || isRowHidden) {
38649
+ continue;
38650
+ }
38627
38651
  if (cell &&
38628
38652
  this.currentSearchRegex &&
38629
38653
  this.currentSearchRegex.test(this.getSearchableString({ sheetId, col, row }))) {
@@ -38683,37 +38707,32 @@ class FindAndReplacePlugin extends UIPlugin {
38683
38707
  // ---------------------------------------------------------------------------
38684
38708
  // Replace
38685
38709
  // ---------------------------------------------------------------------------
38686
- /**
38687
- * Replace the value of the currently selected match
38688
- */
38689
- replace(replaceWith) {
38690
- if (this.selectedMatchIndex === null || !this.currentSearchRegex) {
38710
+ replaceMatch(selectedMatch, replaceWith) {
38711
+ if (!this.currentSearchRegex) {
38691
38712
  return;
38692
38713
  }
38693
- const matches = this.searchMatches;
38694
- const selectedMatch = matches[this.selectedMatchIndex];
38695
38714
  const sheetId = this.getters.getActiveSheetId();
38696
38715
  const cell = this.getters.getCell({ sheetId, ...selectedMatch });
38716
+ const { col, row } = selectedMatch;
38697
38717
  if (cell?.isFormula && !this.searchOptions.searchFormulas) {
38698
- this.selectNextCell(Direction.next);
38718
+ return;
38699
38719
  }
38700
- else {
38701
- const replaceRegex = new RegExp(this.currentSearchRegex.source, this.currentSearchRegex.flags + "g");
38702
- const toReplace = this.getSearchableString({
38703
- sheetId,
38704
- col: selectedMatch.col,
38705
- row: selectedMatch.row,
38706
- });
38707
- const newContent = toReplace.replace(replaceRegex, replaceWith);
38708
- this.dispatch("UPDATE_CELL", {
38709
- sheetId: this.getters.getActiveSheetId(),
38710
- col: selectedMatch.col,
38711
- row: selectedMatch.row,
38712
- content: canonicalizeContent(newContent, this.getters.getLocale()),
38713
- });
38714
- this.searchMatches.splice(this.selectedMatchIndex, 1);
38715
- this.selectNextCell(Direction.current);
38720
+ const replaceRegex = new RegExp(this.currentSearchRegex.source, this.currentSearchRegex.flags + "g");
38721
+ const toReplace = this.getSearchableString({ sheetId, col, row });
38722
+ const content = toReplace.replace(replaceRegex, replaceWith);
38723
+ const canonicalContent = canonicalizeContent(content, this.getters.getLocale());
38724
+ this.dispatch("UPDATE_CELL", { sheetId, col, row, content: canonicalContent });
38725
+ }
38726
+ /**
38727
+ * Replace the value of the currently selected match
38728
+ */
38729
+ replace(replaceWith) {
38730
+ if (this.selectedMatchIndex === null) {
38731
+ return;
38716
38732
  }
38733
+ const selectedMatch = this.searchMatches[this.selectedMatchIndex];
38734
+ this.replaceMatch(selectedMatch, replaceWith);
38735
+ this.selectNextCell(Direction.next);
38717
38736
  }
38718
38737
  /**
38719
38738
  * Apply the replace function to all the matches one time.
@@ -38721,7 +38740,7 @@ class FindAndReplacePlugin extends UIPlugin {
38721
38740
  replaceAll(replaceWith) {
38722
38741
  const matchCount = this.searchMatches.length;
38723
38742
  for (let i = 0; i < matchCount; i++) {
38724
- this.replace(replaceWith);
38743
+ this.replaceMatch(this.searchMatches[i], replaceWith);
38725
38744
  }
38726
38745
  }
38727
38746
  getSearchableString(position) {
@@ -45724,6 +45743,11 @@ css /* scss */ `
45724
45743
  .o-sidePanelButton:enabled {
45725
45744
  cursor: pointer;
45726
45745
  }
45746
+
45747
+ .o-sidePanelButton:disabled {
45748
+ color: ${DISABLED_TEXT_COLOR};
45749
+ }
45750
+
45727
45751
  .o-sidePanelButton:last-child {
45728
45752
  margin-right: 0px;
45729
45753
  }
@@ -50516,6 +50540,6 @@ exports.setTranslationMethod = setTranslationMethod;
50516
50540
  exports.tokenize = tokenize;
50517
50541
 
50518
50542
 
50519
- __info__.version = '16.4.0';
50520
- __info__.date = '2023-07-24T06:26:19.494Z';
50521
- __info__.hash = '4eb614c';
50543
+ __info__.version = '16.4.2';
50544
+ __info__.date = '2023-08-07T12:49:47.066Z';
50545
+ __info__.hash = 'd5697c0';
@@ -1419,7 +1419,9 @@ declare class FindAndReplacePlugin extends UIPlugin {
1419
1419
  private currentSearchRegex;
1420
1420
  private searchOptions;
1421
1421
  private toSearch;
1422
+ private isSearchDirty;
1422
1423
  handle(cmd: Command): void;
1424
+ finalize(): void;
1423
1425
  getSearchMatches(): SearchMatch[];
1424
1426
  getCurrentSelectedMatchIndex(): number | null;
1425
1427
  /**
@@ -1451,6 +1453,7 @@ declare class FindAndReplacePlugin extends UIPlugin {
1451
1453
  */
1452
1454
  private selectNextCell;
1453
1455
  private clearSearch;
1456
+ private replaceMatch;
1454
1457
  /**
1455
1458
  * Replace the value of the currently selected match
1456
1459
  */
@@ -1678,9 +1681,9 @@ interface PositionDependentCommand {
1678
1681
  row: number;
1679
1682
  }
1680
1683
  declare const invalidateEvaluationCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "UNDO" | "REDO" | "EVALUATE_CELLS">;
1681
- declare const invalidateDependenciesCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "SORT_CELLS" | "SET_DECIMAL" | "REQUEST_UNDO" | "REQUEST_REDO" | "UNDO" | "REDO" | "ENABLE_NEW_SELECTION_INPUT" | "DISABLE_SELECTION_INPUT" | "UNFOCUS_SELECTION_INPUT" | "FOCUS_RANGE" | "ADD_EMPTY_RANGE" | "ADD_RANGE" | "REMOVE_RANGE" | "CHANGE_RANGE" | "COPY" | "CUT" | "PASTE" | "REPEAT_PASTE" | "CLEAN_CLIPBOARD_HIGHLIGHT" | "AUTOFILL_CELL" | "PASTE_FROM_OS_CLIPBOARD" | "ACTIVATE_PAINT_FORMAT" | "CANCEL_PAINT_FORMAT" | "AUTORESIZE_COLUMNS" | "AUTORESIZE_ROWS" | "MOVE_COLUMNS_ROWS" | "ACTIVATE_SHEET" | "PREPARE_SELECTION_INPUT_EXPANSION" | "STOP_SELECTION_INPUT" | "EVALUATE_CELLS" | "CHANGE_HIGHLIGHT" | "START_CHANGE_HIGHLIGHT" | "SET_HIGHLIGHT_COLOR" | "STOP_COMPOSER_RANGE_SELECTION" | "START_EDITION" | "STOP_EDITION" | "SET_CURRENT_CONTENT" | "CHANGE_COMPOSER_CURSOR_SELECTION" | "REPLACE_COMPOSER_CURSOR_SELECTION" | "CYCLE_EDITION_REFERENCES" | "START" | "AUTOFILL" | "AUTOFILL_SELECT" | "SET_FORMULA_VISIBILITY" | "AUTOFILL_AUTO" | "SELECT_FIGURE" | "UPDATE_SEARCH" | "REFRESH_SEARCH" | "CLEAR_SEARCH" | "SELECT_SEARCH_PREVIOUS_MATCH" | "SELECT_SEARCH_NEXT_MATCH" | "REPLACE_SEARCH" | "REPLACE_ALL_SEARCH" | "RESIZE_SHEETVIEW" | "SUM_SELECTION" | "DELETE_CELL" | "INSERT_CELL" | "SET_VIEWPORT_OFFSET" | "SHIFT_VIEWPORT_DOWN" | "SHIFT_VIEWPORT_UP" | "OPEN_CELL_POPOVER" | "CLOSE_CELL_POPOVER" | "ACTIVATE_NEXT_SHEET" | "ACTIVATE_PREVIOUS_SHEET" | "UPDATE_FILTER" | "SPLIT_TEXT_INTO_COLUMNS">;
1684
+ declare const invalidateDependenciesCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "SORT_CELLS" | "SET_DECIMAL" | "REQUEST_UNDO" | "REQUEST_REDO" | "UNDO" | "REDO" | "ENABLE_NEW_SELECTION_INPUT" | "DISABLE_SELECTION_INPUT" | "UNFOCUS_SELECTION_INPUT" | "FOCUS_RANGE" | "ADD_EMPTY_RANGE" | "ADD_RANGE" | "REMOVE_RANGE" | "CHANGE_RANGE" | "COPY" | "CUT" | "PASTE" | "REPEAT_PASTE" | "CLEAN_CLIPBOARD_HIGHLIGHT" | "AUTOFILL_CELL" | "PASTE_FROM_OS_CLIPBOARD" | "ACTIVATE_PAINT_FORMAT" | "CANCEL_PAINT_FORMAT" | "AUTORESIZE_COLUMNS" | "AUTORESIZE_ROWS" | "MOVE_COLUMNS_ROWS" | "ACTIVATE_SHEET" | "PREPARE_SELECTION_INPUT_EXPANSION" | "STOP_SELECTION_INPUT" | "EVALUATE_CELLS" | "CHANGE_HIGHLIGHT" | "START_CHANGE_HIGHLIGHT" | "SET_HIGHLIGHT_COLOR" | "STOP_COMPOSER_RANGE_SELECTION" | "START_EDITION" | "STOP_EDITION" | "SET_CURRENT_CONTENT" | "CHANGE_COMPOSER_CURSOR_SELECTION" | "REPLACE_COMPOSER_CURSOR_SELECTION" | "CYCLE_EDITION_REFERENCES" | "START" | "AUTOFILL" | "AUTOFILL_SELECT" | "SET_FORMULA_VISIBILITY" | "AUTOFILL_AUTO" | "SELECT_FIGURE" | "UPDATE_SEARCH" | "CLEAR_SEARCH" | "SELECT_SEARCH_PREVIOUS_MATCH" | "SELECT_SEARCH_NEXT_MATCH" | "REPLACE_SEARCH" | "REPLACE_ALL_SEARCH" | "RESIZE_SHEETVIEW" | "SUM_SELECTION" | "DELETE_CELL" | "INSERT_CELL" | "SET_VIEWPORT_OFFSET" | "SHIFT_VIEWPORT_DOWN" | "SHIFT_VIEWPORT_UP" | "OPEN_CELL_POPOVER" | "CLOSE_CELL_POPOVER" | "ACTIVATE_NEXT_SHEET" | "ACTIVATE_PREVIOUS_SHEET" | "UPDATE_FILTER" | "SPLIT_TEXT_INTO_COLUMNS">;
1682
1685
  declare const invalidateCFEvaluationCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "UNDO" | "REDO" | "EVALUATE_CELLS">;
1683
- declare const readonlyAllowedCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "SORT_CELLS" | "SET_DECIMAL" | "REQUEST_UNDO" | "REQUEST_REDO" | "UNDO" | "REDO" | "ENABLE_NEW_SELECTION_INPUT" | "DISABLE_SELECTION_INPUT" | "UNFOCUS_SELECTION_INPUT" | "FOCUS_RANGE" | "ADD_EMPTY_RANGE" | "ADD_RANGE" | "REMOVE_RANGE" | "CHANGE_RANGE" | "COPY" | "CUT" | "PASTE" | "REPEAT_PASTE" | "CLEAN_CLIPBOARD_HIGHLIGHT" | "AUTOFILL_CELL" | "PASTE_FROM_OS_CLIPBOARD" | "ACTIVATE_PAINT_FORMAT" | "CANCEL_PAINT_FORMAT" | "AUTORESIZE_COLUMNS" | "AUTORESIZE_ROWS" | "MOVE_COLUMNS_ROWS" | "ACTIVATE_SHEET" | "PREPARE_SELECTION_INPUT_EXPANSION" | "STOP_SELECTION_INPUT" | "EVALUATE_CELLS" | "CHANGE_HIGHLIGHT" | "START_CHANGE_HIGHLIGHT" | "SET_HIGHLIGHT_COLOR" | "STOP_COMPOSER_RANGE_SELECTION" | "START_EDITION" | "STOP_EDITION" | "SET_CURRENT_CONTENT" | "CHANGE_COMPOSER_CURSOR_SELECTION" | "REPLACE_COMPOSER_CURSOR_SELECTION" | "CYCLE_EDITION_REFERENCES" | "START" | "AUTOFILL" | "AUTOFILL_SELECT" | "SET_FORMULA_VISIBILITY" | "AUTOFILL_AUTO" | "SELECT_FIGURE" | "UPDATE_SEARCH" | "REFRESH_SEARCH" | "CLEAR_SEARCH" | "SELECT_SEARCH_PREVIOUS_MATCH" | "SELECT_SEARCH_NEXT_MATCH" | "REPLACE_SEARCH" | "REPLACE_ALL_SEARCH" | "RESIZE_SHEETVIEW" | "SUM_SELECTION" | "DELETE_CELL" | "INSERT_CELL" | "SET_VIEWPORT_OFFSET" | "SHIFT_VIEWPORT_DOWN" | "SHIFT_VIEWPORT_UP" | "OPEN_CELL_POPOVER" | "CLOSE_CELL_POPOVER" | "ACTIVATE_NEXT_SHEET" | "ACTIVATE_PREVIOUS_SHEET" | "UPDATE_FILTER" | "SPLIT_TEXT_INTO_COLUMNS">;
1686
+ declare const readonlyAllowedCommands: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE" | "SORT_CELLS" | "SET_DECIMAL" | "REQUEST_UNDO" | "REQUEST_REDO" | "UNDO" | "REDO" | "ENABLE_NEW_SELECTION_INPUT" | "DISABLE_SELECTION_INPUT" | "UNFOCUS_SELECTION_INPUT" | "FOCUS_RANGE" | "ADD_EMPTY_RANGE" | "ADD_RANGE" | "REMOVE_RANGE" | "CHANGE_RANGE" | "COPY" | "CUT" | "PASTE" | "REPEAT_PASTE" | "CLEAN_CLIPBOARD_HIGHLIGHT" | "AUTOFILL_CELL" | "PASTE_FROM_OS_CLIPBOARD" | "ACTIVATE_PAINT_FORMAT" | "CANCEL_PAINT_FORMAT" | "AUTORESIZE_COLUMNS" | "AUTORESIZE_ROWS" | "MOVE_COLUMNS_ROWS" | "ACTIVATE_SHEET" | "PREPARE_SELECTION_INPUT_EXPANSION" | "STOP_SELECTION_INPUT" | "EVALUATE_CELLS" | "CHANGE_HIGHLIGHT" | "START_CHANGE_HIGHLIGHT" | "SET_HIGHLIGHT_COLOR" | "STOP_COMPOSER_RANGE_SELECTION" | "START_EDITION" | "STOP_EDITION" | "SET_CURRENT_CONTENT" | "CHANGE_COMPOSER_CURSOR_SELECTION" | "REPLACE_COMPOSER_CURSOR_SELECTION" | "CYCLE_EDITION_REFERENCES" | "START" | "AUTOFILL" | "AUTOFILL_SELECT" | "SET_FORMULA_VISIBILITY" | "AUTOFILL_AUTO" | "SELECT_FIGURE" | "UPDATE_SEARCH" | "CLEAR_SEARCH" | "SELECT_SEARCH_PREVIOUS_MATCH" | "SELECT_SEARCH_NEXT_MATCH" | "REPLACE_SEARCH" | "REPLACE_ALL_SEARCH" | "RESIZE_SHEETVIEW" | "SUM_SELECTION" | "DELETE_CELL" | "INSERT_CELL" | "SET_VIEWPORT_OFFSET" | "SHIFT_VIEWPORT_DOWN" | "SHIFT_VIEWPORT_UP" | "OPEN_CELL_POPOVER" | "CLOSE_CELL_POPOVER" | "ACTIVATE_NEXT_SHEET" | "ACTIVATE_PREVIOUS_SHEET" | "UPDATE_FILTER" | "SPLIT_TEXT_INTO_COLUMNS">;
1684
1687
  declare const coreTypes: Set<"UPDATE_CELL" | "UPDATE_CELL_POSITION" | "CLEAR_CELL" | "DELETE_CONTENT" | "ADD_COLUMNS_ROWS" | "REMOVE_COLUMNS_ROWS" | "RESIZE_COLUMNS_ROWS" | "HIDE_COLUMNS_ROWS" | "UNHIDE_COLUMNS_ROWS" | "SET_GRID_LINES_VISIBILITY" | "FREEZE_COLUMNS" | "FREEZE_ROWS" | "UNFREEZE_COLUMNS_ROWS" | "UNFREEZE_COLUMNS" | "UNFREEZE_ROWS" | "ADD_MERGE" | "REMOVE_MERGE" | "CREATE_SHEET" | "DELETE_SHEET" | "DUPLICATE_SHEET" | "MOVE_SHEET" | "RENAME_SHEET" | "HIDE_SHEET" | "SHOW_SHEET" | "MOVE_RANGES" | "ADD_CONDITIONAL_FORMAT" | "REMOVE_CONDITIONAL_FORMAT" | "MOVE_CONDITIONAL_FORMAT" | "CREATE_FIGURE" | "DELETE_FIGURE" | "UPDATE_FIGURE" | "SET_FORMATTING" | "CLEAR_FORMATTING" | "SET_ZONE_BORDERS" | "SET_BORDER" | "CREATE_CHART" | "UPDATE_CHART" | "CREATE_IMAGE" | "CREATE_FILTER_TABLE" | "REMOVE_FILTER_TABLE" | "UPDATE_LOCALE">;
1685
1688
  interface UpdateCellCommand extends PositionDependentCommand {
1686
1689
  type: "UPDATE_CELL";
@@ -2150,9 +2153,6 @@ interface UpdateSearchCommand {
2150
2153
  interface ClearSearchCommand {
2151
2154
  type: "CLEAR_SEARCH";
2152
2155
  }
2153
- interface RefreshSearchCommand {
2154
- type: "REFRESH_SEARCH";
2155
- }
2156
2156
  interface SelectSearchPreviousCommand {
2157
2157
  type: "SELECT_SEARCH_PREVIOUS_MATCH";
2158
2158
  }
@@ -2262,7 +2262,7 @@ UpdateCellCommand | UpdateCellPositionCommand | ClearCellCommand | DeleteContent
2262
2262
  | CreateImageOverCommand
2263
2263
  /** FILTERS */
2264
2264
  | CreateFilterTableCommand | RemoveFilterTableCommand | UpdateLocaleCommand;
2265
- type LocalCommand = RequestUndoCommand | RequestRedoCommand | UndoCommand | RedoCommand | NewInputCommand | RemoveInputCommand | UnfocusInputCommand | FocusInputCommand | AddEmptyRangeCommand | AddRangeCommand | RemoveRangeCommand | ChangeRangeCommand | CopyCommand | CutCommand | PasteCommand | RepeatPasteCommand | CleanClipBoardHighlightCommand | AutoFillCellCommand | PasteFromOSClipboardCommand | ActivatePaintFormatCommand | CancelPaintFormatCommand | AutoresizeColumnsCommand | AutoresizeRowsCommand | MoveColumnsRowsCommand | ActivateSheetCommand | PrepareExpansionCommand | StopSelectionCommand | EvaluateCellsCommand | ChangeHighlightCommand | StartChangeHighlightCommand | SetColorCommand | StopComposerSelectionCommand | StartEditionCommand | StopEditionCommand | SetCurrentContentCommand | ChangeComposerSelectionCommand | ReplaceComposerSelectionCommand | CycleEditionReferencesCommand | StartCommand | AutofillCommand | AutofillSelectCommand | ShowFormulaCommand | AutofillAutoCommand | SelectFigureCommand | UpdateSearchCommand | RefreshSearchCommand | ClearSearchCommand | SelectSearchPreviousCommand | SelectSearchNextCommand | ReplaceSearchCommand | ReplaceAllSearchCommand | SortCommand | SetDecimalCommand | ResizeViewportCommand | SumSelectionCommand | DeleteCellCommand | InsertCellCommand | SetViewportOffsetCommand | MoveViewportDownCommand | MoveViewportUpCommand | OpenCellPopoverCommand | CloseCellPopoverCommand | ActivateNextSheetCommand | ActivatePreviousSheetCommand | UpdateFilterCommand | SplitTextIntoColumnsCommand;
2265
+ type LocalCommand = RequestUndoCommand | RequestRedoCommand | UndoCommand | RedoCommand | NewInputCommand | RemoveInputCommand | UnfocusInputCommand | FocusInputCommand | AddEmptyRangeCommand | AddRangeCommand | RemoveRangeCommand | ChangeRangeCommand | CopyCommand | CutCommand | PasteCommand | RepeatPasteCommand | CleanClipBoardHighlightCommand | AutoFillCellCommand | PasteFromOSClipboardCommand | ActivatePaintFormatCommand | CancelPaintFormatCommand | AutoresizeColumnsCommand | AutoresizeRowsCommand | MoveColumnsRowsCommand | ActivateSheetCommand | PrepareExpansionCommand | StopSelectionCommand | EvaluateCellsCommand | ChangeHighlightCommand | StartChangeHighlightCommand | SetColorCommand | StopComposerSelectionCommand | StartEditionCommand | StopEditionCommand | SetCurrentContentCommand | ChangeComposerSelectionCommand | ReplaceComposerSelectionCommand | CycleEditionReferencesCommand | StartCommand | AutofillCommand | AutofillSelectCommand | ShowFormulaCommand | AutofillAutoCommand | SelectFigureCommand | UpdateSearchCommand | ClearSearchCommand | SelectSearchPreviousCommand | SelectSearchNextCommand | ReplaceSearchCommand | ReplaceAllSearchCommand | SortCommand | SetDecimalCommand | ResizeViewportCommand | SumSelectionCommand | DeleteCellCommand | InsertCellCommand | SetViewportOffsetCommand | MoveViewportDownCommand | MoveViewportUpCommand | OpenCellPopoverCommand | CloseCellPopoverCommand | ActivateNextSheetCommand | ActivatePreviousSheetCommand | UpdateFilterCommand | SplitTextIntoColumnsCommand;
2266
2266
  type Command = CoreCommand | LocalCommand;
2267
2267
  /**
2268
2268
  * Holds the result of a command dispatch.
@@ -108,8 +108,8 @@ const SELECTION_BORDER_COLOR = "#3266ca";
108
108
  const HEADER_BORDER_COLOR = "#C0C0C0";
109
109
  const CELL_BORDER_COLOR = "#E2E3E3";
110
110
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
111
- const MENU_ITEM_DISABLED_COLOR = "#CACACA";
112
111
  const BG_HOVER_COLOR = "#EBEBEB";
112
+ const DISABLED_TEXT_COLOR = "#CACACA";
113
113
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
114
114
  const LINK_COLOR = "#01666b";
115
115
  const FILTERS_COLOR = "#188038";
@@ -4051,7 +4051,6 @@ const readonlyAllowedCommands = new Set([
4051
4051
  "SET_VIEWPORT_OFFSET",
4052
4052
  "SELECT_SEARCH_NEXT_MATCH",
4053
4053
  "SELECT_SEARCH_PREVIOUS_MATCH",
4054
- "REFRESH_SEARCH",
4055
4054
  "UPDATE_SEARCH",
4056
4055
  "CLEAR_SEARCH",
4057
4056
  "EVALUATE_CELLS",
@@ -5990,7 +5989,7 @@ css /* scss */ `
5990
5989
  }
5991
5990
  }
5992
5991
  &.disabled {
5993
- color: ${MENU_ITEM_DISABLED_COLOR};
5992
+ color: ${DISABLED_TEXT_COLOR};
5994
5993
  cursor: not-allowed;
5995
5994
  }
5996
5995
  }
@@ -22690,6 +22689,7 @@ class FindAndReplacePanel extends Component {
22690
22689
  state = useState(this.initialState());
22691
22690
  debounceTimeoutId;
22692
22691
  showFormulaState = false;
22692
+ debouncedUpdateSearch;
22693
22693
  findAndReplaceRef = useRef("findAndReplace");
22694
22694
  get hasSearchResult() {
22695
22695
  return this.env.model.getters.getCurrentSelectedMatchIndex() !== null;
@@ -22699,11 +22699,16 @@ class FindAndReplacePanel extends Component {
22699
22699
  }
22700
22700
  setup() {
22701
22701
  this.showFormulaState = this.env.model.getters.shouldShowFormulas();
22702
+ this.debouncedUpdateSearch = debounce(this.updateSearch.bind(this), 200);
22702
22703
  onMounted(() => this.focusInput());
22703
22704
  onWillUnmount(() => {
22704
22705
  this.env.model.dispatch("CLEAR_SEARCH");
22705
22706
  this.env.model.dispatch("SET_FORMULA_VISIBILITY", { show: this.showFormulaState });
22706
22707
  });
22708
+ useEffect(() => {
22709
+ this.state.searchOptions.searchFormulas = this.env.model.getters.shouldShowFormulas();
22710
+ this.searchFormulas();
22711
+ }, () => [this.env.model.getters.shouldShowFormulas()]);
22707
22712
  }
22708
22713
  onInput(ev) {
22709
22714
  this.state.toSearch = ev.target.value;
@@ -22723,10 +22728,6 @@ class FindAndReplacePanel extends Component {
22723
22728
  this.replace();
22724
22729
  }
22725
22730
  }
22726
- onFocusSidePanel() {
22727
- this.state.searchOptions.searchFormulas = this.env.model.getters.shouldShowFormulas();
22728
- this.env.model.dispatch("REFRESH_SEARCH");
22729
- }
22730
22731
  searchFormulas() {
22731
22732
  this.env.model.dispatch("SET_FORMULA_VISIBILITY", {
22732
22733
  show: this.state.searchOptions.searchFormulas,
@@ -22745,13 +22746,6 @@ class FindAndReplacePanel extends Component {
22745
22746
  searchOptions: this.state.searchOptions,
22746
22747
  });
22747
22748
  }
22748
- debouncedUpdateSearch() {
22749
- clearTimeout(this.debounceTimeoutId);
22750
- this.debounceTimeoutId = setTimeout(() => {
22751
- this.updateSearch();
22752
- this.debounceTimeoutId = undefined;
22753
- }, 400);
22754
- }
22755
22749
  replace() {
22756
22750
  this.env.model.dispatch("REPLACE_SEARCH", {
22757
22751
  replaceWith: this.state.replaceWith,
@@ -24691,6 +24685,15 @@ function dragFigureForResize(initialFigure, dirX, dirY, { x: mouseX, y: mouseY }
24691
24685
  y = initialFigure.y - deltaY;
24692
24686
  }
24693
24687
  }
24688
+ // Restrict resizing if x or y reaches header boundaries
24689
+ if (x < 0) {
24690
+ width += x;
24691
+ x = 0;
24692
+ }
24693
+ if (y < 0) {
24694
+ height += y;
24695
+ y = 0;
24696
+ }
24694
24697
  return { ...initialFigure, x, y, width, height };
24695
24698
  }
24696
24699
 
@@ -38530,6 +38533,7 @@ class FindAndReplacePlugin extends UIPlugin {
38530
38533
  searchFormulas: false,
38531
38534
  };
38532
38535
  toSearch = "";
38536
+ isSearchDirty = false;
38533
38537
  // ---------------------------------------------------------------------------
38534
38538
  // Command Handling
38535
38539
  // ---------------------------------------------------------------------------
@@ -38553,18 +38557,33 @@ class FindAndReplacePlugin extends UIPlugin {
38553
38557
  case "REPLACE_ALL_SEARCH":
38554
38558
  this.replaceAll(cmd.replaceWith);
38555
38559
  break;
38560
+ case "EVALUATE_CELLS":
38561
+ case "UPDATE_CELL":
38562
+ case "REMOVE_FILTER_TABLE":
38563
+ case "UPDATE_FILTER":
38564
+ this.isSearchDirty = true;
38565
+ break;
38556
38566
  case "UNDO":
38557
38567
  case "REDO":
38558
38568
  case "REMOVE_COLUMNS_ROWS":
38569
+ case "HIDE_COLUMNS_ROWS":
38570
+ case "UNHIDE_COLUMNS_ROWS":
38559
38571
  case "ADD_COLUMNS_ROWS":
38560
- this.clearSearch();
38572
+ case "EVALUATE_CELLS":
38573
+ case "UPDATE_CELL":
38574
+ this.isSearchDirty = true;
38561
38575
  break;
38562
38576
  case "ACTIVATE_SHEET":
38563
- case "REFRESH_SEARCH":
38564
38577
  this.refreshSearch();
38565
38578
  break;
38566
38579
  }
38567
38580
  }
38581
+ finalize() {
38582
+ if (this.isSearchDirty) {
38583
+ this.refreshSearch();
38584
+ this.isSearchDirty = false;
38585
+ }
38586
+ }
38568
38587
  // ---------------------------------------------------------------------------
38569
38588
  // Getters
38570
38589
  // ---------------------------------------------------------------------------
@@ -38620,6 +38639,11 @@ class FindAndReplacePlugin extends UIPlugin {
38620
38639
  if (this.toSearch) {
38621
38640
  for (const cell of Object.values(cells)) {
38622
38641
  const { col, row } = this.getters.getCellPosition(cell.id);
38642
+ const isColHidden = this.getters.isColHidden(sheetId, col);
38643
+ const isRowHidden = this.getters.isRowHidden(sheetId, row);
38644
+ if (isColHidden || isRowHidden) {
38645
+ continue;
38646
+ }
38623
38647
  if (cell &&
38624
38648
  this.currentSearchRegex &&
38625
38649
  this.currentSearchRegex.test(this.getSearchableString({ sheetId, col, row }))) {
@@ -38679,37 +38703,32 @@ class FindAndReplacePlugin extends UIPlugin {
38679
38703
  // ---------------------------------------------------------------------------
38680
38704
  // Replace
38681
38705
  // ---------------------------------------------------------------------------
38682
- /**
38683
- * Replace the value of the currently selected match
38684
- */
38685
- replace(replaceWith) {
38686
- if (this.selectedMatchIndex === null || !this.currentSearchRegex) {
38706
+ replaceMatch(selectedMatch, replaceWith) {
38707
+ if (!this.currentSearchRegex) {
38687
38708
  return;
38688
38709
  }
38689
- const matches = this.searchMatches;
38690
- const selectedMatch = matches[this.selectedMatchIndex];
38691
38710
  const sheetId = this.getters.getActiveSheetId();
38692
38711
  const cell = this.getters.getCell({ sheetId, ...selectedMatch });
38712
+ const { col, row } = selectedMatch;
38693
38713
  if (cell?.isFormula && !this.searchOptions.searchFormulas) {
38694
- this.selectNextCell(Direction.next);
38714
+ return;
38695
38715
  }
38696
- else {
38697
- const replaceRegex = new RegExp(this.currentSearchRegex.source, this.currentSearchRegex.flags + "g");
38698
- const toReplace = this.getSearchableString({
38699
- sheetId,
38700
- col: selectedMatch.col,
38701
- row: selectedMatch.row,
38702
- });
38703
- const newContent = toReplace.replace(replaceRegex, replaceWith);
38704
- this.dispatch("UPDATE_CELL", {
38705
- sheetId: this.getters.getActiveSheetId(),
38706
- col: selectedMatch.col,
38707
- row: selectedMatch.row,
38708
- content: canonicalizeContent(newContent, this.getters.getLocale()),
38709
- });
38710
- this.searchMatches.splice(this.selectedMatchIndex, 1);
38711
- this.selectNextCell(Direction.current);
38716
+ const replaceRegex = new RegExp(this.currentSearchRegex.source, this.currentSearchRegex.flags + "g");
38717
+ const toReplace = this.getSearchableString({ sheetId, col, row });
38718
+ const content = toReplace.replace(replaceRegex, replaceWith);
38719
+ const canonicalContent = canonicalizeContent(content, this.getters.getLocale());
38720
+ this.dispatch("UPDATE_CELL", { sheetId, col, row, content: canonicalContent });
38721
+ }
38722
+ /**
38723
+ * Replace the value of the currently selected match
38724
+ */
38725
+ replace(replaceWith) {
38726
+ if (this.selectedMatchIndex === null) {
38727
+ return;
38712
38728
  }
38729
+ const selectedMatch = this.searchMatches[this.selectedMatchIndex];
38730
+ this.replaceMatch(selectedMatch, replaceWith);
38731
+ this.selectNextCell(Direction.next);
38713
38732
  }
38714
38733
  /**
38715
38734
  * Apply the replace function to all the matches one time.
@@ -38717,7 +38736,7 @@ class FindAndReplacePlugin extends UIPlugin {
38717
38736
  replaceAll(replaceWith) {
38718
38737
  const matchCount = this.searchMatches.length;
38719
38738
  for (let i = 0; i < matchCount; i++) {
38720
- this.replace(replaceWith);
38739
+ this.replaceMatch(this.searchMatches[i], replaceWith);
38721
38740
  }
38722
38741
  }
38723
38742
  getSearchableString(position) {
@@ -45720,6 +45739,11 @@ css /* scss */ `
45720
45739
  .o-sidePanelButton:enabled {
45721
45740
  cursor: pointer;
45722
45741
  }
45742
+
45743
+ .o-sidePanelButton:disabled {
45744
+ color: ${DISABLED_TEXT_COLOR};
45745
+ }
45746
+
45723
45747
  .o-sidePanelButton:last-child {
45724
45748
  margin-right: 0px;
45725
45749
  }
@@ -50480,6 +50504,6 @@ const constants = {
50480
50504
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
50481
50505
 
50482
50506
 
50483
- __info__.version = '16.4.0';
50484
- __info__.date = '2023-07-24T06:26:19.494Z';
50485
- __info__.hash = '4eb614c';
50507
+ __info__.version = '16.4.2';
50508
+ __info__.date = '2023-08-07T12:49:47.066Z';
50509
+ __info__.hash = 'd5697c0';