@odoo/o-spreadsheet 19.4.6 → 19.4.8

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.
@@ -1,9 +1,9 @@
1
1
  <!--
2
2
  This file is generated by o-spreadsheet build tools. Do not edit it.
3
3
  @see https://github.com/odoo/o-spreadsheet
4
- @version 19.4.6
5
- @date 2026-08-10T12:33:33.568Z
6
- @hash 5c667fe
4
+ @version 19.4.8
5
+ @date 2026-08-19T09:25:14.798Z
6
+ @hash 9dd828e
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -7719,14 +7719,15 @@
7719
7719
 
7720
7720
  <t t-name="o-spreadsheet-ImageFigure">
7721
7721
  <img t-att-src="this.getImagePath" class="w-100 h-100"/>
7722
- <div class="o-figure-menu position-absolute m-2" t-if="this.shouldShowMenuButton">
7722
+ <div
7723
+ class="o-figure-menu position-absolute m-2 align-items-center"
7724
+ t-if="this.shouldShowMenuButton">
7723
7725
  <div
7724
- class="o-figure-menu-item d-flex-align-items-center"
7726
+ class="o-figure-menu-item btn fa fa-ellipsis-v rounded p-1"
7725
7727
  t-on-click="this.showMenu"
7726
7728
  t-ref="this.menuButtonRef"
7727
- t-on-contextmenu.prevent.stop="this.showMenu">
7728
- <t t-call="o-spreadsheet-Icon.LIST"/>
7729
- </div>
7729
+ t-on-contextmenu.prevent.stop="this.showMenu"
7730
+ />
7730
7731
  </div>
7731
7732
  </t>
7732
7733
 
@@ -7882,8 +7883,8 @@
7882
7883
 
7883
7884
  <t t-name="o-spreadsheet-FigureComponent">
7884
7885
  <div
7885
- class="o-figure-wrapper os-theme-dependant"
7886
- t-att-class="{'o-figure-selected': this.isSelected}"
7886
+ class="o-figure-wrapper"
7887
+ t-att-class="{'o-figure-selected': this.isSelected, 'os-theme-dependant': this.isThemeDependant}"
7887
7888
  t-att-style="this.wrapperStyle"
7888
7889
  t-ref="this.figureWrapperRef">
7889
7890
  <div
@@ -7998,7 +7999,7 @@
7998
7999
  <t t-name="o-spreadsheet-ChartMenu">
7999
8000
  <div class="o-chart-menu position-absolute top-0 end-0" t-on-click.stop="">
8000
8001
  <div class="d-flex align-items-center gap-1 p-1 rounded" t-att-style="backgroundColor">
8001
- <t t-if="this.regionOptions.length > 1">
8002
+ <t t-if="this.env.model.getters.isDashboard() and this.regionOptions.length > 1">
8002
8003
  <Select
8003
8004
  class="'o-chart-menu-item w-auto py-0 px-1 text-muted text-nowrap rounded border-0'"
8004
8005
  popoverClass="'w-auto'"
