@odoo/o-spreadsheet 18.4.17 → 18.4.19

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.
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 18.4.17
6
- * @date 2025-11-12T14:15:30.592Z
7
- * @hash a8ebab8
5
+ * @version 18.4.19
6
+ * @date 2025-12-02T05:34:03.902Z
7
+ * @hash 95b1252
8
8
  */
9
9
 
10
10
  'use strict';
@@ -2615,7 +2615,6 @@ const invalidateEvaluationCommands = new Set([
2615
2615
  "REDO",
2616
2616
  "ADD_MERGE",
2617
2617
  "REMOVE_MERGE",
2618
- "DUPLICATE_SHEET",
2619
2618
  "UPDATE_LOCALE",
2620
2619
  "ADD_PIVOT",
2621
2620
  "UPDATE_PIVOT",
@@ -18543,7 +18542,7 @@ function getTokenNextReferenceType(xc) {
18543
18542
  function setXcToFixedReferenceType(xc, referenceType) {
18544
18543
  let sheetName;
18545
18544
  ({ sheetName, xc } = splitReference(xc));
18546
- sheetName = sheetName ? sheetName + "!" : "";
18545
+ sheetName = sheetName ? getCanonicalSymbolName(sheetName) + "!" : "";
18547
18546
  xc = xc.replace(/\$/g, "");
18548
18547
  const splitIndex = xc.indexOf(":");
18549
18548
  if (splitIndex >= 0) {
@@ -22584,6 +22583,9 @@ function getTreeMapGroupColors(definition, tree) {
22584
22583
  }));
22585
22584
  }
22586
22585
  function getTreeMapColorScale(tree, coloringOption) {
22586
+ if (tree.length === 0) {
22587
+ return undefined;
22588
+ }
22587
22589
  const treeNodesByLevel = pyramidizeTree(tree);
22588
22590
  const nodes = treeNodesByLevel[treeNodesByLevel.length - 1];
22589
22591
  const minValue = Math.min(...nodes.map((node) => node.value));
@@ -24253,11 +24255,18 @@ function chartToImageUrl(runtime, figure, type) {
24253
24255
  // we have to add the canvas to the DOM otherwise it won't be rendered
24254
24256
  document.body.append(div);
24255
24257
  if ("chartJsConfig" in runtime) {
24258
+ const extensionsLoaded = areChartJSExtensionsLoaded();
24259
+ if (!extensionsLoaded) {
24260
+ registerChartJSExtensions();
24261
+ }
24256
24262
  const config = deepCopy(runtime.chartJsConfig);
24257
24263
  config.plugins = [backgroundColorChartJSPlugin];
24258
24264
  const chart = new window.Chart(canvas, config);
24259
24265
  imageContent = chart.toBase64Image();
24260
24266
  chart.destroy();
24267
+ if (!extensionsLoaded) {
24268
+ unregisterChartJsExtensions();
24269
+ }
24261
24270
  }
24262
24271
  else if (type === "scorecard") {
24263
24272
  const design = getScorecardConfiguration(figure, runtime);
@@ -24287,11 +24296,18 @@ async function chartToImageFile(runtime, figure, type) {
24287
24296
  document.body.append(div);
24288
24297
  let chartBlob = null;
24289
24298
  if ("chartJsConfig" in runtime) {
24299
+ const extensionsLoaded = areChartJSExtensionsLoaded();
24300
+ if (!extensionsLoaded) {
24301
+ registerChartJSExtensions();
24302
+ }
24290
24303
  const config = deepCopy(runtime.chartJsConfig);
24291
24304
  config.plugins = [backgroundColorChartJSPlugin];
24292
24305
  const chart = new window.Chart(canvas, config);
24293
24306
  chartBlob = await new Promise((resolve) => canvas.toBlob(resolve, "image/png"));
24294
24307
  chart.destroy();
24308
+ if (!extensionsLoaded) {
24309
+ unregisterChartJsExtensions();
24310
+ }
24295
24311
  }
24296
24312
  else if (type === "scorecard") {
24297
24313
  const design = getScorecardConfiguration(figure, runtime);
@@ -32644,6 +32660,7 @@ class AbstractComposerStore extends SpreadsheetStore {
32644
32660
  }
32645
32661
  this.selectionStart = start;
32646
32662
  this.selectionEnd = end;
32663
+ this.stopComposerRangeSelection();
32647
32664
  this.computeFormulaCursorContext();
32648
32665
  this.computeParenthesisRelatedToCursor();
32649
32666
  this.updateAutoCompleteProvider();
@@ -33319,10 +33336,13 @@ class AbstractComposerStore extends SpreadsheetStore {
33319
33336
  hideHelp() {
33320
33337
  this.autoComplete.hide();
33321
33338
  }
33322
- autoCompleteOrStop(direction) {
33339
+ autoCompleteOrStop(direction, assistantForcedClosed = false) {
33323
33340
  if (this.editionMode !== "inactive") {
33324
33341
  const autoComplete = this.autoComplete;
33325
- if (autoComplete.provider && autoComplete.selectedIndex !== undefined) {
33342
+ const suppressAutocomplete = assistantForcedClosed && this.canBeToggled;
33343
+ if (!suppressAutocomplete &&
33344
+ autoComplete.provider &&
33345
+ autoComplete.selectedIndex !== undefined) {
33326
33346
  const autoCompleteValue = autoComplete.provider.proposals[autoComplete.selectedIndex]?.text;
33327
33347
  if (autoCompleteValue) {
33328
33348
  this.autoComplete.provider?.selectProposal(autoCompleteValue);
@@ -33545,7 +33565,8 @@ class Composer extends owl.Component {
33545
33565
  assistantStyle["max-height"] = `${availableSpaceAbove - CLOSE_ICON_RADIUS}px`;
33546
33566
  // render top
33547
33567
  // We compensate 2 px of margin on the assistant style + 1px for design reasons
33548
- assistantStyle.transform = `translate(0, calc(-100% - ${cellHeight + 3}px))`;
33568
+ assistantStyle.top = `-3px`;
33569
+ assistantStyle.transform = `translate(0, -100%)`;
33549
33570
  }
33550
33571
  if (cellX + ASSISTANT_WIDTH > this.props.delimitation.width) {
33551
33572
  // render left
@@ -33665,16 +33686,12 @@ class Composer extends owl.Component {
33665
33686
  processTabKey(ev, direction) {
33666
33687
  ev.preventDefault();
33667
33688
  ev.stopPropagation();
33668
- if (!this.assistant.forcedClosed) {
33669
- this.props.composerStore.autoCompleteOrStop(direction);
33670
- }
33689
+ this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
33671
33690
  }
33672
33691
  processEnterKey(ev, direction) {
33673
33692
  ev.preventDefault();
33674
33693
  ev.stopPropagation();
33675
- if (!this.assistant.forcedClosed) {
33676
- this.props.composerStore.autoCompleteOrStop(direction);
33677
- }
33694
+ this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
33678
33695
  }
33679
33696
  processNewLineEvent(ev) {
33680
33697
  ev.preventDefault();
@@ -33850,7 +33867,6 @@ class Composer extends owl.Component {
33850
33867
  return;
33851
33868
  }
33852
33869
  const newSelection = this.contentHelper.getCurrentSelection();
33853
- this.props.composerStore.stopComposerRangeSelection();
33854
33870
  this.props.onComposerContentFocused();
33855
33871
  this.props.composerStore.changeComposerCursorSelection(newSelection.start, newSelection.end);
33856
33872
  this.processTokenAtCursor();
@@ -47371,10 +47387,11 @@ class AbstractResizer extends owl.Component {
47371
47387
  this.state.waitingForMove = false;
47372
47388
  }
47373
47389
  onMouseMove(ev) {
47374
- if (this.env.isMobile()) {
47375
- return;
47376
- }
47377
- if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
47390
+ if (this.env.isMobile() ||
47391
+ this.env.model.getters.isReadonly() ||
47392
+ this.state.isResizing ||
47393
+ this.state.isMoving ||
47394
+ this.state.isSelecting) {
47378
47395
  return;
47379
47396
  }
47380
47397
  this._computeHandleDisplay(ev);
@@ -47441,6 +47458,10 @@ class AbstractResizer extends owl.Component {
47441
47458
  if (index < 0) {
47442
47459
  return;
47443
47460
  }
47461
+ if (this.env.model.getters.isReadonly()) {
47462
+ this._selectElement(index, false);
47463
+ return;
47464
+ }
47444
47465
  if (this.state.waitingForMove) {
47445
47466
  if (!this.env.model.getters.isGridSelectionActive()) {
47446
47467
  this._selectElement(index, false);
@@ -48801,7 +48822,7 @@ const friction = 0.95;
48801
48822
  const verticalScrollFactor = 1;
48802
48823
  const horizontalScrollFactor = 1;
48803
48824
  const resetTimeoutDuration = 100;
48804
- function useTouchScroll(ref, updateScroll, canMoveUp) {
48825
+ function useTouchScroll(ref, updateScroll, canMoveUp, canMoveDown) {
48805
48826
  let lastX = 0;
48806
48827
  let lastY = 0;
48807
48828
  let velocityX = 0;
@@ -48838,7 +48859,7 @@ function useTouchScroll(ref, updateScroll, canMoveUp) {
48838
48859
  lastX = clientX;
48839
48860
  lastY = clientY;
48840
48861
  lastTime = currentTime;
48841
- if (canMoveUp()) {
48862
+ if ((deltaY < 0 && canMoveUp()) || (deltaY > 0 && canMoveDown())) {
48842
48863
  if (event.cancelable) {
48843
48864
  event.preventDefault();
48844
48865
  }
@@ -54738,7 +54759,6 @@ function insertTokenAfterArgSeparator(tokenAtCursor, value) {
54738
54759
  // replace the whole token
54739
54760
  start = tokenAtCursor.start;
54740
54761
  }
54741
- this.composer.stopComposerRangeSelection();
54742
54762
  this.composer.changeComposerCursorSelection(start, end);
54743
54763
  this.composer.replaceComposerCursorSelection(value);
54744
54764
  }
@@ -54756,7 +54776,6 @@ function insertTokenAfterLeftParenthesis(tokenAtCursor, value) {
54756
54776
  // replace the whole token
54757
54777
  start = tokenAtCursor.start;
54758
54778
  }
54759
- this.composer.stopComposerRangeSelection();
54760
54779
  this.composer.changeComposerCursorSelection(start, end);
54761
54780
  this.composer.replaceComposerCursorSelection(value);
54762
54781
  }
@@ -56039,7 +56058,6 @@ const dateGranularities = [
56039
56058
  pivotRegistry.add("SPREADSHEET", {
56040
56059
  ui: SpreadsheetPivot,
56041
56060
  definition: SpreadsheetPivotRuntimeDefinition,
56042
- externalData: false,
56043
56061
  dateGranularities: [...dateGranularities],
56044
56062
  datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
56045
56063
  isMeasureCandidate: (field) => field.type !== "boolean",
@@ -57455,6 +57473,7 @@ class SidePanelStore extends SpreadsheetStore {
57455
57473
  getPanelProps(panelInfo) {
57456
57474
  const state = this.computeState(panelInfo);
57457
57475
  if (state.isOpen) {
57476
+ panelInfo.currentPanelProps = state.props ?? panelInfo.currentPanelProps;
57458
57477
  return state.props ?? {};
57459
57478
  }
57460
57479
  return {};
@@ -57466,11 +57485,11 @@ class SidePanelStore extends SpreadsheetStore {
57466
57485
  }
57467
57486
  return undefined;
57468
57487
  }
57469
- open(componentTag, initialPanelProps = {}) {
57488
+ open(componentTag, currentPanelProps = {}) {
57470
57489
  if (this.screenWidthStore.isSmall) {
57471
57490
  return;
57472
57491
  }
57473
- const newPanelInfo = { initialPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57492
+ const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57474
57493
  const state = this.computeState(newPanelInfo);
57475
57494
  if (!state.isOpen) {
57476
57495
  return;
@@ -57494,8 +57513,8 @@ class SidePanelStore extends SpreadsheetStore {
57494
57513
  }
57495
57514
  this._openPanel("secondaryPanel", newPanelInfo, state);
57496
57515
  }
57497
- replace(componentTag, currentPanelKey, initialPanelProps = {}) {
57498
- const newPanelInfo = { initialPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57516
+ replace(componentTag, currentPanelKey, currentPanelProps = {}) {
57517
+ const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57499
57518
  const state = this.computeState(newPanelInfo);
57500
57519
  if (!state.isOpen) {
57501
57520
  return;
@@ -57525,10 +57544,10 @@ class SidePanelStore extends SpreadsheetStore {
57525
57544
  _openPanel(panel, newPanel, state) {
57526
57545
  const currentPanel = this[panel];
57527
57546
  if (currentPanel && newPanel.componentTag !== currentPanel.componentTag) {
57528
- currentPanel.initialPanelProps?.onCloseSidePanel?.();
57547
+ currentPanel.currentPanelProps?.onCloseSidePanel?.();
57529
57548
  }
57530
57549
  this[panel] = {
57531
- initialPanelProps: state.props ?? {},
57550
+ currentPanelProps: state.props ?? {},
57532
57551
  componentTag: newPanel.componentTag,
57533
57552
  size: currentPanel?.size || DEFAULT_SIDE_PANEL_SIZE,
57534
57553
  isCollapsed: currentPanel?.isCollapsed || false,
@@ -57550,16 +57569,16 @@ class SidePanelStore extends SpreadsheetStore {
57550
57569
  close() {
57551
57570
  if (this.mainPanel?.isPinned) {
57552
57571
  if (this.secondaryPanel) {
57553
- this.secondaryPanel.initialPanelProps.onCloseSidePanel?.();
57572
+ this.secondaryPanel.currentPanelProps.onCloseSidePanel?.();
57554
57573
  this.secondaryPanel = undefined;
57555
57574
  }
57556
57575
  return;
57557
57576
  }
57558
- this.mainPanel?.initialPanelProps.onCloseSidePanel?.();
57577
+ this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
57559
57578
  this.mainPanel = undefined;
57560
57579
  }
57561
57580
  closeMainPanel() {
57562
- this.mainPanel?.initialPanelProps.onCloseSidePanel?.();
57581
+ this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
57563
57582
  this.mainPanel = this.secondaryPanel || undefined;
57564
57583
  this.secondaryPanel = undefined;
57565
57584
  }
@@ -57591,7 +57610,7 @@ class SidePanelStore extends SpreadsheetStore {
57591
57610
  }
57592
57611
  this.mainPanel.isPinned = !this.mainPanel.isPinned;
57593
57612
  if (!this.mainPanel.isPinned && this.secondaryPanel) {
57594
- this.secondaryPanel?.initialPanelProps.onCloseSidePanel?.();
57613
+ this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
57595
57614
  this.mainPanel = this.secondaryPanel;
57596
57615
  this.secondaryPanel = undefined;
57597
57616
  }
@@ -57610,7 +57629,7 @@ class SidePanelStore extends SpreadsheetStore {
57610
57629
  panelInfo.size = COLLAPSED_SIDE_PANEL_SIZE;
57611
57630
  }
57612
57631
  }
57613
- computeState({ componentTag, initialPanelProps }) {
57632
+ computeState({ componentTag, currentPanelProps: initialPanelProps, }) {
57614
57633
  const customComputeState = sidePanelRegistry.get(componentTag).computeState;
57615
57634
  const state = customComputeState
57616
57635
  ? customComputeState(this.getters, initialPanelProps)
@@ -57620,7 +57639,7 @@ class SidePanelStore extends SpreadsheetStore {
57620
57639
  changeSpreadsheetWidth(width) {
57621
57640
  this.availableWidth = width - MIN_SHEET_VIEW_WIDTH;
57622
57641
  if (this.secondaryPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
57623
- this.secondaryPanel?.initialPanelProps.onCloseSidePanel?.();
57642
+ this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
57624
57643
  this.secondaryPanel = undefined;
57625
57644
  }
57626
57645
  if (this.mainPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
@@ -57780,6 +57799,10 @@ class Grid extends owl.Component {
57780
57799
  useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
57781
57800
  const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
57782
57801
  return scrollY > 0;
57802
+ }, () => {
57803
+ const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
57804
+ const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
57805
+ return scrollY < maxOffsetY;
57783
57806
  });
57784
57807
  }
57785
57808
  get highlights() {
@@ -64428,10 +64451,17 @@ class PivotCorePlugin extends CorePlugin {
64428
64451
  if (!pivot) {
64429
64452
  continue;
64430
64453
  }
64431
- for (const measure of pivot.definition.measures) {
64454
+ const def = deepCopy(pivot.definition);
64455
+ for (const measure of def.measures) {
64432
64456
  if (measure.computedBy?.formula === formulaString) {
64433
- const measureIndex = pivot.definition.measures.indexOf(measure);
64434
- this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", { formula: newFormulaString, sheetId });
64457
+ const measureIndex = def.measures.indexOf(measure);
64458
+ if (measureIndex !== -1) {
64459
+ def.measures[measureIndex].computedBy = {
64460
+ formula: newFormulaString,
64461
+ sheetId,
64462
+ };
64463
+ }
64464
+ this.dispatch("UPDATE_PIVOT", { pivotId, pivot: def });
64435
64465
  }
64436
64466
  }
64437
64467
  }
@@ -64569,6 +64599,9 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
64569
64599
  const { sheetId, zone } = definition.dataSet;
64570
64600
  const range = this.getters.getRangeFromZone(sheetId, zone);
64571
64601
  const adaptedRange = adaptPivotRange(range, applyChange);
64602
+ if (adaptedRange === range) {
64603
+ return;
64604
+ }
64572
64605
  const dataSet = adaptedRange && {
64573
64606
  sheetId: adaptedRange.sheetId,
64574
64607
  zone: adaptedRange.zone,
@@ -68574,9 +68607,7 @@ class PivotUIPlugin extends CoreViewPlugin {
68574
68607
  handle(cmd) {
68575
68608
  if (invalidateEvaluationCommands.has(cmd.type)) {
68576
68609
  for (const pivotId of this.getters.getPivotIds()) {
68577
- if (!pivotRegistry.get(this.getters.getPivotCoreDefinition(pivotId).type).externalData) {
68578
- this.setupPivot(pivotId, { recreate: true });
68579
- }
68610
+ this.setupPivot(pivotId, { recreate: true });
68580
68611
  }
68581
68612
  }
68582
68613
  switch (cmd.type) {
@@ -68784,7 +68815,7 @@ class PivotUIPlugin extends CoreViewPlugin {
68784
68815
  pivot.init({ reload: true });
68785
68816
  }
68786
68817
  setupPivot(pivotId, { recreate } = { recreate: false }) {
68787
- const definition = this.getters.getPivotCoreDefinition(pivotId);
68818
+ const definition = deepCopy(this.getters.getPivotCoreDefinition(pivotId));
68788
68819
  if (!(pivotId in this.pivots)) {
68789
68820
  const Pivot = withPivotPresentationLayer(pivotRegistry.get(definition.type).ui);
68790
68821
  this.pivots[pivotId] = new Pivot(this.custom, { definition, getters: this.getters });
@@ -75001,6 +75032,7 @@ class SheetViewPlugin extends UIPlugin {
75001
75032
  "getFigureUI",
75002
75033
  "getPositionAnchorOffset",
75003
75034
  "getGridOffset",
75035
+ "getMaximumSheetOffset",
75004
75036
  ];
75005
75037
  viewports = {};
75006
75038
  /**
@@ -78036,16 +78068,18 @@ class ClickableCellsStore extends SpreadsheetStore {
78036
78068
  get clickableCells() {
78037
78069
  const cells = [];
78038
78070
  const getters = this.getters;
78039
- const sheetId = getters.getActiveSheetId();
78040
78071
  for (const position of this.getters.getVisibleCellPositions()) {
78041
78072
  const item = this.getClickableItem(position);
78042
78073
  if (!item) {
78043
78074
  continue;
78044
78075
  }
78045
78076
  const title = typeof item.title === "function" ? item.title(position, getters) : item.title;
78046
- const zone = getters.expandZone(sheetId, positionToZone(position));
78077
+ const rect = this.getClickableCellRect(position);
78078
+ if (!rect) {
78079
+ continue;
78080
+ }
78047
78081
  cells.push({
78048
- coordinates: getters.getVisibleRect(zone),
78082
+ coordinates: rect,
78049
78083
  position,
78050
78084
  action: item.execute,
78051
78085
  title: title || "",
@@ -78053,6 +78087,31 @@ class ClickableCellsStore extends SpreadsheetStore {
78053
78087
  }
78054
78088
  return cells;
78055
78089
  }
78090
+ getClickableCellRect(position) {
78091
+ const zone = this.getters.expandZone(position.sheetId, positionToZone(position));
78092
+ const clickableRect = this.getters.getVisibleRect(zone);
78093
+ const icons = this.getters.getCellIcons(position);
78094
+ const iconsAtPosition = {
78095
+ center: icons.find((icon) => icon.horizontalAlign === "center"),
78096
+ left: icons.find((icon) => icon.horizontalAlign === "left"),
78097
+ right: icons.find((icon) => icon.horizontalAlign === "right"),
78098
+ };
78099
+ if (iconsAtPosition.center?.onClick) {
78100
+ return undefined;
78101
+ }
78102
+ if (iconsAtPosition.right?.onClick) {
78103
+ const cellRect = this.getters.getRect(zone);
78104
+ const iconRect = this.getters.getCellIconRect(iconsAtPosition.right, cellRect);
78105
+ clickableRect.width -= iconRect.width + iconsAtPosition.right.margin;
78106
+ }
78107
+ if (iconsAtPosition.left?.onClick) {
78108
+ const cellRect = this.getters.getRect(zone);
78109
+ const iconRect = this.getters.getCellIconRect(iconsAtPosition.left, cellRect);
78110
+ clickableRect.x += iconRect.width + iconsAtPosition.left.margin;
78111
+ clickableRect.width -= iconRect.width + iconsAtPosition.left.margin;
78112
+ }
78113
+ return clickableRect;
78114
+ }
78056
78115
  }
78057
78116
 
78058
78117
  css /* scss */ `
@@ -78091,6 +78150,10 @@ class SpreadsheetDashboard extends owl.Component {
78091
78150
  useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
78092
78151
  const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
78093
78152
  return scrollY > 0;
78153
+ }, () => {
78154
+ const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
78155
+ const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
78156
+ return scrollY < maxOffsetY;
78094
78157
  });
78095
78158
  }
78096
78159
  get gridContainer() {
@@ -78805,7 +78868,7 @@ class SmallBottomBar extends owl.Component {
78805
78868
  height: this.focus === "inactive" ? "26px" : "fit-content",
78806
78869
  "max-height": `130px`,
78807
78870
  }),
78808
- showAssistant: !isIOS(), // Hide assistant on iOS as it breaks visually
78871
+ showAssistant: false, // Hide assistant in small composer as it gets cropped ATM
78809
78872
  placeholder: this.composerStore.placeholder,
78810
78873
  };
78811
78874
  }
@@ -80134,7 +80197,7 @@ css /* scss */ `
80134
80197
  border-radius: 4px;
80135
80198
  font-weight: 500;
80136
80199
  font-size: 14px;
80137
- height: 32px;
80200
+ min-height: 32px;
80138
80201
  line-height: 16px;
80139
80202
  flex-grow: 1;
80140
80203
  background-color: ${BUTTON_BG};
@@ -84938,6 +85001,6 @@ exports.tokenColors = tokenColors;
84938
85001
  exports.tokenize = tokenize;
84939
85002
 
84940
85003
 
84941
- __info__.version = "18.4.17";
84942
- __info__.date = "2025-11-12T14:15:30.592Z";
84943
- __info__.hash = "a8ebab8";
85004
+ __info__.version = "18.4.19";
85005
+ __info__.date = "2025-12-02T05:34:03.902Z";
85006
+ __info__.hash = "95b1252";
@@ -2500,7 +2500,7 @@ declare class InternalViewport {
2500
2500
  *
2501
2501
  */
2502
2502
  declare class SheetViewPlugin extends UIPlugin {
2503
- static getters: readonly ["getColIndex", "getRowIndex", "getActiveMainViewport", "getSheetViewDimension", "getSheetViewDimensionWithHeaders", "getMainViewportRect", "isVisibleInViewport", "getEdgeScrollCol", "getEdgeScrollRow", "getVisibleFigures", "getVisibleRect", "getVisibleRectWithoutHeaders", "getVisibleCellPositions", "getColRowOffsetInViewport", "getMainViewportCoordinates", "getActiveSheetScrollInfo", "getSheetViewVisibleCols", "getSheetViewVisibleRows", "getFrozenSheetViewRatio", "isPixelPositionVisible", "getColDimensionsInViewport", "getRowDimensionsInViewport", "getAllActiveViewportsZonesAndRect", "getRect", "getFigureUI", "getPositionAnchorOffset", "getGridOffset"];
2503
+ static getters: readonly ["getColIndex", "getRowIndex", "getActiveMainViewport", "getSheetViewDimension", "getSheetViewDimensionWithHeaders", "getMainViewportRect", "isVisibleInViewport", "getEdgeScrollCol", "getEdgeScrollRow", "getVisibleFigures", "getVisibleRect", "getVisibleRectWithoutHeaders", "getVisibleCellPositions", "getColRowOffsetInViewport", "getMainViewportCoordinates", "getActiveSheetScrollInfo", "getSheetViewVisibleCols", "getSheetViewVisibleRows", "getFrozenSheetViewRatio", "isPixelPositionVisible", "getColDimensionsInViewport", "getRowDimensionsInViewport", "getAllActiveViewportsZonesAndRect", "getRect", "getFigureUI", "getPositionAnchorOffset", "getGridOffset", "getMaximumSheetOffset"];
2504
2504
  private viewports;
2505
2505
  /**
2506
2506
  * The viewport dimensions are usually set by one of the components
@@ -2551,7 +2551,10 @@ declare class SheetViewPlugin extends UIPlugin {
2551
2551
  * Return the main viewport maximum size relative to the client size.
2552
2552
  */
2553
2553
  getMainViewportRect(): Rect;
2554
- private getMaximumSheetOffset;
2554
+ getMaximumSheetOffset(): {
2555
+ maxOffsetX: Pixel;
2556
+ maxOffsetY: Pixel;
2557
+ };
2555
2558
  getColRowOffsetInViewport(dimension: Dimension, referenceHeaderIndex: HeaderIndex, targetHeaderIndex: HeaderIndex): Pixel;
2556
2559
  /**
2557
2560
  * Check if a given position is visible in the viewport.
@@ -6763,7 +6766,6 @@ type PivotDefinitionConstructor = new (definition: PivotCoreDefinition, fields:
6763
6766
  interface PivotRegistryItem {
6764
6767
  ui: PivotUIConstructor;
6765
6768
  definition: PivotDefinitionConstructor;
6766
- externalData: boolean;
6767
6769
  dateGranularities: string[];
6768
6770
  datetimeGranularities: string[];
6769
6771
  isMeasureCandidate: (field: PivotField) => boolean;
@@ -8641,7 +8643,7 @@ declare abstract class AbstractComposerStore extends SpreadsheetStore {
8641
8643
  private updateAutoCompleteProvider;
8642
8644
  private findAutocompleteProvider;
8643
8645
  hideHelp(): void;
8644
- autoCompleteOrStop(direction: Direction$1): void;
8646
+ autoCompleteOrStop(direction: Direction$1, assistantForcedClosed?: boolean): void;
8645
8647
  insertAutoCompleteValue(value: string): void;
8646
8648
  selectAutoCompleteIndex(index: number): void;
8647
8649
  moveAutoCompleteSelection(direction: "previous" | "next"): void;
@@ -9142,7 +9144,7 @@ interface ClosedSidePanel {
9142
9144
  }
9143
9145
  type SidePanelState = OpenSidePanel | ClosedSidePanel;
9144
9146
  interface PanelInfo {
9145
- initialPanelProps: SidePanelComponentProps;
9147
+ currentPanelProps: SidePanelComponentProps;
9146
9148
  componentTag: string;
9147
9149
  size: number;
9148
9150
  isCollapsed?: boolean;
@@ -9169,8 +9171,8 @@ declare class SidePanelStore extends SpreadsheetStore {
9169
9171
  get totalPanelSize(): number;
9170
9172
  private getPanelProps;
9171
9173
  private getPanelKey;
9172
- open(componentTag: string, initialPanelProps?: SidePanelComponentProps): void;
9173
- replace(componentTag: string, currentPanelKey: string, initialPanelProps?: SidePanelComponentProps): void;
9174
+ open(componentTag: string, currentPanelProps?: SidePanelComponentProps): void;
9175
+ replace(componentTag: string, currentPanelKey: string, currentPanelProps?: SidePanelComponentProps): void;
9174
9176
  private _openPanel;
9175
9177
  toggle(componentTag: string, panelProps: SidePanelComponentProps): void;
9176
9178
  close(): void;
@@ -10023,7 +10025,7 @@ declare abstract class AbstractResizer extends Component<ResizerProps, Spreadshe
10023
10025
  setup(): void;
10024
10026
  _computeHandleDisplay(ev: MouseEvent): void;
10025
10027
  _computeGrabDisplay(ev: MouseEvent): void;
10026
- onMouseMove(ev: PointerEvent): void;
10028
+ onMouseMove(ev: MouseEvent): void;
10027
10029
  onMouseLeave(): void;
10028
10030
  onDblClick(ev: MouseEvent): void;
10029
10031
  onMouseDown(ev: MouseEvent): void;
@@ -11987,6 +11989,7 @@ declare class ClickableCellsStore extends SpreadsheetStore {
11987
11989
  private getClickableItem;
11988
11990
  private findClickableItem;
11989
11991
  get clickableCells(): ClickableCell[];
11992
+ private getClickableCellRect;
11990
11993
  }
11991
11994
 
11992
11995
  interface Props$4 {