@odoo/o-spreadsheet 19.4.2 → 19.4.4

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.2
5
- @date 2026-07-13T06:26:40.072Z
6
- @hash c83d4aa
4
+ @version 19.4.4
5
+ @date 2026-07-23T07:49:23.288Z
6
+ @hash 6b3c312
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -7451,10 +7451,7 @@
7451
7451
  />
7452
7452
  <canvas t-ref="this.canvasRef" class="os-theme-dependant pe-none"/>
7453
7453
  <t t-set="focused" t-value="this.focusedClients"/>
7454
- <t
7455
- t-foreach="this.env.model.getters.getClientsToDisplay()"
7456
- t-as="client"
7457
- t-key="this.getClientPositionKey(client)">
7454
+ <t t-foreach="this.clientsToDisplay" t-as="client" t-key="this.getClientPositionKey(client)">
7458
7455
  <ClientTag
7459
7456
  name="client.name"
7460
7457
  color="client.color"
@@ -15,7 +15,7 @@ type ClipboardContent = {
15
15
  };
16
16
  export declare class DefaultClipboardHandler extends AbstractCellClipboardHandler<ClipboardContent, unknown> {
17
17
  copy(data: ClipboardCellData): ClipboardContent | undefined;
18
- clearStyleFormat(sheetId: UID, zone: Zone): void;
18
+ adaptContentToZone(zone: Zone, content: ClipboardContent): ClipboardContent;
19
19
  paste(target: ClipboardPasteTarget, content: ClipboardContent, options: ClipboardOptions): void;
20
20
  /**
21
21
  * Clear the clipped zones: remove the cells and clear the formatting
@@ -120,4 +120,5 @@ export declare class Grid extends Component<SpreadsheetChildEnv> {
120
120
  onComposerContentFocused(): void;
121
121
  get staticTables(): Table[];
122
122
  get displaySelectionHandler(): boolean;
123
+ get clientsToDisplay(): Required<Client>[];
123
124
  }
@@ -133,7 +133,7 @@ export declare const types: {
133
133
  DataValidationCriterionType: () => Type<"containsText" | "notContainsText" | "isEqualText" | "isEmail" | "isLink" | "dateIs" | "dateIsBefore" | "dateIsOnOrBefore" | "dateIsAfter" | "dateIsOnOrAfter" | "dateIsBetween" | "dateIsNotBetween" | "dateIsValid" | "isEqual" | "isNotEqual" | "isGreaterThan" | "isGreaterOrEqualTo" | "isLessThan" | "isLessOrEqualTo" | "isBetween" | "isNotBetween" | "isBoolean" | "isValueInList" | "isValueInRange" | "customFormula">;
134
134
  Dimension: typeof validateDimension;
135
135
  ContextMenuType: typeof validateContextMenuType;
136
- and: <T extends any[]>(types: T) => Type<import("@odoo/owl").UnionToIntersection<import("@odoo/owl").StripBrands<T[number]>>>;
136
+ and: <T extends any[]>(types: T) => import("@odoo/owl").ShapeType<import("@odoo/owl").MergedShape<T>, import("@odoo/owl").UnionToIntersection<import("@odoo/owl").StripBrands<T[number]>>>;
137
137
  any: () => Type<any>;
138
138
  array: {
139
139
  (): Type<any[]>;
@@ -147,10 +147,10 @@ export declare const types: {
147
147
  literal: <const T extends import("@odoo/owl").LiteralTypes>(literal: T) => Type<T>;
148
148
  number: <T extends number = number>() => Type<T>;
149
149
  object: {
150
- (): Type<Record<string, any>>;
151
- <const Keys extends string[]>(keys: Keys): Type<import("@odoo/owl").ResolveOptionalEntries<import("@odoo/owl").KeyedObject<Keys>>>;
152
- <Shape extends {}>(): Type<import("@odoo/owl").ResolveOptionalEntries<Shape>>;
153
- <Shape extends {}>(shape: Shape): Type<import("@odoo/owl").ResolveOptionalEntries<Shape>>;
150
+ (): import("@odoo/owl").ShapeType<Record<string, any>, Record<string, any>>;
151
+ <const Keys extends string[]>(keys: Keys): import("@odoo/owl").ShapeType<Keys, import("@odoo/owl").ResolveOptionalEntries<import("@odoo/owl").KeyedObject<Keys>>>;
152
+ <Shape extends {}>(): import("@odoo/owl").ShapeType<Shape, import("@odoo/owl").ResolveOptionalEntries<Shape>>;
153
+ <Shape extends {}>(shape: Shape): import("@odoo/owl").ShapeType<Shape, import("@odoo/owl").ResolveOptionalEntries<Shape>>;
154
154
  };
155
155
  or: <T extends unknown[]>(types: T) => Type<import("@odoo/owl").StripBrands<T[number]>>;
156
156
  promise: {
@@ -172,8 +172,8 @@ export declare const types: {
172
172
  <T>(type: T): Type<import("@odoo/owl").ReactiveValue<import("@odoo/owl").StripBrands<T>>>;
173
173
  };
174
174
  strictObject: {
175
- <const Keys extends string[]>(keys: Keys): Type<import("@odoo/owl").ResolveOptionalEntries<import("@odoo/owl").KeyedObject<Keys>>>;
176
- <Shape extends {}>(shape: Shape): Type<import("@odoo/owl").ResolveOptionalEntries<Shape>>;
175
+ <const Keys extends string[]>(keys: Keys): import("@odoo/owl").ShapeType<Keys, import("@odoo/owl").ResolveOptionalEntries<import("@odoo/owl").KeyedObject<Keys>>>;
176
+ <Shape extends {}>(shape: Shape): import("@odoo/owl").ShapeType<Shape, import("@odoo/owl").ResolveOptionalEntries<Shape>>;
177
177
  };
178
178
  string: <T extends string = string>() => Type<T>;
179
179
  tuple: <const T extends unknown[]>(types: T) => Type<import("@odoo/owl").StripBrandsAll<T>>;
@@ -10,7 +10,7 @@ export interface ChartSidePanelProps<T extends ChartDefinition<string>> {
10
10
  export type ChartUpdateFunction<T extends ChartDefinition<string> = ChartDefinition<string>> = (chartId: UID, definition: Partial<T>) => DispatchResult;
11
11
  export declare const chartSidePanelPropsDefinition: {
12
12
  chartId: import("@odoo/owl").Type<UID>;
13
- definition: import("@odoo/owl").Type<{}>;
13
+ definition: import("@odoo/owl").ShapeType<{}, {}>;
14
14
  canUpdateChart: import("@odoo/owl").Type<ChartUpdateFunction<ChartDefinition<string>>>;
15
15
  updateChart: import("@odoo/owl").Type<ChartUpdateFunction<ChartDefinition<string>>>;
16
16
  };
@@ -92,6 +92,7 @@ export declare class CompiledFormula implements Omit<ICompiledFormula, "tokens"
92
92
  * Make a new instance of CompiledFormula by compiling the formula string as input by the user.
93
93
  * */
94
94
  static Compile(formula: string, sheetId: UID, getters: CoreGetters): CompiledFormula;
95
+ areRangeShapesInLineWithNormalizedFormula(): boolean;
95
96
  }