@@ -22,6 +22,7 @@ export declare class FigureComponent extends Component<SpreadsheetChildEnv> {
22
22
  private figureWrapperRef;
23
23
  private borderWidth;
24
24
  get isSelected(): boolean;
25
+ get isThemeDependant(): boolean;
25
26
  get figureRegistry(): import("../../..").Registry<import("../../../registries/figures_registry").FigureContent>;
26
27
  private getBorderWidth;
27
28
  getBorderStyle(position: "top" | "right" | "bottom" | "left"): string;
@@ -9,3 +9,6 @@ export declare class FunctionRegistry extends Registry<FunctionDescription> {
9
9
  replace(name: string, addDescr: AddFunctionDescription): this;
10
10
  }
11
11
  export declare const functionRegistry: FunctionRegistry;
12
+ /** Formulas using one of these functions are never squished: they are always exported
13
+ * as a full formula string, and they don't become the base formula of the next cells. */
14
+ export declare const NonSquishableFunctionRegistry: Registry<string>;
@@ -17,6 +17,10 @@ export declare function strictToNumber(data: FunctionResultObject | CellValue |
17
17
  export declare function toInteger(value: FunctionResultObject | CellValue | undefined, locale: Locale): number;
18
18
  export declare function strictToInteger(value: FunctionResultObject | CellValue | undefined, locale: Locale): number;
19
19
  export declare function toString(data: FunctionResultObject | CellValue | undefined): string;
20
+ /**
21
+ * Only converts the decimal separator, ignore number format such as % or dates
22
+ */
23
+ export declare function toLocaleString(data: FunctionResultObject | CellValue | undefined, locale: Locale): string;
20
24
  /**
21
25
  * Normalize range by setting all the string in the range to lowercase and replacing
22
26
  * accent letters with plain letters
@@ -8,7 +8,7 @@ export declare const ADD: {
8
8
  export declare const CONCAT: {
9
9
  description: string;
10
10
  args: import("..").ArgDefinition[];
11
- compute: (value1: Maybe<FunctionResultObject>, value2: Maybe<FunctionResultObject>) => string;
11
+ compute: (this: import("..").EvalContext, value1: Maybe<FunctionResultObject>, value2: Maybe<FunctionResultObject>) => string;
12
12
  isExported: true;
13
13
  };
14
14
  export declare const DIVIDE: {
@@ -9,19 +9,19 @@ export declare const CHAR: {
9
9
  export declare const CLEAN: {
10
10
  description: string;
11
11
  args: import("..").ArgDefinition[];
12
- compute: (text: Maybe<FunctionResultObject>) => string;
12
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => string;
13
13
  isExported: true;
14
14
  };
15
15
  export declare const CONCATENATE: {
16
16
  description: string;
17
17
  args: import("..").ArgDefinition[];
18
- compute: (...datas: Arg[]) => string;
18
+ compute: (this: import("..").EvalContext, ...datas: Arg[]) => string;
19
19
  isExported: true;
20
20
  };
21
21
  export declare const EXACT: {
22
22
  description: string;
23
23
  args: import("..").ArgDefinition[];
24
- compute: (string1: Maybe<FunctionResultObject>, string2: Maybe<FunctionResultObject>) => boolean;
24
+ compute: (this: import("..").EvalContext, string1: Maybe<FunctionResultObject>, string2: Maybe<FunctionResultObject>) => boolean;
25
25
  isExported: true;
26
26
  };
27
27
  export declare const FIND: {
@@ -38,7 +38,7 @@ export declare const FORMAT_LARGE_NUMBER: {
38
38
  export declare const JOIN: {
39
39
  description: string;
40
40
  args: import("..").ArgDefinition[];
41
- compute: (delimiter: Maybe<FunctionResultObject>, ...valuesOrArrays: Arg[]) => string;
41
+ compute: (this: import("..").EvalContext, delimiter: Maybe<FunctionResultObject>, ...valuesOrArrays: Arg[]) => string;
42
42
  };
43
43
  export declare const LEFT: {
44
44
  description: string;
@@ -49,13 +49,13 @@ export declare const LEFT: {
49
49
  export declare const LEN: {
50
50
  description: string;
51
51
  args: import("..").ArgDefinition[];
52
- compute: (text: Maybe<FunctionResultObject>) => number;
52
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => number;
53
53
  isExported: true;
54
54
  };
55
55
  export declare const LOWER: {
56
56
  description: string;
57
57
  args: import("..").ArgDefinition[];
58
- compute: (text: Maybe<FunctionResultObject>) => string;
58
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => string;
59
59
  isExported: true;
60
60
  };
61
61
  export declare const MID: {
@@ -67,7 +67,7 @@ export declare const MID: {
67
67
  export declare const PROPER: {
68
68
  description: string;
69
69
  args: import("..").ArgDefinition[];
70
- compute: (text: Maybe<FunctionResultObject>) => string;
70
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => string;
71
71
  isExported: true;
72
72
  };
73
73
  export declare const REGEXTEST: {
@@ -117,7 +117,7 @@ export declare const SEARCH: {
117
117
  export declare const SPLIT: {
118
118
  description: string;
119
119
  args: import("..").ArgDefinition[];
120
- compute: (text: Maybe<FunctionResultObject>, delimiter: Maybe<FunctionResultObject>, splitByEach?: Maybe<FunctionResultObject>, removeEmptyText?: Maybe<FunctionResultObject>) => EvaluationError | import("..").Matrix<string>;
120
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>, delimiter: Maybe<FunctionResultObject>, splitByEach?: Maybe<FunctionResultObject>, removeEmptyText?: Maybe<FunctionResultObject>) => EvaluationError | import("..").Matrix<string>;
121
121
  isExported: false;
122
122
  };
123
123
  export declare const SUBSTITUTE: {
@@ -129,7 +129,7 @@ export declare const SUBSTITUTE: {
129
129
  export declare const TEXTJOIN: {
130
130
  description: string;
131
131
  args: import("..").ArgDefinition[];
132
- compute: (delimiter: Maybe<FunctionResultObject>, ignoreEmpty?: Maybe<FunctionResultObject>, ...textsOrArrays: Arg[]) => string;
132
+ compute: (this: import("..").EvalContext, delimiter: Maybe<FunctionResultObject>, ignoreEmpty?: Maybe<FunctionResultObject>, ...textsOrArrays: Arg[]) => string;
133
133
  isExported: true;
134
134
  };
135
135
  export declare const TEXTSPLIT: {
@@ -141,13 +141,13 @@ export declare const TEXTSPLIT: {
141
141
  export declare const TRIM: {
142
142
  description: string;
143
143
  args: import("..").ArgDefinition[];
144
- compute: (text: Maybe<FunctionResultObject>) => string;
144
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => string;
145
145
  isExported: true;
146
146
  };
147
147
  export declare const UPPER: {
148
148
  description: string;
149
149
  args: import("..").ArgDefinition[];
150
- compute: (text: Maybe<FunctionResultObject>) => string;
150
+ compute: (this: import("..").EvalContext, text: Maybe<FunctionResultObject>) => string;
151
151
  isExported: true;
152
152
  };
153
153
  export declare const TEXT: {
@@ -2,6 +2,6 @@ import { FunctionResultObject, Maybe } from "../types/misc";
2
2
  export declare const HYPERLINK: {
3
3
  description: string;
4
4
  args: import("..").ArgDefinition[];
5
- compute: (url: Maybe<FunctionResultObject>, linkLabel: Maybe<FunctionResultObject>) => string;
5
+ compute: (this: import("..").EvalContext, url: Maybe<FunctionResultObject>, linkLabel: Maybe<FunctionResultObject>) => string;
6
6
  isExported: true;
7
7
  };
@@ -219,6 +219,7 @@ export declare const registries: {
219
219
  getKeys(): string[];
220
220
  remove(key: string): void;
221
221
  };
222
+ NonSquishableFunctionRegistry: import(".").Registry<string>;
222
223
  };
223
224
  /** Registries Population */
224
225
  import "./clipboard_handlers/clipboard_handler_registrations";
@@ -424,7 +425,7 @@ export declare const stores: {
424
425
  };
425
426
  export { getCaretDownSvg, getCaretUpSvg } from "./components/icons/icons";
426
427
  export { createAutocompleteArgumentsProvider } from "./functions/autocomplete_arguments_provider";
427
- export type { FunctionRegistry } from "./functions/function_registry";
428
+ export type { FunctionRegistry, NonSquishableFunctionRegistry, } from "./functions/function_registry";
428
429
  export { categories } from "./functions/function_registry_population";
429
430
  export type { StoreConstructor, StoreParams } from "./types/store_engine";
430
431
  export declare function addFunction(functionName: string, functionDescription: AddFunctionDescription): {
@@ -47,7 +47,8 @@ export declare class Squisher {
47
47
  * The result of this method is:
48
48
  * - if the cell is not a formula, returns the content as is and resets the base formula
49
49
  * - if the cell is a formula:
50
- * - if there is no previous formula, or the normalized formula is different from the previous one, resets the base formula to this one and returns the full formula string
50
+ * - if there is no previous formula, or the normalized formula is different from the previous one or it contains blacklisted functions (see NonSquishableFunctionRegistry),
51
+ * resets the base formula to this one and returns the full formula string
51
52
  * - else, compares the literal values and range dependencies to the previous formula, and for each parameter:
52
53
  * - for numbers: returns a relative change (+N or -N) if possible, else the full number or "=" if unchanged
53
54
  * - for strings: returns the full string if changed, else "="
@@ -11,6 +11,7 @@ import { Registry } from "./registry";
11
11
  export interface FigureContent {
12
12
  Component: any;
13
13
  menuBuilder: (figureId: UID, env: SpreadsheetChildEnv) => Action[];
14
+ isThemeDependant: boolean;
14
15
  SidePanelComponent?: string;
15
16
  keepRatio?: boolean;
16
17
  minFigSize?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "19.4.6",
3
+ "version": "19.4.8",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o_spreadsheet.cjs",