@odoo/o-spreadsheet 19.0.9 → 19.0.11
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 +92 -53
- package/dist/o-spreadsheet.d.ts +15 -402
- package/dist/o-spreadsheet.esm.js +92 -53
- package/dist/o-spreadsheet.iife.js +92 -53
- package/dist/o-spreadsheet.iife.min.js +12 -12
- package/dist/o_spreadsheet.xml +8 -6
- package/package.json +2 -2
|
@@ -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 19.0.
|
|
6
|
-
* @date 2025-11-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.0.11
|
|
6
|
+
* @date 2025-11-24T07:46:47.685Z
|
|
7
|
+
* @hash f5bdbcc
|
|
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';
|
|
@@ -862,7 +862,7 @@ const PIVOT_TABLE_CONFIG = {
|
|
|
862
862
|
};
|
|
863
863
|
const PIVOT_INDENT = 15;
|
|
864
864
|
const PIVOT_COLLAPSE_ICON_SIZE = 12;
|
|
865
|
-
const PIVOT_MAX_NUMBER_OF_CELLS =
|
|
865
|
+
const PIVOT_MAX_NUMBER_OF_CELLS = 5e5;
|
|
866
866
|
const DEFAULT_CURRENCY = {
|
|
867
867
|
symbol: "$",
|
|
868
868
|
position: "before",
|
|
@@ -2499,7 +2499,10 @@ function isInside(col, row, zone) {
|
|
|
2499
2499
|
* Check if a zone is inside another
|
|
2500
2500
|
*/
|
|
2501
2501
|
function isZoneInside(smallZone, biggerZone) {
|
|
2502
|
-
return
|
|
2502
|
+
return (smallZone.left >= biggerZone.left &&
|
|
2503
|
+
smallZone.right <= biggerZone.right &&
|
|
2504
|
+
smallZone.top >= biggerZone.top &&
|
|
2505
|
+
smallZone.bottom <= biggerZone.bottom);
|
|
2503
2506
|
}
|
|
2504
2507
|
function zoneToDimension(zone) {
|
|
2505
2508
|
return {
|
|
@@ -6902,7 +6905,7 @@ function getRangeString(range, forSheetId, getSheetName, options = { useBoundedR
|
|
|
6902
6905
|
let sheetName = "";
|
|
6903
6906
|
if (prefixSheet) {
|
|
6904
6907
|
if (range.invalidSheetName) {
|
|
6905
|
-
sheetName = range.invalidSheetName;
|
|
6908
|
+
sheetName = getCanonicalSymbolName(range.invalidSheetName);
|
|
6906
6909
|
}
|
|
6907
6910
|
else {
|
|
6908
6911
|
sheetName = getCanonicalSymbolName(getSheetName(range.sheetId));
|
|
@@ -13345,7 +13348,7 @@ const SUBTOTAL = {
|
|
|
13345
13348
|
if (!acceptHiddenCells && this.getters.isRowHiddenByUser(sheetId, row))
|
|
13346
13349
|
continue;
|
|
13347
13350
|
for (let col = left; col <= right; col++) {
|
|
13348
|
-
const cell = this.getters.
|
|
13351
|
+
const cell = this.getters.getCorrespondingFormulaCell({ sheetId, col, row });
|
|
13349
13352
|
if (!cell || !isSubtotalCell(cell)) {
|
|
13350
13353
|
evaluatedCellToKeep.push(this.getters.getEvaluatedCell({ sheetId, col, row }));
|
|
13351
13354
|
}
|
|
@@ -19341,7 +19344,7 @@ function getTokenNextReferenceType(xc) {
|
|
|
19341
19344
|
function setXcToFixedReferenceType(xc, referenceType) {
|
|
19342
19345
|
let sheetName;
|
|
19343
19346
|
({ sheetName, xc } = splitReference(xc));
|
|
19344
|
-
sheetName = sheetName ? sheetName + "!" : "";
|
|
19347
|
+
sheetName = sheetName ? getCanonicalSymbolName(sheetName) + "!" : "";
|
|
19345
19348
|
xc = xc.replace(/\$/g, "");
|
|
19346
19349
|
const splitIndex = xc.indexOf(":");
|
|
19347
19350
|
if (splitIndex >= 0) {
|
|
@@ -24418,7 +24421,7 @@ let ScorecardChart$1 = class ScorecardChart extends AbstractChart {
|
|
|
24418
24421
|
return {
|
|
24419
24422
|
background: context.background,
|
|
24420
24423
|
type: "scorecard",
|
|
24421
|
-
keyValue: context.range
|
|
24424
|
+
keyValue: context.range?.[0]?.dataRange,
|
|
24422
24425
|
title: context.title || { text: "" },
|
|
24423
24426
|
baselineMode: DEFAULT_SCORECARD_BASELINE_MODE,
|
|
24424
24427
|
baselineColorUp: DEFAULT_SCORECARD_BASELINE_COLOR_UP,
|
|
@@ -29127,7 +29130,7 @@ class GaugeChart extends AbstractChart {
|
|
|
29127
29130
|
background: context.background,
|
|
29128
29131
|
title: context.title || { text: "" },
|
|
29129
29132
|
type: "gauge",
|
|
29130
|
-
dataRange: context.range
|
|
29133
|
+
dataRange: context.range?.[0]?.dataRange,
|
|
29131
29134
|
sectionRule: {
|
|
29132
29135
|
colors: {
|
|
29133
29136
|
lowerColor: DEFAULT_GAUGE_LOWER_COLOR,
|
|
@@ -31019,8 +31022,7 @@ function generateMasterChartConfig(chartJsConfig) {
|
|
|
31019
31022
|
.filter((ds) => !isTrendLineAxis(ds["xAxisID"]))
|
|
31020
31023
|
.map((ds) => ({
|
|
31021
31024
|
...ds,
|
|
31022
|
-
pointRadius: 0,
|
|
31023
|
-
showLine: true,
|
|
31025
|
+
pointRadius: ds.showLine === false ? 2 : 0, // Show points only for scatter plots
|
|
31024
31026
|
})),
|
|
31025
31027
|
},
|
|
31026
31028
|
options: {
|
|
@@ -34521,16 +34523,12 @@ class Composer extends Component {
|
|
|
34521
34523
|
processTabKey(ev, direction) {
|
|
34522
34524
|
ev.preventDefault();
|
|
34523
34525
|
ev.stopPropagation();
|
|
34524
|
-
|
|
34525
|
-
this.props.composerStore.autoCompleteOrStop(direction);
|
|
34526
|
-
}
|
|
34526
|
+
this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
|
|
34527
34527
|
}
|
|
34528
34528
|
processEnterKey(ev, direction) {
|
|
34529
34529
|
ev.preventDefault();
|
|
34530
34530
|
ev.stopPropagation();
|
|
34531
|
-
|
|
34532
|
-
this.props.composerStore.autoCompleteOrStop(direction);
|
|
34533
|
-
}
|
|
34531
|
+
this.props.composerStore.autoCompleteOrStop(direction, this.assistant.forcedClosed);
|
|
34534
34532
|
}
|
|
34535
34533
|
processNewLineEvent(ev) {
|
|
34536
34534
|
ev.preventDefault();
|
|
@@ -34706,7 +34704,6 @@ class Composer extends Component {
|
|
|
34706
34704
|
return;
|
|
34707
34705
|
}
|
|
34708
34706
|
const newSelection = this.contentHelper.getCurrentSelection();
|
|
34709
|
-
this.props.composerStore.stopComposerRangeSelection();
|
|
34710
34707
|
const isCurrentlyInactive = this.props.composerStore.editionMode === "inactive";
|
|
34711
34708
|
this.props.onComposerContentFocused(newSelection);
|
|
34712
34709
|
if (!isCurrentlyInactive) {
|
|
@@ -35162,6 +35159,7 @@ class AbstractComposerStore extends SpreadsheetStore {
|
|
|
35162
35159
|
this.highlightStore.register(this);
|
|
35163
35160
|
this.onDispose(() => {
|
|
35164
35161
|
this.highlightStore.unRegister(this);
|
|
35162
|
+
this._cancelEdition();
|
|
35165
35163
|
});
|
|
35166
35164
|
}
|
|
35167
35165
|
handleEvent(event) {
|
|
@@ -35196,6 +35194,7 @@ class AbstractComposerStore extends SpreadsheetStore {
|
|
|
35196
35194
|
}
|
|
35197
35195
|
this.selectionStart = start;
|
|
35198
35196
|
this.selectionEnd = end;
|
|
35197
|
+
this.editionMode = "editing";
|
|
35199
35198
|
this.computeFormulaCursorContext();
|
|
35200
35199
|
this.computeParenthesisRelatedToCursor();
|
|
35201
35200
|
this.updateAutoCompleteProvider();
|
|
@@ -35866,10 +35865,13 @@ class AbstractComposerStore extends SpreadsheetStore {
|
|
|
35866
35865
|
hideHelp() {
|
|
35867
35866
|
this.autoComplete.hide();
|
|
35868
35867
|
}
|
|
35869
|
-
autoCompleteOrStop(direction) {
|
|
35868
|
+
autoCompleteOrStop(direction, assistantForcedClosed = false) {
|
|
35870
35869
|
if (this.editionMode !== "inactive") {
|
|
35871
35870
|
const autoComplete = this.autoComplete;
|
|
35872
|
-
|
|
35871
|
+
const suppressAutocomplete = assistantForcedClosed && this.canBeToggled;
|
|
35872
|
+
if (!suppressAutocomplete &&
|
|
35873
|
+
autoComplete.provider &&
|
|
35874
|
+
autoComplete.selectedIndex !== undefined) {
|
|
35873
35875
|
const autoCompleteValue = autoComplete.provider.proposals[autoComplete.selectedIndex]?.text;
|
|
35874
35876
|
if (autoCompleteValue) {
|
|
35875
35877
|
this.autoComplete.provider?.selectProposal(autoCompleteValue);
|
|
@@ -51560,10 +51562,11 @@ class AbstractResizer extends Component {
|
|
|
51560
51562
|
this.state.waitingForMove = false;
|
|
51561
51563
|
}
|
|
51562
51564
|
onMouseMove(ev) {
|
|
51563
|
-
if (this.env.isMobile()
|
|
51564
|
-
|
|
51565
|
-
|
|
51566
|
-
|
|
51565
|
+
if (this.env.isMobile() ||
|
|
51566
|
+
this.env.model.getters.isReadonly() ||
|
|
51567
|
+
this.state.isResizing ||
|
|
51568
|
+
this.state.isMoving ||
|
|
51569
|
+
this.state.isSelecting) {
|
|
51567
51570
|
return;
|
|
51568
51571
|
}
|
|
51569
51572
|
this._computeHandleDisplay(ev);
|
|
@@ -51630,6 +51633,10 @@ class AbstractResizer extends Component {
|
|
|
51630
51633
|
if (index < 0) {
|
|
51631
51634
|
return;
|
|
51632
51635
|
}
|
|
51636
|
+
if (this.env.model.getters.isReadonly()) {
|
|
51637
|
+
this._selectElement(index, false);
|
|
51638
|
+
return;
|
|
51639
|
+
}
|
|
51633
51640
|
if (this.state.waitingForMove) {
|
|
51634
51641
|
if (!this.env.model.getters.isGridSelectionActive()) {
|
|
51635
51642
|
this._selectElement(index, false);
|
|
@@ -52189,6 +52196,9 @@ class GridRenderer extends SpreadsheetStore {
|
|
|
52189
52196
|
break;
|
|
52190
52197
|
}
|
|
52191
52198
|
}
|
|
52199
|
+
finalize() {
|
|
52200
|
+
this.zonesWithPreventedAnimationsInNextFrame = recomputeZones(this.zonesWithPreventedAnimationsInNextFrame);
|
|
52201
|
+
}
|
|
52192
52202
|
get renderingLayers() {
|
|
52193
52203
|
return ["Background", "Headers"];
|
|
52194
52204
|
}
|
|
@@ -52988,7 +52998,7 @@ const friction = 0.95;
|
|
|
52988
52998
|
const verticalScrollFactor = 1;
|
|
52989
52999
|
const horizontalScrollFactor = 1;
|
|
52990
53000
|
const resetTimeoutDuration = 100;
|
|
52991
|
-
function useTouchScroll(ref, updateScroll, canMoveUp) {
|
|
53001
|
+
function useTouchScroll(ref, updateScroll, canMoveUp, canMoveDown) {
|
|
52992
53002
|
let lastX = 0;
|
|
52993
53003
|
let lastY = 0;
|
|
52994
53004
|
let velocityX = 0;
|
|
@@ -53025,7 +53035,7 @@ function useTouchScroll(ref, updateScroll, canMoveUp) {
|
|
|
53025
53035
|
lastX = clientX;
|
|
53026
53036
|
lastY = clientY;
|
|
53027
53037
|
lastTime = currentTime;
|
|
53028
|
-
if (canMoveUp()) {
|
|
53038
|
+
if ((deltaY < 0 && canMoveUp()) || (deltaY > 0 && canMoveDown())) {
|
|
53029
53039
|
if (event.cancelable) {
|
|
53030
53040
|
event.preventDefault();
|
|
53031
53041
|
}
|
|
@@ -59263,7 +59273,6 @@ function insertTokenAfterArgSeparator(tokenAtCursor, value) {
|
|
|
59263
59273
|
// replace the whole token
|
|
59264
59274
|
start = tokenAtCursor.start;
|
|
59265
59275
|
}
|
|
59266
|
-
this.composer.stopComposerRangeSelection();
|
|
59267
59276
|
this.composer.changeComposerCursorSelection(start, end);
|
|
59268
59277
|
this.composer.replaceComposerCursorSelection(value);
|
|
59269
59278
|
}
|
|
@@ -59281,7 +59290,6 @@ function insertTokenAfterLeftParenthesis(tokenAtCursor, value) {
|
|
|
59281
59290
|
// replace the whole token
|
|
59282
59291
|
start = tokenAtCursor.start;
|
|
59283
59292
|
}
|
|
59284
|
-
this.composer.stopComposerRangeSelection();
|
|
59285
59293
|
this.composer.changeComposerCursorSelection(start, end);
|
|
59286
59294
|
this.composer.replaceComposerCursorSelection(value);
|
|
59287
59295
|
}
|
|
@@ -60742,6 +60750,7 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60742
60750
|
getPanelProps(panelInfo) {
|
|
60743
60751
|
const state = this.computeState(panelInfo);
|
|
60744
60752
|
if (state.isOpen) {
|
|
60753
|
+
panelInfo.currentPanelProps = state.props ?? panelInfo.currentPanelProps;
|
|
60745
60754
|
return state.props ?? {};
|
|
60746
60755
|
}
|
|
60747
60756
|
return {};
|
|
@@ -60753,11 +60762,11 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60753
60762
|
}
|
|
60754
60763
|
return undefined;
|
|
60755
60764
|
}
|
|
60756
|
-
open(componentTag,
|
|
60765
|
+
open(componentTag, currentPanelProps = {}) {
|
|
60757
60766
|
if (this.screenWidthStore.isSmall) {
|
|
60758
60767
|
return;
|
|
60759
60768
|
}
|
|
60760
|
-
const newPanelInfo = {
|
|
60769
|
+
const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
|
|
60761
60770
|
const state = this.computeState(newPanelInfo);
|
|
60762
60771
|
if (!state.isOpen) {
|
|
60763
60772
|
return;
|
|
@@ -60781,8 +60790,8 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60781
60790
|
}
|
|
60782
60791
|
this._openPanel("secondaryPanel", newPanelInfo, state);
|
|
60783
60792
|
}
|
|
60784
|
-
replace(componentTag, currentPanelKey,
|
|
60785
|
-
const newPanelInfo = {
|
|
60793
|
+
replace(componentTag, currentPanelKey, currentPanelProps = {}) {
|
|
60794
|
+
const newPanelInfo = { currentPanelProps, componentTag, size: DEFAULT_SIDE_PANEL_SIZE };
|
|
60786
60795
|
const state = this.computeState(newPanelInfo);
|
|
60787
60796
|
if (!state.isOpen) {
|
|
60788
60797
|
return;
|
|
@@ -60812,10 +60821,10 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60812
60821
|
_openPanel(panel, newPanel, state) {
|
|
60813
60822
|
const currentPanel = this[panel];
|
|
60814
60823
|
if (currentPanel && newPanel.componentTag !== currentPanel.componentTag) {
|
|
60815
|
-
currentPanel.
|
|
60824
|
+
currentPanel.currentPanelProps?.onCloseSidePanel?.();
|
|
60816
60825
|
}
|
|
60817
60826
|
this[panel] = {
|
|
60818
|
-
|
|
60827
|
+
currentPanelProps: state.props ?? {},
|
|
60819
60828
|
componentTag: newPanel.componentTag,
|
|
60820
60829
|
size: currentPanel?.size || DEFAULT_SIDE_PANEL_SIZE,
|
|
60821
60830
|
isCollapsed: currentPanel?.isCollapsed || false,
|
|
@@ -60837,16 +60846,16 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60837
60846
|
close() {
|
|
60838
60847
|
if (this.mainPanel?.isPinned) {
|
|
60839
60848
|
if (this.secondaryPanel) {
|
|
60840
|
-
this.secondaryPanel.
|
|
60849
|
+
this.secondaryPanel.currentPanelProps.onCloseSidePanel?.();
|
|
60841
60850
|
this.secondaryPanel = undefined;
|
|
60842
60851
|
}
|
|
60843
60852
|
return;
|
|
60844
60853
|
}
|
|
60845
|
-
this.mainPanel?.
|
|
60854
|
+
this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
|
|
60846
60855
|
this.mainPanel = undefined;
|
|
60847
60856
|
}
|
|
60848
60857
|
closeMainPanel() {
|
|
60849
|
-
this.mainPanel?.
|
|
60858
|
+
this.mainPanel?.currentPanelProps.onCloseSidePanel?.();
|
|
60850
60859
|
this.mainPanel = this.secondaryPanel || undefined;
|
|
60851
60860
|
this.secondaryPanel = undefined;
|
|
60852
60861
|
}
|
|
@@ -60878,7 +60887,7 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60878
60887
|
}
|
|
60879
60888
|
this.mainPanel.isPinned = !this.mainPanel.isPinned;
|
|
60880
60889
|
if (!this.mainPanel.isPinned && this.secondaryPanel) {
|
|
60881
|
-
this.secondaryPanel?.
|
|
60890
|
+
this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
|
|
60882
60891
|
this.mainPanel = this.secondaryPanel;
|
|
60883
60892
|
this.secondaryPanel = undefined;
|
|
60884
60893
|
}
|
|
@@ -60897,7 +60906,7 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60897
60906
|
panelInfo.size = COLLAPSED_SIDE_PANEL_SIZE;
|
|
60898
60907
|
}
|
|
60899
60908
|
}
|
|
60900
|
-
computeState({ componentTag, initialPanelProps }) {
|
|
60909
|
+
computeState({ componentTag, currentPanelProps: initialPanelProps, }) {
|
|
60901
60910
|
const customComputeState = sidePanelRegistry.get(componentTag).computeState;
|
|
60902
60911
|
const state = customComputeState
|
|
60903
60912
|
? customComputeState(this.getters, initialPanelProps)
|
|
@@ -60907,7 +60916,7 @@ class SidePanelStore extends SpreadsheetStore {
|
|
|
60907
60916
|
changeSpreadsheetWidth(width) {
|
|
60908
60917
|
this.availableWidth = width - MIN_SHEET_VIEW_WIDTH;
|
|
60909
60918
|
if (this.secondaryPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
|
|
60910
|
-
this.secondaryPanel?.
|
|
60919
|
+
this.secondaryPanel?.currentPanelProps.onCloseSidePanel?.();
|
|
60911
60920
|
this.secondaryPanel = undefined;
|
|
60912
60921
|
}
|
|
60913
60922
|
if (this.mainPanel && width - this.totalPanelSize < MIN_SHEET_VIEW_WIDTH) {
|
|
@@ -61067,6 +61076,10 @@ class Grid extends Component {
|
|
|
61067
61076
|
useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
|
|
61068
61077
|
const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
|
|
61069
61078
|
return scrollY > 0;
|
|
61079
|
+
}, () => {
|
|
61080
|
+
const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
|
|
61081
|
+
const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
|
|
61082
|
+
return scrollY < maxOffsetY;
|
|
61070
61083
|
});
|
|
61071
61084
|
}
|
|
61072
61085
|
get highlights() {
|
|
@@ -62359,22 +62372,34 @@ class BordersPlugin extends CorePlugin {
|
|
|
62359
62372
|
addBorder(sheetId, zone, newBorder, force = false) {
|
|
62360
62373
|
const borders = [];
|
|
62361
62374
|
const plannedBorder = newBorder ? { zone, style: newBorder } : undefined;
|
|
62362
|
-
|
|
62363
|
-
|
|
62364
|
-
|
|
62365
|
-
|
|
62366
|
-
|
|
62375
|
+
// For each side, decide if we must clear the border on the *adjacent*
|
|
62376
|
+
// existing cell when we draw on the opposite side of the new zone.
|
|
62377
|
+
//
|
|
62378
|
+
// Example:
|
|
62379
|
+
// - newBorder.right is set → we draw border on the RIGHT side of `zone`
|
|
62380
|
+
// - the cell on the right may already have a LEFT border on that edge
|
|
62381
|
+
// In that case we clear that LEFT border, so only the new RIGHT border
|
|
62382
|
+
// remains on the shared edge.
|
|
62383
|
+
//
|
|
62384
|
+
// existingBorderSideToClear[side] = true means we should clear the border on that
|
|
62385
|
+
// side of the existing adjacent zone before adding the new border.
|
|
62386
|
+
const existingBorderSideToClear = {
|
|
62387
|
+
left: force || !!newBorder?.right,
|
|
62388
|
+
right: force || !!newBorder?.left,
|
|
62389
|
+
top: force || !!newBorder?.bottom,
|
|
62390
|
+
bottom: force || !!newBorder?.top,
|
|
62367
62391
|
};
|
|
62368
62392
|
let editingZone = [zone];
|
|
62369
62393
|
for (const existingBorder of this.borders[sheetId] ?? []) {
|
|
62370
62394
|
const inter = intersection(existingBorder.zone, zone);
|
|
62371
62395
|
if (!inter) {
|
|
62372
|
-
//
|
|
62396
|
+
// Check if the existing border is adjacent to the new zone
|
|
62373
62397
|
const adjacentEdge = adjacent(existingBorder.zone, zone);
|
|
62374
|
-
if (adjacentEdge &&
|
|
62398
|
+
if (adjacentEdge && existingBorderSideToClear[adjacentEdge.position]) {
|
|
62375
62399
|
for (const newZone of splitIfAdjacent(existingBorder.zone, zone)) {
|
|
62376
62400
|
const border = this.computeBorderFromZone(newZone, existingBorder);
|
|
62377
62401
|
const adjacentEdge = adjacent(newZone, zone);
|
|
62402
|
+
// Clear the existing border on the side that touches the new zone
|
|
62378
62403
|
switch (adjacentEdge?.position) {
|
|
62379
62404
|
case "left":
|
|
62380
62405
|
border.style.left = undefined;
|
|
@@ -78668,6 +78693,7 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
78668
78693
|
"getFigureUI",
|
|
78669
78694
|
"getPositionAnchorOffset",
|
|
78670
78695
|
"getGridOffset",
|
|
78696
|
+
"getMaximumSheetOffset",
|
|
78671
78697
|
];
|
|
78672
78698
|
viewports = {};
|
|
78673
78699
|
/**
|
|
@@ -80486,6 +80512,7 @@ topbarMenuRegistry
|
|
|
80486
80512
|
.add("file", {
|
|
80487
80513
|
name: _t("File"),
|
|
80488
80514
|
sequence: 10,
|
|
80515
|
+
isReadonlyAllowed: true,
|
|
80489
80516
|
})
|
|
80490
80517
|
.addChild("settings", ["file"], {
|
|
80491
80518
|
name: _t("Settings"),
|
|
@@ -80500,6 +80527,7 @@ topbarMenuRegistry
|
|
|
80500
80527
|
.add("edit", {
|
|
80501
80528
|
name: _t("Edit"),
|
|
80502
80529
|
sequence: 20,
|
|
80530
|
+
isReadonlyAllowed: true,
|
|
80503
80531
|
})
|
|
80504
80532
|
.addChild("undo", ["edit"], {
|
|
80505
80533
|
...undo,
|
|
@@ -80584,6 +80612,7 @@ topbarMenuRegistry
|
|
|
80584
80612
|
.add("view", {
|
|
80585
80613
|
name: _t("View"),
|
|
80586
80614
|
sequence: 30,
|
|
80615
|
+
isReadonlyAllowed: true,
|
|
80587
80616
|
})
|
|
80588
80617
|
.addChild("unfreeze_panes", ["view"], {
|
|
80589
80618
|
...unFreezePane,
|
|
@@ -80675,6 +80704,7 @@ topbarMenuRegistry
|
|
|
80675
80704
|
.add("insert", {
|
|
80676
80705
|
name: _t("Insert"),
|
|
80677
80706
|
sequence: 40,
|
|
80707
|
+
isReadonlyAllowed: true,
|
|
80678
80708
|
})
|
|
80679
80709
|
.addChild("insert_row", ["insert"], {
|
|
80680
80710
|
...insertRow,
|
|
@@ -80786,7 +80816,11 @@ topbarMenuRegistry
|
|
|
80786
80816
|
// ---------------------------------------------------------------------
|
|
80787
80817
|
// FORMAT MENU ITEMS
|
|
80788
80818
|
// ---------------------------------------------------------------------
|
|
80789
|
-
.add("format", {
|
|
80819
|
+
.add("format", {
|
|
80820
|
+
name: _t("Format"),
|
|
80821
|
+
sequence: 50,
|
|
80822
|
+
isReadonlyAllowed: true,
|
|
80823
|
+
})
|
|
80790
80824
|
.addChild("format_number", ["format"], {
|
|
80791
80825
|
...formatNumberMenuItemSpec,
|
|
80792
80826
|
name: _t("Number"),
|
|
@@ -80878,6 +80912,7 @@ topbarMenuRegistry
|
|
|
80878
80912
|
.add("data", {
|
|
80879
80913
|
name: _t("Data"),
|
|
80880
80914
|
sequence: 60,
|
|
80915
|
+
isReadonlyAllowed: true,
|
|
80881
80916
|
})
|
|
80882
80917
|
.addChild("sort_range", ["data"], {
|
|
80883
80918
|
...sortRange,
|
|
@@ -81970,6 +82005,10 @@ class SpreadsheetDashboard extends Component {
|
|
|
81970
82005
|
useTouchScroll(this.gridRef, this.moveCanvas.bind(this), () => {
|
|
81971
82006
|
const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
|
|
81972
82007
|
return scrollY > 0;
|
|
82008
|
+
}, () => {
|
|
82009
|
+
const { maxOffsetY } = this.env.model.getters.getMaximumSheetOffset();
|
|
82010
|
+
const { scrollY } = this.env.model.getters.getActiveSheetScrollInfo();
|
|
82011
|
+
return scrollY < maxOffsetY;
|
|
81973
82012
|
});
|
|
81974
82013
|
}
|
|
81975
82014
|
get gridContainer() {
|
|
@@ -84014,7 +84053,7 @@ css /* scss */ `
|
|
|
84014
84053
|
border-radius: 4px;
|
|
84015
84054
|
font-weight: 500;
|
|
84016
84055
|
font-size: 14px;
|
|
84017
|
-
height: 32px;
|
|
84056
|
+
min-height: 32px;
|
|
84018
84057
|
line-height: 16px;
|
|
84019
84058
|
flex-grow: 1;
|
|
84020
84059
|
background-color: ${BUTTON_BG};
|
|
@@ -88917,6 +88956,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
|
|
|
88917
88956
|
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, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
|
|
88918
88957
|
|
|
88919
88958
|
|
|
88920
|
-
__info__.version = "19.0.
|
|
88921
|
-
__info__.date = "2025-11-
|
|
88922
|
-
__info__.hash = "
|
|
88959
|
+
__info__.version = "19.0.11";
|
|
88960
|
+
__info__.date = "2025-11-24T07:46:47.685Z";
|
|
88961
|
+
__info__.hash = "f5bdbcc";
|