@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
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, App, blockDom, useState, onPatched, useExternalListener, onWillUpdateProps, onWillStart, onWillPatch, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
@@ -2613,7 +2613,6 @@ const invalidateEvaluationCommands = new Set([
2613
2613
  "REDO",
2614
2614
  "ADD_MERGE",
2615
2615
  "REMOVE_MERGE",
2616
- "DUPLICATE_SHEET",
2617
2616
  "UPDATE_LOCALE",
2618
2617
  "ADD_PIVOT",
2619
2618
  "UPDATE_PIVOT",
@@ -18541,7 +18540,7 @@ function getTokenNextReferenceType(xc) {
18541
18540
  function setXcToFixedReferenceType(xc, referenceType) {
18542
18541
  let sheetName;
18543
18542
  ({ sheetName, xc } = splitReference(xc));
18544
- sheetName = sheetName ? sheetName + "!" : "";
18543
+ sheetName = sheetName ? getCanonicalSymbolName(sheetName) + "!" : "";
18545
18544
  xc = xc.replace(/\$/g, "");
18546
18545
  const splitIndex = xc.indexOf(":");
18547
18546
  if (splitIndex >= 0) {
@@ -22582,6 +22581,9 @@ function getTreeMapGroupColors(definition, tree) {
22582
22581
  }));
22583
22582
  }
22584
22583
  function getTreeMapColorScale(tree, coloringOption) {
22584
+ if (tree.length === 0) {
22585
+ return undefined;
22586
+ }
22585
22587
  const treeNodesByLevel = pyramidizeTree(tree);
22586
22588
  const nodes = treeNodesByLevel[treeNodesByLevel.length - 1];
22587
22589
  const minValue = Math.min(...nodes.map((node) => node.value));
@@ -24251,11 +24253,18 @@ function chartToImageUrl(runtime, figure, type) {
24251
24253
  // we have to add the canvas to the DOM otherwise it won't be rendered
24252
24254
  document.body.append(div);
24253
24255
  if ("chartJsConfig" in runtime) {
24256
+ const extensionsLoaded = areChartJSExtensionsLoaded();
24257
+ if (!extensionsLoaded) {
24258
+ registerChartJSExtensions();
24259
+ }
24254
24260
  const config = deepCopy(runtime.chartJsConfig);
24255
24261
  config.plugins = [backgroundColorChartJSPlugin];
24256
24262
  const chart = new window.Chart(canvas, config);
24257
24263
  imageContent = chart.toBase64Image();
24258
24264
  chart.destroy();
24265
+ if (!extensionsLoaded) {
24266
+ unregisterChartJsExtensions();
24267
+ }
24259
24268
  }
24260
24269
  else if (type === "scorecard") {
24261
24270
  const design = getScorecardConfiguration(figure, runtime);
@@ -24285,11 +24294,18 @@ async function chartToImageFile(runtime, figure, type) {
24285
24294
  document.body.append(div);
24286
24295
  let chartBlob = null;
24287
24296
  if ("chartJsConfig" in runtime) {
24297
+ const extensionsLoaded = areChartJSExtensionsLoaded();
24298
+ if (!extensionsLoaded) {
24299
+ registerChartJSExtensions();
24300
+ }
24288
24301
  const config = deepCopy(runtime.chartJsConfig);
24289
24302
  config.plugins = [backgroundColorChartJSPlugin];
24290
24303
  const chart = new window.Chart(canvas, config);
24291
24304
  chartBlob = await new Promise((resolve) => canvas.toBlob(resolve, "image/png"));
24292
24305
  chart.destroy();
24306
+ if (!extensionsLoaded) {
24307
+ unregisterChartJsExtensions();
24308
+ }
24293
24309
  }
24294
24310
  else if (type === "scorecard") {
24295
24311
  const design = getScorecardConfiguration(figure, runtime);
@@ -32642,6 +32658,7 @@ class AbstractComposerStore extends SpreadsheetStore {
32642
32658
  }
32643
32659
  this.selectionStart = start;
32644
32660
  this.selectionEnd = end;
32661
+ this.stopComposerRangeSelection();
32645
32662
  this.computeFormulaCursorContext();
32646
32663
  this.computeParenthesisRelatedToCursor();
32647
32664
  this.updateAutoCompleteProvider();
@@ -33317,10 +33334,13 @@ class AbstractComposerStore extends SpreadsheetStore {
33317
33334
  hideHelp() {
33318
33335
  this.autoComplete.hide();
33319
33336
  }
33320
- autoCompleteOrStop(direction) {
33337
+ autoCompleteOrStop(direction, assistantForcedClosed = false) {
33321
33338
  if (this.editionMode !== "inactive") {
33322
33339
  const autoComplete = this.autoComplete;
33323
- if (autoComplete.provider && autoComplete.selectedIndex !== undefined) {
33340
+ const suppressAutocomplete = assistantForcedClosed && this.canBeToggled;
33341
+ if (!suppressAutocomplete &&
33342
+ autoComplete.provider &&
33343
+ autoComplete.selectedIndex !== undefined) {
33324
33344
  const autoCompleteValue = autoComplete.provider.proposals[autoComplete.selectedIndex]?.text;
33325
33345
  if (autoCompleteValue) {
33326
33346
  this.autoComplete.provider?.selectProposal(autoCompleteValue);
@@ -33543,7 +33563,8 @@ class Composer extends Component {
33543
33563
  assistantStyle["max-height"] = `${availableSpaceAbove - CLOSE_ICON_RADIUS}px`;
33544
33564
  // render top
33545
33565
  // We compensate 2 px of margin on the assistant style + 1px for design reasons
33546
- assistantStyle.transform = `translate(0, calc(-100% - ${cellHeight + 3}px))`;
33566
+ assistantStyle.top = `-3px`;
33567
+ assistantStyle.transform = `translate(0, -100%)`;
33547
33568
  }
33548
33569
  if (cellX + ASSISTANT_WIDTH > this.props.delimitation.width) {
33549
33570
  // render left
@@ -33663,16 +33684,12 @@ class Composer extends Component {
33663
33684
  processTabKey(ev, direction) {
33664
33685
  ev.preventDefault();
33665
33686
  ev.stopPropagation();
33666
- if (!this.assistant.forcedClosed) {
33667
- this.props.composerStore.autoCompleteOrStop(direction);
33668
- }
33687
+ this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
33669
33688
  }
33670
33689
  processEnterKey(ev, direction) {
33671
33690
  ev.preventDefault();
33672
33691
  ev.stopPropagation();
33673
- if (!this.assistant.forcedClosed) {
33674
- this.props.composerStore.autoCompleteOrStop(direction);
33675
- }
33692
+ this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
33676
33693
  }
33677
33694
  processNewLineEvent(ev) {
33678
33695
  ev.preventDefault();
@@ -33848,7 +33865,6 @@ class Composer extends Component {
33848
33865
  return;
33849
33866
  }
33850
33867
  const newSelection = this.contentHelper.getCurrentSelection();
33851
- this.props.composerStore.stopComposerRangeSelection();
33852
33868
  this.props.onComposerContentFocused();
33853
33869
  this.props.composerStore.changeComposerCursorSelection(newSelection.start, newSelection.end);
33854
33870
  this.processTokenAtCursor();
@@ -47369,10 +47385,11 @@ class AbstractResizer extends Component {
47369
47385
  this.state.waitingForMove = false;
47370
47386
  }
47371
47387
  onMouseMove(ev) {
47372
- if (this.env.isMobile()) {
47373
- return;
47374
- }
47375
- if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
47388
+ if (this.env.isMobile() ||
47389
+ this.env.model.getters.isReadonly() ||
47390
+ this.state.isResizing ||
47391
+ this.state.isMoving ||
47392
+ this.state.isSelecting) {
47376
47393
  return;
47377
47394
  }
47378
47395
  this._computeHandleDisplay(ev);
@@ -47439,6 +47456,10 @@ class AbstractResizer extends Component {
47439
47456
  if (index < 0) {
47440
47457
  return;
47441
47458
  }
47459
+ if (this.env.model.getters.isReadonly()) {
47460
+ this._selectElement(index, false);
47461
+ return;
47462
+ }
47442
47463
  if (this.state.waitingForMove) {
47443
47464
  if (!this.env.model.getters.isGridSelectionActive()) {
47444
47465
  this._selectElement(index, false);
@@ -48799,7 +48820,7 @@ const friction = 0.95;
48799
48820
  const verticalScrollFactor = 1;
48800
48821
  const horizontalScrollFactor = 1;
48801
48822
  const resetTimeoutDuration = 100;
48802
- function useTouchScroll(ref, updateScroll, canMoveUp) {
48823
+ function useTouchScroll(ref, updateScroll, canMoveUp, canMoveDown) {
48803
48824
  let lastX = 0;
48804
48825
  let lastY = 0;
48805
48826
  let velocityX = 0;
@@ -48836,7 +48857,7 @@ function useTouchScroll(ref, updateScroll, canMoveUp) {
48836
48857
  lastX = clientX;
48837
48858
  lastY = clientY;
48838
48859
  lastTime = currentTime;
48839
- if (canMoveUp()) {
48860
+ if ((deltaY < 0 && canMoveUp()) || (deltaY > 0 && canMoveDown())) {
48840
48861
  if (event.cancelable) {
48841
48862
  event.preventDefault();
48842
48863
  }
@@ -54736,7 +54757,6 @@ function insertTokenAfterArgSeparator(tokenAtCursor, value) {
54736
54757
  // replace the whole token
54737
54758
  start = tokenAtCursor.start;
54738
54759
  }
54739
- this.composer.stopComposerRangeSelection();
54740
54760
  this.composer.changeComposerCursorSelection(start, end);
54741
54761
  this.composer.replaceComposerCursorSelection(value);
54742
54762
  }
@@ -54754,7 +54774,6 @@ function insertTokenAfterLeftParenthesis(tokenAtCursor, value) {
54754
54774
  // replace the whole token
54755
54775
  start = tokenAtCursor.start;
54756
54776
  }
54757
- this.composer.stopComposerRangeSelection();
54758
54777
  this.composer.changeComposerCursorSelection(start, end);
54759
54778
  this.composer.replaceComposerCursorSelection(value);
54760
54779
  }
@@ -56037,7 +56056,6 @@ const dateGranularities = [
56037
56056
  pivotRegistry.add("SPREADSHEET", {
56038
56057
  ui: SpreadsheetPivot,
56039
56058
  definition: SpreadsheetPivotRuntimeDefinition,
56040
- externalData: false,
56041
56059
  dateGranularities: [...dateGranularities],
56042
56060
  datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
56043
56061
  isMeasureCandidate: (field) => field.type !== "boolean",
@@ -57453,6 +57471,7 @@ class SidePanelStore extends SpreadsheetStore {
57453
57471
  getPanelProps(panelInfo) {
57454
57472
  const state = this.computeState(panelInfo);
57455
57473
  if (state.isOpen) {
57474
+ panelInfo.currentPanelProps = state.props ?? panelInfo.currentPanelProps;
57456
57475
  return state.props ?? {};
57457
57476
  }
57458
57477
  return {};
@@ -57464,11 +57483,11 @@ class SidePanelStore extends SpreadsheetStore {
57464
57483
  }
57465
57484
  return undefined;
57466
57485
  }
57467
- open(componentTag, initialPanelProps = {}) {
57486
+ open(componentTag, currentPanelProps = {}) {
57468
57487
  if (this.screenWidthStore.isSmall) {
57469
57488
  return;
57470
57489
  }
57471
- const newPanelInfo = { initialPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57490
+ const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57472
57491
  const state = this.computeState(newPanelInfo);
57473
57492
  if (!state.isOpen) {
57474
57493
  return;
@@ -57492,8 +57511,8 @@ class SidePanelStore extends SpreadsheetStore {
57492
57511
  }
57493
57512
  this._openPanel("secondaryPanel", newPanelInfo, state);
57494
57513
  }
57495
- replace(componentTag, currentPanelKey, initialPanelProps = {}) {
57496
- const newPanelInfo = { initialPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57514
+ replace(componentTag, currentPanelKey, currentPanelProps = {}) {
57515
+ const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
57497
57516
  const state = this.computeState(newPanelInfo);
57498
57517
  if (!state.isOpen) {
57499
57518
  return;
@@ -57523,10 +57542,10 @@ class SidePanelStore extends SpreadsheetStore {
57523
57542
  _openPanel(panel, newPanel, state) {
57524
57543
  const currentPanel = this[panel];
57525
57544
  if (currentPanel && newPanel.componentTag !== currentPanel.componentTag) {
57526
- currentPanel.initialPanelProps?.onCloseSidePanel?.();
57545
+ currentPanel.currentPanelProps?.onCloseSidePanel?.();
57527
57546
  }
57528
57547
  this[panel] = {
57529
- initialPanelProps: state.props ?? {},
57548
+ currentPanelProps: state.props ?? {},
57530
57549
  componentTag: newPanel.componentTag,
57531
57550
  size: currentPanel?.size || DEFAULT_SIDE_PANEL_SIZE,
57532
57551
  isCollapsed: currentPanel?.isCollapsed || false,
@@ -57548,16 +57567,16 @@ class SidePanelStore extends SpreadsheetStore {
57548
57567
  close() {
57549
57568
  if (this.mainPanel?.isPinned) {
57550
57569
  if (this.secondaryPanel) {
57551
- this.secondaryPanel.initialPanelProps.onCloseSidePanel?.();
57570
+ this.secondaryPanel.currentPanelProps.onCloseSidePanel?.();
57552
57571
  this.secondaryPanel = undefined;
57553
57572
  }
57554
57573
  return;
57555
57574
  }
57556
- this.mainPanel?.initialPanelProps.onCloseSidePanel?.();
57575
+ this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
57557
57576
  this.mainPanel = undefined;
57558
57577
  }
57559
57578
  closeMainPanel() {
57560
- this.mainPanel?.initialPanelProps.onCloseSidePanel?.();
57579
+ this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
57561
57580
  this.mainPanel = this.secondaryPanel || undefined;
57562
57581
  this.secondaryPanel = undefined;
57563
57582
  }
@@ -57589,7 +57608,7 @@ class SidePanelStore extends SpreadsheetStore {
57589
57608
  }
57590
57609
  this.mainPanel.isPinned = !this.mainPanel.isPinned;
57591
57610
  if (!this.mainPanel.isPinned && this.secondaryPanel) {
57592
- this.secondaryPanel?.initialPanelProps.onCloseSidePanel?.();
57611
+ this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
57593
57612
  this.mainPanel = this.secondaryPanel;
57594
57613
  this.secondaryPanel = undefined;
57595
57614
  }
@@ -57608,7 +57627,7 @@ class SidePanelStore extends SpreadsheetStore {
57608
57627
  panelInfo.size = COLLAPSED_SIDE_PANEL_SIZE;
57609
57628
  }
57610
57629
  }
57611
- computeState({ componentTag, initialPanelProps }) {
57630
+ computeState({ componentTag, currentPanelProps: initialPanelProps, }) {
57612
57631
  const customComputeState = sidePanelRegistry.get(componentTag).computeState;
57613
57632
  const state = customComputeState
57614
57633
  ? customComputeState(this.getters, initialPanelProps)
@@ -57618,7 +57637,7 @@ class SidePanelStore extends SpreadsheetStore {
57618
57637
  changeSpreadsheetWidth(width) {
57619
57638
  this.availableWidth = width - MIN_SHEET_VIEW_WIDTH;
57620
57639
  if (this.secondaryPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
57621
- this.secondaryPanel?.initialPanelProps.onCloseSidePanel?.();
57640
+ this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
57622
57641
  this.secondaryPanel = undefined;
57623
57642
  }
57624
57643
  if (this.mainPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
@@ -57778,6 +57797,10 @@ class Grid extends Component {
57778
57797
  useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
57779
57798
  const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
57780
57799
  return scrollY > 0;
57800
+ }, () => {
57801
+ const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
57802
+ const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
57803
+ return scrollY < maxOffsetY;
57781
57804
  });
57782
57805
  }
57783
57806
  get highlights() {
@@ -64426,10 +64449,17 @@ class PivotCorePlugin extends CorePlugin {
64426
64449
  if (!pivot) {
64427
64450
  continue;
64428
64451
  }
64429
- for (const measure of pivot.definition.measures) {
64452
+ const def = deepCopy(pivot.definition);
64453
+ for (const measure of def.measures) {
64430
64454
  if (measure.computedBy?.formula === formulaString) {
64431
- const measureIndex = pivot.definition.measures.indexOf(measure);
64432
- this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", { formula: newFormulaString, sheetId });
64455
+ const measureIndex = def.measures.indexOf(measure);
64456
+ if (measureIndex !== -1) {
64457
+ def.measures[measureIndex].computedBy = {
64458
+ formula: newFormulaString,
64459
+ sheetId,
64460
+ };
64461
+ }
64462
+ this.dispatch("UPDATE_PIVOT", { pivotId, pivot: def });
64433
64463
  }
64434
64464
  }
64435
64465
  }
@@ -64567,6 +64597,9 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
64567
64597
  const { sheetId, zone } = definition.dataSet;
64568
64598
  const range = this.getters.getRangeFromZone(sheetId, zone);
64569
64599
  const adaptedRange = adaptPivotRange(range, applyChange);
64600
+ if (adaptedRange === range) {
64601
+ return;
64602
+ }
64570
64603
  const dataSet = adaptedRange && {
64571
64604
  sheetId: adaptedRange.sheetId,
64572
64605
  zone: adaptedRange.zone,
@@ -68572,9 +68605,7 @@ class PivotUIPlugin extends CoreViewPlugin {
68572
68605
  handle(cmd) {
68573
68606
  if (invalidateEvaluationCommands.has(cmd.type)) {
68574
68607
  for (const pivotId of this.getters.getPivotIds()) {
68575
- if (!pivotRegistry.get(this.getters.getPivotCoreDefinition(pivotId).type).externalData) {
68576
- this.setupPivot(pivotId, { recreate: true });
68577
- }
68608
+ this.setupPivot(pivotId, { recreate: true });
68578
68609
  }
68579
68610
  }
68580
68611
  switch (cmd.type) {
@@ -68782,7 +68813,7 @@ class PivotUIPlugin extends CoreViewPlugin {
68782
68813
  pivot.init({ reload: true });
68783
68814
  }
68784
68815
  setupPivot(pivotId, { recreate } = { recreate: false }) {
68785
- const definition = this.getters.getPivotCoreDefinition(pivotId);
68816
+ const definition = deepCopy(this.getters.getPivotCoreDefinition(pivotId));
68786
68817
  if (!(pivotId in this.pivots)) {
68787
68818
  const Pivot = withPivotPresentationLayer(pivotRegistry.get(definition.type).ui);
68788
68819
  this.pivots[pivotId] = new Pivot(this.custom, { definition, getters: this.getters });
@@ -74999,6 +75030,7 @@ class SheetViewPlugin extends UIPlugin {
74999
75030
  "getFigureUI",
75000
75031
  "getPositionAnchorOffset",
75001
75032
  "getGridOffset",
75033
+ "getMaximumSheetOffset",
75002
75034
  ];
75003
75035
  viewports = {};
75004
75036
  /**
@@ -78034,16 +78066,18 @@ class ClickableCellsStore extends SpreadsheetStore {
78034
78066
  get clickableCells() {
78035
78067
  const cells = [];
78036
78068
  const getters = this.getters;
78037
- const sheetId = getters.getActiveSheetId();
78038
78069
  for (const position of this.getters.getVisibleCellPositions()) {
78039
78070
  const item = this.getClickableItem(position);
78040
78071
  if (!item) {
78041
78072
  continue;
78042
78073
  }
78043
78074
  const title = typeof item.title === "function" ? item.title(position, getters) : item.title;
78044
- const zone = getters.expandZone(sheetId, positionToZone(position));
78075
+ const rect = this.getClickableCellRect(position);
78076
+ if (!rect) {
78077
+ continue;
78078
+ }
78045
78079
  cells.push({
78046
- coordinates: getters.getVisibleRect(zone),
78080
+ coordinates: rect,
78047
78081
  position,
78048
78082
  action: item.execute,
78049
78083
  title: title || "",
@@ -78051,6 +78085,31 @@ class ClickableCellsStore extends SpreadsheetStore {
78051
78085
  }
78052
78086
  return cells;
78053
78087
  }
78088
+ getClickableCellRect(position) {
78089
+ const zone = this.getters.expandZone(position.sheetId, positionToZone(position));
78090
+ const clickableRect = this.getters.getVisibleRect(zone);
78091
+ const icons = this.getters.getCellIcons(position);
78092
+ const iconsAtPosition = {
78093
+ center: icons.find((icon) => icon.horizontalAlign === "center"),
78094
+ left: icons.find((icon) => icon.horizontalAlign === "left"),
78095
+ right: icons.find((icon) => icon.horizontalAlign === "right"),
78096
+ };
78097
+ if (iconsAtPosition.center?.onClick) {
78098
+ return undefined;
78099
+ }
78100
+ if (iconsAtPosition.right?.onClick) {
78101
+ const cellRect = this.getters.getRect(zone);
78102
+ const iconRect = this.getters.getCellIconRect(iconsAtPosition.right, cellRect);
78103
+ clickableRect.width -= iconRect.width + iconsAtPosition.right.margin;
78104
+ }
78105
+ if (iconsAtPosition.left?.onClick) {
78106
+ const cellRect = this.getters.getRect(zone);
78107
+ const iconRect = this.getters.getCellIconRect(iconsAtPosition.left, cellRect);
78108
+ clickableRect.x += iconRect.width + iconsAtPosition.left.margin;
78109
+ clickableRect.width -= iconRect.width + iconsAtPosition.left.margin;
78110
+ }
78111
+ return clickableRect;
78112
+ }
78054
78113
  }
78055
78114
 
78056
78115
  css /* scss */ `
@@ -78089,6 +78148,10 @@ class SpreadsheetDashboard extends Component {
78089
78148
  useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
78090
78149
  const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
78091
78150
  return scrollY > 0;
78151
+ }, () => {
78152
+ const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
78153
+ const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
78154
+ return scrollY < maxOffsetY;
78092
78155
  });
78093
78156
  }
78094
78157
  get gridContainer() {
@@ -78803,7 +78866,7 @@ class SmallBottomBar extends Component {
78803
78866
  height: this.focus === "inactive" ? "26px" : "fit-content",
78804
78867
  "max-height": `130px`,
78805
78868
  }),
78806
- showAssistant: !isIOS(), // Hide assistant on iOS as it breaks visually
78869
+ showAssistant: false, // Hide assistant in small composer as it gets cropped ATM
78807
78870
  placeholder: this.composerStore.placeholder,
78808
78871
  };
78809
78872
  }
@@ -80132,7 +80195,7 @@ css /* scss */ `
80132
80195
  border-radius: 4px;
80133
80196
  font-weight: 500;
80134
80197
  font-size: 14px;
80135
- height: 32px;
80198
+ min-height: 32px;
80136
80199
  line-height: 16px;
80137
80200
  flex-grow: 1;
80138
80201
  background-color: ${BUTTON_BG};
@@ -84888,6 +84951,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
84888
84951
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
84889
84952
 
84890
84953
 
84891
- __info__.version = "18.4.17";
84892
- __info__.date = "2025-11-12T14:15:30.592Z";
84893
- __info__.hash = "a8ebab8";
84954
+ __info__.version = "18.4.19";
84955
+ __info__.date = "2025-12-02T05:34:03.902Z";
84956
+ __info__.hash = "95b1252";