@odoo/o-spreadsheet 19.0.3 → 19.0.5
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 +102 -93
- package/dist/o-spreadsheet.d.ts +208 -152
- package/dist/o-spreadsheet.esm.js +102 -93
- package/dist/o-spreadsheet.iife.js +102 -93
- package/dist/o-spreadsheet.iife.min.js +216 -224
- package/dist/o_spreadsheet.xml +57 -17
- 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 19.0.
|
|
6
|
-
* @date 2025-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.0.5
|
|
6
|
+
* @date 2025-10-07T10:04:06.400Z
|
|
7
|
+
* @hash 86fc442
|
|
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';
|
|
@@ -1382,9 +1382,7 @@ function removeIndexesFromArray(array, indexes) {
|
|
|
1382
1382
|
return newArray;
|
|
1383
1383
|
}
|
|
1384
1384
|
function insertItemsAtIndex(array, items, index) {
|
|
1385
|
-
|
|
1386
|
-
newArray.splice(index, 0, ...items);
|
|
1387
|
-
return newArray;
|
|
1385
|
+
return array.slice(0, index).concat(items).concat(array.slice(index));
|
|
1388
1386
|
}
|
|
1389
1387
|
function replaceItemAtIndex(array, newItem, index) {
|
|
1390
1388
|
const newArray = [...array];
|
|
@@ -5634,7 +5632,7 @@ function tokensToTextInternalFormat(tokens) {
|
|
|
5634
5632
|
* Replace in place tokens "mm" and "m" that denote minutes in date format with "MM" to avoid confusion with months.
|
|
5635
5633
|
*
|
|
5636
5634
|
* As per OpenXML specification, in date formats if a date token "m" or "mm" is followed by a date token "s" or
|
|
5637
|
-
* preceded by a data token "h", then it's not a month but
|
|
5635
|
+
* preceded by a data token "h", then it's not a month but a minute.
|
|
5638
5636
|
*/
|
|
5639
5637
|
function convertTokensToMinutesInDateFormat(tokens) {
|
|
5640
5638
|
const dateParts = tokens.filter((token) => token.type === "DATE_PART");
|
|
@@ -5677,6 +5675,9 @@ function internalFormatPartToFormat(internalFormat) {
|
|
|
5677
5675
|
case "REPEATED_CHAR":
|
|
5678
5676
|
format += "*" + token.value;
|
|
5679
5677
|
break;
|
|
5678
|
+
case "DATE_PART":
|
|
5679
|
+
format += token.value === "MM" ? "mm" : token.value; // Convert "MM" back to "mm" for minutes
|
|
5680
|
+
break;
|
|
5680
5681
|
default:
|
|
5681
5682
|
format += token.value;
|
|
5682
5683
|
}
|
|
@@ -24852,6 +24853,7 @@ class ScorecardChart extends Component {
|
|
|
24852
24853
|
static template = "o-spreadsheet-ScorecardChart";
|
|
24853
24854
|
static props = {
|
|
24854
24855
|
chartId: String,
|
|
24856
|
+
isFullScreen: { type: Boolean, optional: true },
|
|
24855
24857
|
};
|
|
24856
24858
|
canvas = useRef("chartContainer");
|
|
24857
24859
|
get runtime() {
|
|
@@ -26771,7 +26773,7 @@ function getRadarChartScales(definition, args) {
|
|
|
26771
26773
|
},
|
|
26772
26774
|
pointLabels: {
|
|
26773
26775
|
color: chartFontColor(definition.background),
|
|
26774
|
-
callback: truncateLabel,
|
|
26776
|
+
callback: (label) => truncateLabel(label),
|
|
26775
26777
|
},
|
|
26776
26778
|
suggestedMin: minValue < 0 ? minValue - 1 : 0,
|
|
26777
26779
|
},
|
|
@@ -27615,26 +27617,6 @@ function createBarChartRuntime(chart, getters) {
|
|
|
27615
27617
|
return { chartJsConfig: config, background: chart.background || BACKGROUND_CHART_COLOR };
|
|
27616
27618
|
}
|
|
27617
27619
|
|
|
27618
|
-
class FullScreenChartStore extends SpreadsheetStore {
|
|
27619
|
-
mutators = ["toggleFullScreenChart"];
|
|
27620
|
-
fullScreenFigure = undefined;
|
|
27621
|
-
toggleFullScreenChart(figureId) {
|
|
27622
|
-
if (this.fullScreenFigure?.id === figureId) {
|
|
27623
|
-
this.fullScreenFigure = undefined;
|
|
27624
|
-
}
|
|
27625
|
-
else {
|
|
27626
|
-
this.makeFullScreen(figureId);
|
|
27627
|
-
}
|
|
27628
|
-
}
|
|
27629
|
-
makeFullScreen(figureId) {
|
|
27630
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
27631
|
-
const figure = this.getters.getFigure(sheetId, figureId);
|
|
27632
|
-
if (figure) {
|
|
27633
|
-
this.fullScreenFigure = { ...figure, x: 0, y: 0, width: 0, height: 0 };
|
|
27634
|
-
}
|
|
27635
|
-
}
|
|
27636
|
-
}
|
|
27637
|
-
|
|
27638
27620
|
const TREND_LINE_AXES_IDS = [TREND_LINE_XAXIS_ID, MOVING_AVERAGE_TREND_LINE_XAXIS_ID];
|
|
27639
27621
|
const ZOOMABLE_AXIS_IDS = ["x", ...TREND_LINE_AXES_IDS];
|
|
27640
27622
|
class ZoomableChartStore extends SpreadsheetStore {
|
|
@@ -27806,7 +27788,6 @@ chartJsExtensionRegistry.add("zoomWindowPlugin", {
|
|
|
27806
27788
|
class ZoomableChartJsComponent extends ChartJsComponent {
|
|
27807
27789
|
static template = "o-spreadsheet-ZoomableChartJsComponent";
|
|
27808
27790
|
store;
|
|
27809
|
-
fullScreenChartStore;
|
|
27810
27791
|
masterChartCanvas = useRef("masterChartCanvas");
|
|
27811
27792
|
masterChart;
|
|
27812
27793
|
mode;
|
|
@@ -27817,7 +27798,6 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
27817
27798
|
removeEventListeners = () => { };
|
|
27818
27799
|
setup() {
|
|
27819
27800
|
this.store = useStore(ZoomableChartStore);
|
|
27820
|
-
this.fullScreenChartStore = useStore(FullScreenChartStore);
|
|
27821
27801
|
super.setup();
|
|
27822
27802
|
}
|
|
27823
27803
|
unmount() {
|
|
@@ -27832,12 +27812,8 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
27832
27812
|
`;
|
|
27833
27813
|
}
|
|
27834
27814
|
get sliceable() {
|
|
27835
|
-
if (this.
|
|
27836
|
-
|
|
27837
|
-
const chartFigureId = this.env.model.getters.getFigureIdFromChartId(this.props.chartId);
|
|
27838
|
-
if (fullScreenFigureId === chartFigureId) {
|
|
27839
|
-
return true;
|
|
27840
|
-
}
|
|
27815
|
+
if (this.props.isFullScreen) {
|
|
27816
|
+
return true;
|
|
27841
27817
|
}
|
|
27842
27818
|
const definition = this.env.model.getters.getChartDefinition(this.props.chartId);
|
|
27843
27819
|
return ("zoomable" in definition && definition?.zoomable) ?? false;
|
|
@@ -27900,9 +27876,6 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
27900
27876
|
const xMax = Math.max(...xValues);
|
|
27901
27877
|
return { xMin, xMax };
|
|
27902
27878
|
}
|
|
27903
|
-
get shouldAnimate() {
|
|
27904
|
-
return this.env.model.getters.isDashboard() && !this.sliceable;
|
|
27905
|
-
}
|
|
27906
27879
|
createChart(chartRuntime) {
|
|
27907
27880
|
const chartData = chartRuntime.chartJsConfig;
|
|
27908
27881
|
this.isBarChart = chartData.type === "bar";
|
|
@@ -27921,6 +27894,9 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
27921
27894
|
const masterChartCtx = this.masterChartCanvas.el.getContext("2d");
|
|
27922
27895
|
this.masterChart = new window.Chart(masterChartCtx, this.getMasterChartConfiguration(chartRuntime["masterChartConfig"]));
|
|
27923
27896
|
this.resetAxesLimits();
|
|
27897
|
+
if (this.chart?.options) {
|
|
27898
|
+
this.chart.options.animation = false;
|
|
27899
|
+
}
|
|
27924
27900
|
}
|
|
27925
27901
|
updateChartJs(chartRuntime) {
|
|
27926
27902
|
const chartData = chartRuntime.chartJsConfig;
|
|
@@ -27954,6 +27930,9 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
27954
27930
|
}
|
|
27955
27931
|
}
|
|
27956
27932
|
this.resetAxesLimits();
|
|
27933
|
+
if (this.chart?.options) {
|
|
27934
|
+
this.chart.options.animation = false;
|
|
27935
|
+
}
|
|
27957
27936
|
}
|
|
27958
27937
|
resetAxesLimits() {
|
|
27959
27938
|
if (!this.chart) {
|
|
@@ -28051,7 +28030,7 @@ class ZoomableChartJsComponent extends ChartJsComponent {
|
|
|
28051
28030
|
onPointerDownInMasterChart(ev) {
|
|
28052
28031
|
this.removeEventListeners();
|
|
28053
28032
|
const position = ev.offsetX;
|
|
28054
|
-
if (!this.masterChart?.chartArea || !this.chart?.scales
|
|
28033
|
+
if (!this.masterChart?.chartArea || !this.chart?.scales?.x) {
|
|
28055
28034
|
return;
|
|
28056
28035
|
}
|
|
28057
28036
|
const { left, right, top, bottom } = this.masterChart.chartArea;
|
|
@@ -31609,6 +31588,26 @@ function getCarouselItemTitle(getters, item) {
|
|
|
31609
31588
|
return matchedChart.displayName;
|
|
31610
31589
|
}
|
|
31611
31590
|
|
|
31591
|
+
class FullScreenFigureStore extends SpreadsheetStore {
|
|
31592
|
+
mutators = ["toggleFullScreenFigure"];
|
|
31593
|
+
fullScreenFigure = undefined;
|
|
31594
|
+
toggleFullScreenFigure(figureId) {
|
|
31595
|
+
if (this.fullScreenFigure?.id === figureId) {
|
|
31596
|
+
this.fullScreenFigure = undefined;
|
|
31597
|
+
}
|
|
31598
|
+
else {
|
|
31599
|
+
this.makeFullScreen(figureId);
|
|
31600
|
+
}
|
|
31601
|
+
}
|
|
31602
|
+
makeFullScreen(figureId) {
|
|
31603
|
+
const sheetId = this.getters.getActiveSheetId();
|
|
31604
|
+
const figure = this.getters.getFigure(sheetId, figureId);
|
|
31605
|
+
if (figure) {
|
|
31606
|
+
this.fullScreenFigure = { ...figure, x: 0, y: 0, width: 0, height: 0 };
|
|
31607
|
+
}
|
|
31608
|
+
}
|
|
31609
|
+
}
|
|
31610
|
+
|
|
31612
31611
|
/**
|
|
31613
31612
|
* Repeatedly calls a callback function with a time delay between calls.
|
|
31614
31613
|
*/
|
|
@@ -32346,12 +32345,13 @@ class MenuPopover extends Component {
|
|
|
32346
32345
|
class ChartDashboardMenu extends Component {
|
|
32347
32346
|
static template = "o-spreadsheet-ChartDashboardMenu";
|
|
32348
32347
|
static components = { MenuPopover };
|
|
32349
|
-
static props = { chartId: String };
|
|
32348
|
+
static props = { chartId: String, hasFullScreenButton: { type: Boolean, optional: true } };
|
|
32349
|
+
static defaultProps = { hasFullScreenButton: true };
|
|
32350
32350
|
fullScreenFigureStore;
|
|
32351
32351
|
menuState = useState({ isOpen: false, anchorRect: null, menuItems: [] });
|
|
32352
32352
|
setup() {
|
|
32353
32353
|
super.setup();
|
|
32354
|
-
this.fullScreenFigureStore = useStore(
|
|
32354
|
+
this.fullScreenFigureStore = useStore(FullScreenFigureStore);
|
|
32355
32355
|
}
|
|
32356
32356
|
getMenuItems() {
|
|
32357
32357
|
return [this.fullScreenMenuItem].filter(isDefined);
|
|
@@ -32367,6 +32367,9 @@ class ChartDashboardMenu extends Component {
|
|
|
32367
32367
|
this.menuState.menuItems = getChartMenuActions(figureId, () => { }, this.env);
|
|
32368
32368
|
}
|
|
32369
32369
|
get fullScreenMenuItem() {
|
|
32370
|
+
if (!this.props.hasFullScreenButton) {
|
|
32371
|
+
return undefined;
|
|
32372
|
+
}
|
|
32370
32373
|
const definition = this.env.model.getters.getChartDefinition(this.props.chartId);
|
|
32371
32374
|
const figureId = this.env.model.getters.getFigureIdFromChartId(this.props.chartId);
|
|
32372
32375
|
if (definition.type === "scorecard") {
|
|
@@ -32378,7 +32381,7 @@ class ChartDashboardMenu extends Component {
|
|
|
32378
32381
|
label: isFullScreen ? _t("Exit Full Screen") : _t("Full Screen"),
|
|
32379
32382
|
class: `text-muted fa ${isFullScreen ? "fa-compress" : "fa-expand"}`,
|
|
32380
32383
|
onClick: () => {
|
|
32381
|
-
this.fullScreenFigureStore.
|
|
32384
|
+
this.fullScreenFigureStore.toggleFullScreenFigure(figureId);
|
|
32382
32385
|
},
|
|
32383
32386
|
};
|
|
32384
32387
|
}
|
|
@@ -32390,6 +32393,7 @@ class CarouselFigure extends Component {
|
|
|
32390
32393
|
figureUI: Object,
|
|
32391
32394
|
onFigureDeleted: Function,
|
|
32392
32395
|
editFigureStyle: { type: Function, optional: true },
|
|
32396
|
+
isFullScreen: { type: Boolean, optional: true },
|
|
32393
32397
|
};
|
|
32394
32398
|
static components = { ChartDashboardMenu, MenuPopover };
|
|
32395
32399
|
carouselTabsRef = useRef("carouselTabs");
|
|
@@ -32397,8 +32401,10 @@ class CarouselFigure extends Component {
|
|
|
32397
32401
|
menuState = useState({ isOpen: false, anchorRect: null, menuItems: [] });
|
|
32398
32402
|
hiddenItems = [];
|
|
32399
32403
|
animationStore;
|
|
32404
|
+
fullScreenFigureStore;
|
|
32400
32405
|
setup() {
|
|
32401
32406
|
this.animationStore = useStore(ChartAnimationStore);
|
|
32407
|
+
this.fullScreenFigureStore = useStore(FullScreenFigureStore);
|
|
32402
32408
|
useEffect(() => {
|
|
32403
32409
|
if (this.selectedCarouselItem?.type === "carouselDataView") {
|
|
32404
32410
|
this.props.editFigureStyle?.({ "pointer-events": "none" });
|
|
@@ -32445,18 +32451,19 @@ class CarouselFigure extends Component {
|
|
|
32445
32451
|
item,
|
|
32446
32452
|
});
|
|
32447
32453
|
if (item.type === "chart") {
|
|
32448
|
-
|
|
32454
|
+
const animationChartId = item.chartId + (this.props.isFullScreen ? "-fullscreen" : "");
|
|
32455
|
+
this.animationStore?.enableAnimationForChart(animationChartId);
|
|
32449
32456
|
}
|
|
32450
32457
|
}
|
|
32451
32458
|
get headerStyle() {
|
|
32452
32459
|
const cssProperties = {};
|
|
32453
|
-
if (this.selectedCarouselItem?.type === "
|
|
32454
|
-
cssProperties["background-color"] = "#ffffff";
|
|
32455
|
-
}
|
|
32456
|
-
else if (this.selectedCarouselItem?.type === "chart") {
|
|
32460
|
+
if (this.selectedCarouselItem?.type === "chart") {
|
|
32457
32461
|
const chart = this.env.model.getters.getChartRuntime(this.selectedCarouselItem.chartId);
|
|
32458
32462
|
cssProperties["background-color"] = chart.background;
|
|
32459
32463
|
}
|
|
32464
|
+
else {
|
|
32465
|
+
cssProperties["background-color"] = "#ffffff";
|
|
32466
|
+
}
|
|
32460
32467
|
return cssPropertiesToCss(cssProperties);
|
|
32461
32468
|
}
|
|
32462
32469
|
get title() {
|
|
@@ -32509,6 +32516,17 @@ class CarouselFigure extends Component {
|
|
|
32509
32516
|
this.menuState.anchorRect = rect;
|
|
32510
32517
|
this.menuState.menuItems = createActions(menuItems);
|
|
32511
32518
|
}
|
|
32519
|
+
toggleFullScreen() {
|
|
32520
|
+
if (this.selectedCarouselItem?.type === "chart") {
|
|
32521
|
+
this.fullScreenFigureStore.toggleFullScreenFigure(this.props.figureUI.id);
|
|
32522
|
+
}
|
|
32523
|
+
}
|
|
32524
|
+
get fullScreenButtonTitle() {
|
|
32525
|
+
return this.props.isFullScreen ? _t("Exit Full Screen") : _t("Full Screen");
|
|
32526
|
+
}
|
|
32527
|
+
get visibleCarouselItems() {
|
|
32528
|
+
return this.carousel.items.filter((item) => item.type === "carouselDataView" && this.props.isFullScreen ? false : true);
|
|
32529
|
+
}
|
|
32512
32530
|
}
|
|
32513
32531
|
|
|
32514
32532
|
class ChartFigure extends Component {
|
|
@@ -32517,6 +32535,7 @@ class ChartFigure extends Component {
|
|
|
32517
32535
|
figureUI: Object,
|
|
32518
32536
|
onFigureDeleted: Function,
|
|
32519
32537
|
editFigureStyle: { type: Function, optional: true },
|
|
32538
|
+
isFullScreen: { type: Boolean, optional: true },
|
|
32520
32539
|
};
|
|
32521
32540
|
static components = { ChartDashboardMenu };
|
|
32522
32541
|
onDoubleClick() {
|
|
@@ -58658,7 +58677,7 @@ class PivotMeasureEditor extends Component {
|
|
|
58658
58677
|
return undefined;
|
|
58659
58678
|
}
|
|
58660
58679
|
get isCalculatedMeasureInvalid() {
|
|
58661
|
-
return
|
|
58680
|
+
return compile(this.props.measure.computedBy?.formula ?? "").isBadExpression;
|
|
58662
58681
|
}
|
|
58663
58682
|
}
|
|
58664
58683
|
|
|
@@ -61536,16 +61555,16 @@ class ClickableCellSortIcon extends Component {
|
|
|
61536
61555
|
}
|
|
61537
61556
|
}
|
|
61538
61557
|
|
|
61539
|
-
class
|
|
61540
|
-
static template = "o-spreadsheet-
|
|
61558
|
+
class FullScreenFigure extends Component {
|
|
61559
|
+
static template = "o-spreadsheet-FullScreenFigure";
|
|
61541
61560
|
static props = {};
|
|
61542
|
-
static components = {
|
|
61543
|
-
|
|
61544
|
-
ref = useRef("
|
|
61561
|
+
static components = { ChartFigure };
|
|
61562
|
+
fullScreenFigureStore;
|
|
61563
|
+
ref = useRef("fullScreenFigure");
|
|
61545
61564
|
spreadsheetRect = useSpreadsheetRect();
|
|
61546
61565
|
figureRegistry = figureRegistry;
|
|
61547
61566
|
setup() {
|
|
61548
|
-
this.
|
|
61567
|
+
this.fullScreenFigureStore = useStore(FullScreenFigureStore);
|
|
61549
61568
|
const animationStore = useStore(ChartAnimationStore);
|
|
61550
61569
|
let lastFigureId = undefined;
|
|
61551
61570
|
onWillUpdateProps(() => {
|
|
@@ -61557,7 +61576,7 @@ class FullScreenChart extends Component {
|
|
|
61557
61576
|
useEffect((el) => el?.focus(), () => [this.ref.el]);
|
|
61558
61577
|
}
|
|
61559
61578
|
get figureUI() {
|
|
61560
|
-
return this.
|
|
61579
|
+
return this.fullScreenFigureStore.fullScreenFigure;
|
|
61561
61580
|
}
|
|
61562
61581
|
get chartId() {
|
|
61563
61582
|
if (!this.figureUI)
|
|
@@ -61566,7 +61585,7 @@ class FullScreenChart extends Component {
|
|
|
61566
61585
|
}
|
|
61567
61586
|
exitFullScreen() {
|
|
61568
61587
|
if (this.figureUI) {
|
|
61569
|
-
this.
|
|
61588
|
+
this.fullScreenFigureStore.toggleFullScreenFigure(this.figureUI.id);
|
|
61570
61589
|
}
|
|
61571
61590
|
}
|
|
61572
61591
|
onKeyDown(ev) {
|
|
@@ -61574,15 +61593,10 @@ class FullScreenChart extends Component {
|
|
|
61574
61593
|
this.exitFullScreen();
|
|
61575
61594
|
}
|
|
61576
61595
|
}
|
|
61577
|
-
get
|
|
61578
|
-
if (!this.
|
|
61596
|
+
get figureComponent() {
|
|
61597
|
+
if (!this.figureUI)
|
|
61579
61598
|
return undefined;
|
|
61580
|
-
|
|
61581
|
-
const component = chartComponentRegistry.get(type);
|
|
61582
|
-
if (!component) {
|
|
61583
|
-
throw new Error(`Component is not defined for type ${type}`);
|
|
61584
|
-
}
|
|
61585
|
-
return component;
|
|
61599
|
+
return figureRegistry.get(this.figureUI.tag).Component;
|
|
61586
61600
|
}
|
|
61587
61601
|
}
|
|
61588
61602
|
|
|
@@ -64322,11 +64336,11 @@ class HeaderSizePlugin extends CorePlugin {
|
|
|
64322
64336
|
break;
|
|
64323
64337
|
}
|
|
64324
64338
|
case "ADD_COLUMNS_ROWS": {
|
|
64325
|
-
const sizes =
|
|
64339
|
+
const sizes = this.sizes[cmd.sheetId][cmd.dimension];
|
|
64326
64340
|
const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
|
|
64327
64341
|
const baseSize = sizes[cmd.base];
|
|
64328
|
-
sizes
|
|
64329
|
-
this.history.update("sizes", cmd.sheetId, cmd.dimension,
|
|
64342
|
+
const newSizes = insertItemsAtIndex(sizes, Array(cmd.quantity).fill(baseSize), addIndex);
|
|
64343
|
+
this.history.update("sizes", cmd.sheetId, cmd.dimension, newSizes);
|
|
64330
64344
|
break;
|
|
64331
64345
|
}
|
|
64332
64346
|
case "RESIZE_COLUMNS_ROWS":
|
|
@@ -64477,9 +64491,8 @@ class HeaderVisibilityPlugin extends CorePlugin {
|
|
|
64477
64491
|
break;
|
|
64478
64492
|
}
|
|
64479
64493
|
case "ADD_COLUMNS_ROWS": {
|
|
64480
|
-
const hiddenHeaders = [...this.hiddenHeaders[cmd.sheetId][cmd.dimension]];
|
|
64481
64494
|
const addIndex = getAddHeaderStartIndex(cmd.position, cmd.base);
|
|
64482
|
-
hiddenHeaders.
|
|
64495
|
+
const hiddenHeaders = insertItemsAtIndex([...this.hiddenHeaders[cmd.sheetId][cmd.dimension]], Array(cmd.quantity).fill(false), addIndex);
|
|
64483
64496
|
this.history.update("hiddenHeaders", cmd.sheetId, cmd.dimension, hiddenHeaders);
|
|
64484
64497
|
break;
|
|
64485
64498
|
}
|
|
@@ -68663,12 +68676,12 @@ class SpreadsheetRTree {
|
|
|
68663
68676
|
this.rTrees[sheetId].remove(item, this.rtreeItemComparer);
|
|
68664
68677
|
}
|
|
68665
68678
|
rtreeItemComparer(left, right) {
|
|
68666
|
-
return (left.
|
|
68667
|
-
left.boundingBox.sheetId === right.boundingBox.sheetId &&
|
|
68679
|
+
return (left.boundingBox.sheetId === right.boundingBox.sheetId &&
|
|
68668
68680
|
left.boundingBox?.zone.left === right.boundingBox.zone.left &&
|
|
68669
68681
|
left.boundingBox?.zone.top === right.boundingBox.zone.top &&
|
|
68670
68682
|
left.boundingBox?.zone.right === right.boundingBox.zone.right &&
|
|
68671
|
-
left.boundingBox?.zone.bottom === right.boundingBox.zone.bottom
|
|
68683
|
+
left.boundingBox?.zone.bottom === right.boundingBox.zone.bottom &&
|
|
68684
|
+
deepEquals(left.data, right.data));
|
|
68672
68685
|
}
|
|
68673
68686
|
}
|
|
68674
68687
|
/**
|
|
@@ -74923,7 +74936,10 @@ class SortPlugin extends UIPlugin {
|
|
|
74923
74936
|
return "Success" /* CommandResult.Success */;
|
|
74924
74937
|
}
|
|
74925
74938
|
checkArrayFormulaInSortZone({ sheetId, zone }) {
|
|
74926
|
-
const arrayFormulaInZone = positions(zone).some(({ col, row }) =>
|
|
74939
|
+
const arrayFormulaInZone = positions(zone).some(({ col, row }) => {
|
|
74940
|
+
const originPosition = this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row });
|
|
74941
|
+
return originPosition && !deepEquals(originPosition, { sheetId, col, row });
|
|
74942
|
+
});
|
|
74927
74943
|
return arrayFormulaInZone ? "SortZoneWithArrayFormulas" /* CommandResult.SortZoneWithArrayFormulas */ : "Success" /* CommandResult.Success */;
|
|
74928
74944
|
}
|
|
74929
74945
|
/**
|
|
@@ -82215,6 +82231,9 @@ class SmallBottomBar extends Component {
|
|
|
82215
82231
|
? this.composerFocusStore.focusMode
|
|
82216
82232
|
: "inactive";
|
|
82217
82233
|
}
|
|
82234
|
+
get showFxIcon() {
|
|
82235
|
+
return this.focus === "inactive" && !this.composerStore.currentContent;
|
|
82236
|
+
}
|
|
82218
82237
|
get rect() {
|
|
82219
82238
|
return this.composerRef.el
|
|
82220
82239
|
? getBoundingRectAsPOJO(this.composerRef.el)
|
|
@@ -82257,12 +82276,6 @@ class SmallBottomBar extends Component {
|
|
|
82257
82276
|
}
|
|
82258
82277
|
|
|
82259
82278
|
const COMPOSER_MAX_HEIGHT = 300;
|
|
82260
|
-
/* svg free of use from https://uxwing.com/formula-fx-icon/ */
|
|
82261
|
-
const FX_SVG = /*xml*/ `
|
|
82262
|
-
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
|
|
82263
|
-
<path d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='#BDBDBD'/>
|
|
82264
|
-
</svg>
|
|
82265
|
-
`;
|
|
82266
82279
|
css /* scss */ `
|
|
82267
82280
|
.o-topbar-composer-container {
|
|
82268
82281
|
height: ${DESKTOP_TOPBAR_TOOLBAR_HEIGHT}px;
|
|
@@ -82274,14 +82287,6 @@ css /* scss */ `
|
|
|
82274
82287
|
margin-bottom: -1px;
|
|
82275
82288
|
border: 1px solid;
|
|
82276
82289
|
font-family: ${DEFAULT_FONT};
|
|
82277
|
-
|
|
82278
|
-
/* In readonly we always show the fx icon if the composer is empty, not matter the focus */
|
|
82279
|
-
.o-composer:empty:not(:focus):not(.active)::before,
|
|
82280
|
-
&.o-topbar-composer-readonly .o-composer:empty::before {
|
|
82281
|
-
content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
|
|
82282
|
-
position: relative;
|
|
82283
|
-
top: 20%;
|
|
82284
|
-
}
|
|
82285
82290
|
}
|
|
82286
82291
|
|
|
82287
82292
|
.user-select-text {
|
|
@@ -82314,6 +82319,9 @@ class TopBarComposer extends Component {
|
|
|
82314
82319
|
? this.composerFocusStore.focusMode
|
|
82315
82320
|
: "inactive";
|
|
82316
82321
|
}
|
|
82322
|
+
get showFxIcon() {
|
|
82323
|
+
return this.focus === "inactive" && !this.composerStore.currentContent;
|
|
82324
|
+
}
|
|
82317
82325
|
get composerStyle() {
|
|
82318
82326
|
const style = {
|
|
82319
82327
|
padding: "5px 0px 5px 8px",
|
|
@@ -83665,7 +83673,7 @@ class Spreadsheet extends Component {
|
|
|
83665
83673
|
SidePanels,
|
|
83666
83674
|
SpreadsheetDashboard,
|
|
83667
83675
|
HeaderGroupContainer,
|
|
83668
|
-
|
|
83676
|
+
FullScreenFigure,
|
|
83669
83677
|
};
|
|
83670
83678
|
sidePanel;
|
|
83671
83679
|
spreadsheetRef = useRef("spreadsheet");
|
|
@@ -88389,6 +88397,7 @@ const components = {
|
|
|
88389
88397
|
Grid,
|
|
88390
88398
|
GridOverlay,
|
|
88391
88399
|
ScorecardChart,
|
|
88400
|
+
GaugeChartComponent,
|
|
88392
88401
|
LineConfigPanel,
|
|
88393
88402
|
BarConfigPanel,
|
|
88394
88403
|
PieChartDesignPanel,
|
|
@@ -88427,7 +88436,7 @@ const components = {
|
|
|
88427
88436
|
RadioSelection,
|
|
88428
88437
|
GeoChartRegionSelectSection,
|
|
88429
88438
|
ChartDashboardMenu,
|
|
88430
|
-
|
|
88439
|
+
FullScreenFigure,
|
|
88431
88440
|
};
|
|
88432
88441
|
const hooks = {
|
|
88433
88442
|
useDragAndDropListItems,
|
|
@@ -88477,6 +88486,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
|
|
|
88477
88486
|
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 };
|
|
88478
88487
|
|
|
88479
88488
|
|
|
88480
|
-
__info__.version = "19.0.
|
|
88481
|
-
__info__.date = "2025-
|
|
88482
|
-
__info__.hash = "
|
|
88489
|
+
__info__.version = "19.0.5";
|
|
88490
|
+
__info__.date = "2025-10-07T10:04:06.400Z";
|
|
88491
|
+
__info__.hash = "86fc442";
|