@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.
- package/dist/o-spreadsheet.cjs.js +114 -51
- package/dist/o-spreadsheet.d.ts +11 -8
- package/dist/o-spreadsheet.esm.js +114 -51
- package/dist/o-spreadsheet.iife.js +114 -51
- package/dist/o-spreadsheet.iife.min.js +377 -377
- package/dist/o_spreadsheet.xml +4 -3
- package/package.json +1 -1
|
@@ -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.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
47374
|
-
|
|
47375
|
-
|
|
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,
|
|
57486
|
+
open(componentTag, currentPanelProps = {}) {
|
|
57468
57487
|
if (this.screenWidthStore.isSmall) {
|
|
57469
57488
|
return;
|
|
57470
57489
|
}
|
|
57471
|
-
const newPanelInfo = {
|
|
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,
|
|
57496
|
-
const newPanelInfo = {
|
|
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.
|
|
57545
|
+
currentPanel.currentPanelProps?.onCloseSidePanel?.();
|
|
57527
57546
|
}
|
|
57528
57547
|
this[panel] = {
|
|
57529
|
-
|
|
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.
|
|
57570
|
+
this.secondaryPanel.currentPanelProps.onCloseSidePanel?.();
|
|
57552
57571
|
this.secondaryPanel = undefined;
|
|
57553
57572
|
}
|
|
57554
57573
|
return;
|
|
57555
57574
|
}
|
|
57556
|
-
this.mainPanel?.
|
|
57575
|
+
this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
|
|
57557
57576
|
this.mainPanel = undefined;
|
|
57558
57577
|
}
|
|
57559
57578
|
closeMainPanel() {
|
|
57560
|
-
this.mainPanel?.
|
|
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?.
|
|
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?.
|
|
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
|
-
|
|
64452
|
+
const def = deepCopy(pivot.definition);
|
|
64453
|
+
for (const measure of def.measures) {
|
|
64430
64454
|
if (measure.computedBy?.formula === formulaString) {
|
|
64431
|
-
const measureIndex =
|
|
64432
|
-
|
|
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
|
-
|
|
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
|
|
78075
|
+
const rect = this.getClickableCellRect(position);
|
|
78076
|
+
if (!rect) {
|
|
78077
|
+
continue;
|
|
78078
|
+
}
|
|
78045
78079
|
cells.push({
|
|
78046
|
-
coordinates:
|
|
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:
|
|
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.
|
|
84892
|
-
__info__.date = "2025-
|
|
84893
|
-
__info__.hash = "
|
|
84954
|
+
__info__.version = "18.4.19";
|
|
84955
|
+
__info__.date = "2025-12-02T05:34:03.902Z";
|
|
84956
|
+
__info__.hash = "95b1252";
|