96
97
  /**
97
98
  * A compiled formula serialized
@@ -233,3 +233,4 @@ export declare function defaultDict<T>(def: T): {
233
233
  get: (key: string) => T;
234
234
  set: (key: string, value: T) => void;
235
235
  };
236
+ export declare function repeat<T>(array: T[], times: number): T[];
@@ -233,6 +233,7 @@ import { StandaloneComposer } from "./components/composer/standalone_composer/st
233
233
  import { Select } from "./components/select/select";
234
234
  import { ChartRangeDataSourceComponent } from "./components/side_panel/chart/building_blocks/range_data_source/range_data_source";
235
235
  import { TopBar } from "./components/top_bar/top_bar";
236
+ import { PositionMap } from "./helpers/cells/position_map";
236
237
  import { parseFormat } from "./helpers/format/format_parser";
237
238
  import { replaceSymbolInFormula } from "./helpers/formulas";
238
239
  import { getFirstPivotFunction, getNumberOfPivotFunctions } from "./helpers/pivot/pivot_composer_helpers";
@@ -312,6 +313,7 @@ export declare const helpers: {
312
313
  collapseHierarchicalDisplayName: typeof collapseHierarchicalDisplayName;
313
314
  getCanonicalSymbolName: typeof getCanonicalSymbolName;
314
315
  fuzzyLookup: typeof fuzzyLookup;
316
+ PositionMap: typeof PositionMap;
315
317
  replaceSymbolInFormula: typeof replaceSymbolInFormula;
316
318
  };
317
319
  export declare const links: {
@@ -30,6 +30,7 @@ export declare class Squisher {
30
30
  private alreadyAppliedNumberOffsets;
31
31
  private previousStrings;
32
32
  private baseFormulaWasTransformed;
33
+ private rangeToStringOptions;
33
34
  private baseNumber;
34
35
  constructor(getters: CoreGetters);
35
36
  /** Build the result object based on a transformation. Joins the numbers into a single string, tries to do the same
@@ -15,9 +15,12 @@ export declare class PivotUIPlugin extends CoreViewPlugin {
15
15
  private pivots;
16
16
  private unusedPivotsInFormulas?;
17
17
  private custom;
18
+ private pivotPositionCache;
19
+ private shouldInvalidateCache;
18
20
  constructor(config: CoreViewPluginConfig);
19
21
  beforeHandle(cmd: Command): void;
20
22
  handle(cmd: Command): void;
23
+ finalize(): void;
21
24
  /**
22
25
  * Get the id of the first pivot in the formula at the given position. Returns undefined if there
23
26
  * is no pivot at this position
@@ -1,3 +1,4 @@
1
+ import { UID } from "../..";
1
2
  import { Client, ClientId, ClientWithColor } from "../../types/collaborative/session";
2
3
  import { GridRenderingContext } from "../../types/rendering";
3
4
  import { UIPlugin, UIPluginConfig } from "../ui_plugin";
@@ -18,7 +19,7 @@ export declare class CollaborativePlugin extends UIPlugin {
18
19
  * Get the list of others connected clients which are present in the same sheet
19
20
  * and with a valid position
20
21
  */
21
- getClientsToDisplay(): ClientToDisplay[];
22
+ getClientsToDisplay(sheetId: UID): ClientToDisplay[];
22
23
  drawLayer(renderingContext: GridRenderingContext): void;
23
24
  }
24
25
  export {};
@@ -22,6 +22,7 @@ export interface BoundedRange {
22
22
  export interface RangeStringOptions {
23
23
  useBoundedReference?: boolean;
24
24
  useFixedReference?: boolean;
25
+ doNotSimplifyRange?: boolean;
25
26
  }
26
27
  export interface RangeData {
27
28
  _zone: Zone | UnboundedZone;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "19.4.2",
3
+ "version": "19.4.4",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o_spreadsheet.cjs",
@@ -141,7 +141,7 @@
141
141
  "xmlSelfClosingSpace": false
142
142
  },
143
143
  "dependencies": {
144
- "@odoo/owl": "3.0.0-alpha.40",
144
+ "@odoo/owl": "3.0.0-alpha.43",
145
145
  "bootstrap": "5.3.3",
146
146
  "font-awesome": "^4.7.0",
147
147
  "rbush": "^3.0.1"