@odoo/o-spreadsheet 19.2.14 → 19.2.15

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.
@@ -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.2.14
6
- * @date 2026-05-27T05:57:14.898Z
7
- * @hash 96730cd
5
+ * @version 19.2.15
6
+ * @date 2026-06-06T06:23:14.723Z
7
+ * @hash d29528e
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -4328,6 +4328,7 @@ const DEFAULT_LOCALE = DEFAULT_LOCALES[0];
4328
4328
  //#endregion
4329
4329
  //#region src/helpers/format/format_tokenizer.ts
4330
4330
  function tokenizeFormat(str) {
4331
+ str = str.replace(/\s/g, " ");
4331
4332
  const chars = new TokenizingChars(str);
4332
4333
  const result = [];
4333
4334
  let currentFormatPart = [];
@@ -5504,7 +5505,12 @@ const lockedSheetAllowedCommands = new Set([
5504
5505
  "SET_ZOOM",
5505
5506
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
5506
5507
  "DUPLICATE_PIVOT_IN_NEW_SHEET",
5507
- "UPDATE_FILTER"
5508
+ "UPDATE_FILTER",
5509
+ "ACTIVATE_NEXT_SHEET",
5510
+ "ACTIVATE_PREVIOUS_SHEET",
5511
+ "SCROLL_TO_CELL",
5512
+ "SHIFT_VIEWPORT_DOWN",
5513
+ "SHIFT_VIEWPORT_UP"
5508
5514
  ]);
5509
5515
  const coreTypes = new Set([
5510
5516
  "UPDATE_CELL",
@@ -7083,40 +7089,9 @@ var UuidGenerator = class {
7083
7089
  }
7084
7090
  };
7085
7091
 
7086
- //#endregion
7087
- //#region src/registry.ts
7088
- var Registry$1 = class {
7089
- content = {};
7090
- add(key, value) {
7091
- if (key in this.content) throw new Error(`${key} is already present in this registry!`);
7092
- return this.replace(key, value);
7093
- }
7094
- replace(key, value) {
7095
- this.content[key] = value;
7096
- return this;
7097
- }
7098
- get(key) {
7099
- const content = this.content[key];
7100
- if (!content && !(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
7101
- return content;
7102
- }
7103
- contains(key) {
7104
- return key in this.content;
7105
- }
7106
- getAll() {
7107
- return Object.values(this.content);
7108
- }
7109
- getKeys() {
7110
- return Object.keys(this.content);
7111
- }
7112
- remove(key) {
7113
- delete this.content[key];
7114
- }
7115
- };
7116
-
7117
7092
  //#endregion
7118
7093
  //#region src/helpers/figures/charts/chart_js_extension.ts
7119
- const chartJsExtensionRegistry = new Registry$1();
7094
+ const chartJsExtensionRegistry = new Registry();
7120
7095
  function areChartJSExtensionsLoaded() {
7121
7096
  return globalThis.Chart ? !!globalThis.Chart.registry.plugins.get("chartShowValuesPlugin") : true;
7122
7097
  }
@@ -25711,7 +25686,7 @@ const HYPERLINK = {
25711
25686
  //#endregion
25712
25687
  //#region src/functions/function_registry.ts
25713
25688
  const functionNameRegex = /^[A-Z0-9\_\.]+$/;
25714
- var FunctionRegistry = class extends Registry$1 {
25689
+ var FunctionRegistry = class extends Registry {
25715
25690
  mapping = {};
25716
25691
  add(name, addDescr) {
25717
25692
  name = name.toUpperCase();
@@ -30205,7 +30180,7 @@ const WEEK_START = {
30205
30180
 
30206
30181
  //#endregion
30207
30182
  //#region src/migrations/migration_steps.ts
30208
- const migrationStepRegistry = new Registry$1();
30183
+ const migrationStepRegistry = new Registry();
30209
30184
  migrationStepRegistry.add("0.1", { migrate(data) {
30210
30185
  if (data.sheets && data.sheets[0]) data.activeSheet = data.sheets[0].name;
30211
30186
  return data;
@@ -37528,11 +37503,10 @@ const INSERT_TABLE = (env) => {
37528
37503
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
37529
37504
  };
37530
37505
  const DELETE_SELECTED_TABLE = (env) => {
37531
- const position = env.model.getters.getActivePosition();
37532
- const table = env.model.getters.getTable(position);
37506
+ const table = env.model.getters.getFirstTableInSelection();
37533
37507
  if (!table) return;
37534
37508
  env.model.dispatch("REMOVE_TABLE", {
37535
- sheetId: position.sheetId,
37509
+ sheetId: env.model.getters.getActiveSheetId(),
37536
37510
  target: [table.range.zone]
37537
37511
  });
37538
37512
  };
@@ -45739,7 +45713,7 @@ var SpreadsheetPivot = class {
45739
45713
 
45740
45714
  //#endregion
45741
45715
  //#region src/helpers/pivot/pivot_registry.ts
45742
- const pivotRegistry = new Registry$1();
45716
+ const pivotRegistry = new Registry();
45743
45717
  const dateGranularities = [
45744
45718
  "year",
45745
45719
  "quarter_number",
@@ -63745,9 +63719,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
63745
63719
  this.refreshPivot(cmd.id);
63746
63720
  break;
63747
63721
  case "ADD_PIVOT":
63722
+ this.unusedPivotsInFormulas?.push(cmd.pivotId);
63748
63723
  this.setupPivot(cmd.pivotId);
63749
63724
  break;
63750
63725
  case "DUPLICATE_PIVOT":
63726
+ this.unusedPivotsInFormulas?.push(cmd.newPivotId);
63751
63727
  this.setupPivot(cmd.newPivotId);
63752
63728
  break;
63753
63729
  case "UPDATE_PIVOT":
@@ -63939,8 +63915,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
63939
63915
  }
63940
63916
  }
63941
63917
  for (const pivotId of this.getters.getPivotIds()) {
63942
- const pivot = this.getters.getPivot(pivotId);
63943
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
63918
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
63919
+ for (const measure of pivot.measures) if (measure.computedBy) {
63944
63920
  const { sheetId } = measure.computedBy;
63945
63921
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
63946
63922
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -65680,7 +65656,8 @@ const invalidateTableStyleCommandsSet = new Set([
65680
65656
  "REMOVE_TABLE",
65681
65657
  "RESIZE_TABLE",
65682
65658
  "CREATE_TABLE_STYLE",
65683
- "REMOVE_TABLE_STYLE"
65659
+ "REMOVE_TABLE_STYLE",
65660
+ "DELETE_CONTENT"
65684
65661
  ]);
65685
65662
  function doesCommandInvalidatesTableStyle(cmd) {
65686
65663
  return invalidateTableStyleCommandsSet.has(cmd.type);
@@ -70965,10 +70942,10 @@ var SheetViewPlugin = class extends UIPlugin {
70965
70942
 
70966
70943
  //#endregion
70967
70944
  //#region src/plugins/index.ts
70968
- const corePluginRegistry = new Registry$1().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70969
- const featurePluginRegistry = new Registry$1().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70970
- const statefulUIPluginRegistry = new Registry$1().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70971
- const coreViewsPluginRegistry = new Registry$1().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70945
+ const corePluginRegistry = new Registry().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70946
+ const featurePluginRegistry = new Registry().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70947
+ const statefulUIPluginRegistry = new Registry().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70948
+ const coreViewsPluginRegistry = new Registry().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70972
70949
 
70973
70950
  //#endregion
70974
70951
  //#region src/registries/auto_completes/data_validation_auto_complete.ts
@@ -76852,6 +76829,11 @@ function lineAttributes(params) {
76852
76829
  `;
76853
76830
  }
76854
76831
  function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
76832
+ const textProperties = [
76833
+ ["b", style.bold ? "1" : "0"],
76834
+ ["i", style.italic ? "1" : "0"],
76835
+ ["sz", fontsize * 100]
76836
+ ];
76855
76837
  return escapeXml`
76856
76838
  <c:tx>
76857
76839
  <c:rich>
@@ -76859,13 +76841,13 @@ function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
76859
76841
  <a:lstStyle />
76860
76842
  <a:p>
76861
76843
  <a:pPr lvl="0">
76862
- <a:defRPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}">
76844
+ <a:defRPr ${formatAttributes(textProperties)}>
76863
76845
  ${solidFill(fontColor)}
76864
76846
  <a:latin typeface="+mn-lt"/>
76865
76847
  </a:defRPr>
76866
76848
  </a:pPr>
76867
76849
  <a:r> <!-- Runs -->
76868
- <a:rPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}" sz="${fontsize * 100}"/>
76850
+ <a:rPr ${formatAttributes(textProperties)}/>
76869
76851
  <a:t>${text}</a:t>
76870
76852
  </a:r>
76871
76853
  </a:p>
@@ -81889,6 +81871,6 @@ exports.stores = stores;
81889
81871
  exports.tokenColors = tokenColors;
81890
81872
  exports.tokenize = tokenize;
81891
81873
 
81892
- __info__.version = "19.2.14";
81893
- __info__.date = "2026-05-27T05:57:14.898Z";
81894
- __info__.hash = "96730cd";
81874
+ __info__.version = "19.2.15";
81875
+ __info__.date = "2026-06-06T06:23:14.723Z";
81876
+ __info__.hash = "d29528e";
@@ -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.2.14
6
- * @date 2026-05-27T05:57:16.585Z
7
- * @hash 96730cd
5
+ * @version 19.2.15
6
+ * @date 2026-06-06T06:23:16.378Z
7
+ * @hash d29528e
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -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.2.14
6
- * @date 2026-05-27T05:57:14.898Z
7
- * @hash 96730cd
5
+ * @version 19.2.15
6
+ * @date 2026-06-06T06:23:14.723Z
7
+ * @hash d29528e
8
8
  */
9
9
 
10
10
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, whenReady, xml } from "@odoo/owl";
@@ -4327,6 +4327,7 @@ const DEFAULT_LOCALE = DEFAULT_LOCALES[0];
4327
4327
  //#endregion
4328
4328
  //#region src/helpers/format/format_tokenizer.ts
4329
4329
  function tokenizeFormat(str) {
4330
+ str = str.replace(/\s/g, " ");
4330
4331
  const chars = new TokenizingChars(str);
4331
4332
  const result = [];
4332
4333
  let currentFormatPart = [];
@@ -5503,7 +5504,12 @@ const lockedSheetAllowedCommands = new Set([
5503
5504
  "SET_ZOOM",
5504
5505
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
5505
5506
  "DUPLICATE_PIVOT_IN_NEW_SHEET",
5506
- "UPDATE_FILTER"
5507
+ "UPDATE_FILTER",
5508
+ "ACTIVATE_NEXT_SHEET",
5509
+ "ACTIVATE_PREVIOUS_SHEET",
5510
+ "SCROLL_TO_CELL",
5511
+ "SHIFT_VIEWPORT_DOWN",
5512
+ "SHIFT_VIEWPORT_UP"
5507
5513
  ]);
5508
5514
  const coreTypes = new Set([
5509
5515
  "UPDATE_CELL",
@@ -7082,40 +7088,9 @@ var UuidGenerator = class {
7082
7088
  }
7083
7089
  };
7084
7090
 
7085
- //#endregion
7086
- //#region src/registry.ts
7087
- var Registry$1 = class {
7088
- content = {};
7089
- add(key, value) {
7090
- if (key in this.content) throw new Error(`${key} is already present in this registry!`);
7091
- return this.replace(key, value);
7092
- }
7093
- replace(key, value) {
7094
- this.content[key] = value;
7095
- return this;
7096
- }
7097
- get(key) {
7098
- const content = this.content[key];
7099
- if (!content && !(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
7100
- return content;
7101
- }
7102
- contains(key) {
7103
- return key in this.content;
7104
- }
7105
- getAll() {
7106
- return Object.values(this.content);
7107
- }
7108
- getKeys() {
7109
- return Object.keys(this.content);
7110
- }
7111
- remove(key) {
7112
- delete this.content[key];
7113
- }
7114
- };
7115
-
7116
7091
  //#endregion
7117
7092
  //#region src/helpers/figures/charts/chart_js_extension.ts
7118
- const chartJsExtensionRegistry = new Registry$1();
7093
+ const chartJsExtensionRegistry = new Registry();
7119
7094
  function areChartJSExtensionsLoaded() {
7120
7095
  return globalThis.Chart ? !!globalThis.Chart.registry.plugins.get("chartShowValuesPlugin") : true;
7121
7096
  }
@@ -25710,7 +25685,7 @@ const HYPERLINK = {
25710
25685
  //#endregion
25711
25686
  //#region src/functions/function_registry.ts
25712
25687
  const functionNameRegex = /^[A-Z0-9\_\.]+$/;
25713
- var FunctionRegistry = class extends Registry$1 {
25688
+ var FunctionRegistry = class extends Registry {
25714
25689
  mapping = {};
25715
25690
  add(name, addDescr) {
25716
25691
  name = name.toUpperCase();
@@ -30204,7 +30179,7 @@ const WEEK_START = {
30204
30179
 
30205
30180
  //#endregion
30206
30181
  //#region src/migrations/migration_steps.ts
30207
- const migrationStepRegistry = new Registry$1();
30182
+ const migrationStepRegistry = new Registry();
30208
30183
  migrationStepRegistry.add("0.1", { migrate(data) {
30209
30184
  if (data.sheets && data.sheets[0]) data.activeSheet = data.sheets[0].name;
30210
30185
  return data;
@@ -37527,11 +37502,10 @@ const INSERT_TABLE = (env) => {
37527
37502
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
37528
37503
  };
37529
37504
  const DELETE_SELECTED_TABLE = (env) => {
37530
- const position = env.model.getters.getActivePosition();
37531
- const table = env.model.getters.getTable(position);
37505
+ const table = env.model.getters.getFirstTableInSelection();
37532
37506
  if (!table) return;
37533
37507
  env.model.dispatch("REMOVE_TABLE", {
37534
- sheetId: position.sheetId,
37508
+ sheetId: env.model.getters.getActiveSheetId(),
37535
37509
  target: [table.range.zone]
37536
37510
  });
37537
37511
  };
@@ -45738,7 +45712,7 @@ var SpreadsheetPivot = class {
45738
45712
 
45739
45713
  //#endregion
45740
45714
  //#region src/helpers/pivot/pivot_registry.ts
45741
- const pivotRegistry = new Registry$1();
45715
+ const pivotRegistry = new Registry();
45742
45716
  const dateGranularities = [
45743
45717
  "year",
45744
45718
  "quarter_number",
@@ -63560,9 +63534,11 @@ var PivotUIPlugin = class extends CoreViewPlugin {
63560
63534
  this.refreshPivot(cmd.id);
63561
63535
  break;
63562
63536
  case "ADD_PIVOT":
63537
+ this.unusedPivotsInFormulas?.push(cmd.pivotId);
63563
63538
  this.setupPivot(cmd.pivotId);
63564
63539
  break;
63565
63540
  case "DUPLICATE_PIVOT":
63541
+ this.unusedPivotsInFormulas?.push(cmd.newPivotId);
63566
63542
  this.setupPivot(cmd.newPivotId);
63567
63543
  break;
63568
63544
  case "UPDATE_PIVOT":
@@ -63754,8 +63730,8 @@ var PivotUIPlugin = class extends CoreViewPlugin {
63754
63730
  }
63755
63731
  }
63756
63732
  for (const pivotId of this.getters.getPivotIds()) {
63757
- const pivot = this.getters.getPivot(pivotId);
63758
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
63733
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
63734
+ for (const measure of pivot.measures) if (measure.computedBy) {
63759
63735
  const { sheetId } = measure.computedBy;
63760
63736
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
63761
63737
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -65495,7 +65471,8 @@ const invalidateTableStyleCommandsSet = new Set([
65495
65471
  "REMOVE_TABLE",
65496
65472
  "RESIZE_TABLE",
65497
65473
  "CREATE_TABLE_STYLE",
65498
- "REMOVE_TABLE_STYLE"
65474
+ "REMOVE_TABLE_STYLE",
65475
+ "DELETE_CONTENT"
65499
65476
  ]);
65500
65477
  function doesCommandInvalidatesTableStyle(cmd) {
65501
65478
  return invalidateTableStyleCommandsSet.has(cmd.type);
@@ -70780,10 +70757,10 @@ var SheetViewPlugin = class extends UIPlugin {
70780
70757
 
70781
70758
  //#endregion
70782
70759
  //#region src/plugins/index.ts
70783
- const corePluginRegistry = new Registry$1().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70784
- const featurePluginRegistry = new Registry$1().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70785
- const statefulUIPluginRegistry = new Registry$1().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70786
- const coreViewsPluginRegistry = new Registry$1().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70760
+ const corePluginRegistry = new Registry().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70761
+ const featurePluginRegistry = new Registry().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70762
+ const statefulUIPluginRegistry = new Registry().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70763
+ const coreViewsPluginRegistry = new Registry().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70787
70764
 
70788
70765
  //#endregion
70789
70766
  //#region src/registries/auto_completes/data_validation_auto_complete.ts
@@ -76667,6 +76644,11 @@ function lineAttributes(params) {
76667
76644
  `;
76668
76645
  }
76669
76646
  function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
76647
+ const textProperties = [
76648
+ ["b", style.bold ? "1" : "0"],
76649
+ ["i", style.italic ? "1" : "0"],
76650
+ ["sz", fontsize * 100]
76651
+ ];
76670
76652
  return escapeXml`
76671
76653
  <c:tx>
76672
76654
  <c:rich>
@@ -76674,13 +76656,13 @@ function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
76674
76656
  <a:lstStyle />
76675
76657
  <a:p>
76676
76658
  <a:pPr lvl="0">
76677
- <a:defRPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}">
76659
+ <a:defRPr ${formatAttributes(textProperties)}>
76678
76660
  ${solidFill(fontColor)}
76679
76661
  <a:latin typeface="+mn-lt"/>
76680
76662
  </a:defRPr>
76681
76663
  </a:pPr>
76682
76664
  <a:r> <!-- Runs -->
76683
- <a:rPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}" sz="${fontsize * 100}"/>
76665
+ <a:rPr ${formatAttributes(textProperties)}/>
76684
76666
  <a:t>${text}</a:t>
76685
76667
  </a:r>
76686
76668
  </a:p>
@@ -81646,6 +81628,6 @@ const chartHelpers = {
81646
81628
  //#endregion
81647
81629
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
81648
81630
 
81649
- __info__.version = "19.2.14";
81650
- __info__.date = "2026-05-27T05:57:14.898Z";
81651
- __info__.hash = "96730cd";
81631
+ __info__.version = "19.2.15";
81632
+ __info__.date = "2026-06-06T06:23:14.723Z";
81633
+ __info__.hash = "d29528e";
@@ -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.2.14
6
- * @date 2026-05-27T05:57:14.898Z
7
- * @hash 96730cd
5
+ * @version 19.2.15
6
+ * @date 2026-06-06T06:23:14.723Z
7
+ * @hash d29528e
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -4329,6 +4329,7 @@ stores.inject(MyMetaStore, storeInstance);
4329
4329
  //#endregion
4330
4330
  //#region src/helpers/format/format_tokenizer.ts
4331
4331
  function tokenizeFormat(str) {
4332
+ str = str.replace(/\s/g, " ");
4332
4333
  const chars = new TokenizingChars(str);
4333
4334
  const result = [];
4334
4335
  let currentFormatPart = [];
@@ -5505,7 +5506,12 @@ stores.inject(MyMetaStore, storeInstance);
5505
5506
  "SET_ZOOM",
5506
5507
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
5507
5508
  "DUPLICATE_PIVOT_IN_NEW_SHEET",
5508
- "UPDATE_FILTER"
5509
+ "UPDATE_FILTER",
5510
+ "ACTIVATE_NEXT_SHEET",
5511
+ "ACTIVATE_PREVIOUS_SHEET",
5512
+ "SCROLL_TO_CELL",
5513
+ "SHIFT_VIEWPORT_DOWN",
5514
+ "SHIFT_VIEWPORT_UP"
5509
5515
  ]);
5510
5516
  const coreTypes = new Set([
5511
5517
  "UPDATE_CELL",
@@ -7084,40 +7090,9 @@ stores.inject(MyMetaStore, storeInstance);
7084
7090
  }
7085
7091
  };
7086
7092
 
7087
- //#endregion
7088
- //#region src/registry.ts
7089
- var Registry$1 = class {
7090
- content = {};
7091
- add(key, value) {
7092
- if (key in this.content) throw new Error(`${key} is already present in this registry!`);
7093
- return this.replace(key, value);
7094
- }
7095
- replace(key, value) {
7096
- this.content[key] = value;
7097
- return this;
7098
- }
7099
- get(key) {
7100
- const content = this.content[key];
7101
- if (!content && !(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
7102
- return content;
7103
- }
7104
- contains(key) {
7105
- return key in this.content;
7106
- }
7107
- getAll() {
7108
- return Object.values(this.content);
7109
- }
7110
- getKeys() {
7111
- return Object.keys(this.content);
7112
- }
7113
- remove(key) {
7114
- delete this.content[key];
7115
- }
7116
- };
7117
-
7118
7093
  //#endregion
7119
7094
  //#region src/helpers/figures/charts/chart_js_extension.ts
7120
- const chartJsExtensionRegistry = new Registry$1();
7095
+ const chartJsExtensionRegistry = new Registry();
7121
7096
  function areChartJSExtensionsLoaded() {
7122
7097
  return globalThis.Chart ? !!globalThis.Chart.registry.plugins.get("chartShowValuesPlugin") : true;
7123
7098
  }
@@ -25712,7 +25687,7 @@ stores.inject(MyMetaStore, storeInstance);
25712
25687
  //#endregion
25713
25688
  //#region src/functions/function_registry.ts
25714
25689
  const functionNameRegex = /^[A-Z0-9\_\.]+$/;
25715
- var FunctionRegistry = class extends Registry$1 {
25690
+ var FunctionRegistry = class extends Registry {
25716
25691
  mapping = {};
25717
25692
  add(name, addDescr) {
25718
25693
  name = name.toUpperCase();
@@ -30206,7 +30181,7 @@ stores.inject(MyMetaStore, storeInstance);
30206
30181
 
30207
30182
  //#endregion
30208
30183
  //#region src/migrations/migration_steps.ts
30209
- const migrationStepRegistry = new Registry$1();
30184
+ const migrationStepRegistry = new Registry();
30210
30185
  migrationStepRegistry.add("0.1", { migrate(data) {
30211
30186
  if (data.sheets && data.sheets[0]) data.activeSheet = data.sheets[0].name;
30212
30187
  return data;
@@ -37529,11 +37504,10 @@ stores.inject(MyMetaStore, storeInstance);
37529
37504
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
37530
37505
  };
37531
37506
  const DELETE_SELECTED_TABLE = (env) => {
37532
- const position = env.model.getters.getActivePosition();
37533
- const table = env.model.getters.getTable(position);
37507
+ const table = env.model.getters.getFirstTableInSelection();
37534
37508
  if (!table) return;
37535
37509
  env.model.dispatch("REMOVE_TABLE", {
37536
- sheetId: position.sheetId,
37510
+ sheetId: env.model.getters.getActiveSheetId(),
37537
37511
  target: [table.range.zone]
37538
37512
  });
37539
37513
  };
@@ -45740,7 +45714,7 @@ stores.inject(MyMetaStore, storeInstance);
45740
45714
 
45741
45715
  //#endregion
45742
45716
  //#region src/helpers/pivot/pivot_registry.ts
45743
- const pivotRegistry = new Registry$1();
45717
+ const pivotRegistry = new Registry();
45744
45718
  const dateGranularities = [
45745
45719
  "year",
45746
45720
  "quarter_number",
@@ -63562,9 +63536,11 @@ stores.inject(MyMetaStore, storeInstance);
63562
63536
  this.refreshPivot(cmd.id);
63563
63537
  break;
63564
63538
  case "ADD_PIVOT":
63539
+ this.unusedPivotsInFormulas?.push(cmd.pivotId);
63565
63540
  this.setupPivot(cmd.pivotId);
63566
63541
  break;
63567
63542
  case "DUPLICATE_PIVOT":
63543
+ this.unusedPivotsInFormulas?.push(cmd.newPivotId);
63568
63544
  this.setupPivot(cmd.newPivotId);
63569
63545
  break;
63570
63546
  case "UPDATE_PIVOT":
@@ -63756,8 +63732,8 @@ stores.inject(MyMetaStore, storeInstance);
63756
63732
  }
63757
63733
  }
63758
63734
  for (const pivotId of this.getters.getPivotIds()) {
63759
- const pivot = this.getters.getPivot(pivotId);
63760
- for (const measure of pivot.definition.measures) if (measure.computedBy) {
63735
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
63736
+ for (const measure of pivot.measures) if (measure.computedBy) {
63761
63737
  const { sheetId } = measure.computedBy;
63762
63738
  const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
63763
63739
  const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
@@ -65497,7 +65473,8 @@ stores.inject(MyMetaStore, storeInstance);
65497
65473
  "REMOVE_TABLE",
65498
65474
  "RESIZE_TABLE",
65499
65475
  "CREATE_TABLE_STYLE",
65500
- "REMOVE_TABLE_STYLE"
65476
+ "REMOVE_TABLE_STYLE",
65477
+ "DELETE_CONTENT"
65501
65478
  ]);
65502
65479
  function doesCommandInvalidatesTableStyle(cmd) {
65503
65480
  return invalidateTableStyleCommandsSet.has(cmd.type);
@@ -70782,10 +70759,10 @@ stores.inject(MyMetaStore, storeInstance);
70782
70759
 
70783
70760
  //#endregion
70784
70761
  //#region src/plugins/index.ts
70785
- const corePluginRegistry = new Registry$1().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70786
- const featurePluginRegistry = new Registry$1().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70787
- const statefulUIPluginRegistry = new Registry$1().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70788
- const coreViewsPluginRegistry = new Registry$1().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70762
+ const corePluginRegistry = new Registry().add("settings", SettingsPlugin).add("sheet", SheetPlugin).add("header grouping", HeaderGroupingPlugin).add("header visibility", HeaderVisibilityPlugin).add("tables", TablePlugin).add("dataValidation", DataValidationPlugin).add("cell", CellPlugin).add("merge", MergePlugin).add("headerSize", HeaderSizePlugin).add("borders", BordersPlugin).add("conditional formatting", ConditionalFormatPlugin).add("figures", FigurePlugin).add("chart", ChartPlugin).add("carousel", CarouselPlugin).add("image", ImagePlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
70763
+ const featurePluginRegistry = new Registry().add("ui_sheet", SheetUIPlugin).add("ui_options", UIOptionsPlugin).add("autofill", AutofillPlugin).add("sort", SortPlugin).add("automatic_sum", AutomaticSumPlugin).add("format", FormatPlugin).add("insert_pivot", InsertPivotPlugin).add("pivot_presence", PivotPresencePlugin).add("split_to_columns", SplitToColumnsPlugin).add("subtotal_evaluation", SubtotalEvaluationPlugin).add("collaborative", CollaborativePlugin).add("history", HistoryPlugin).add("table_autofill", TableAutofillPlugin).add("table_ui_resize", TableResizeUI).add("datavalidation_insert", DataValidationInsertionPlugin).add("checkbox_toggle", CheckboxTogglePlugin).add("dynamic_translate", DynamicTranslate).add("geo_features", GeoFeaturePlugin).add("data_cleanup", DataCleanupPlugin);
70764
+ const statefulUIPluginRegistry = new Registry().add("selection", GridSelectionPlugin).add("evaluation_filter", FilterEvaluationPlugin).add("header_visibility_ui", HeaderVisibilityUIPlugin).add("cell_computed_style", CellComputedStylePlugin).add("table_computed_style", TableComputedStylePlugin).add("header_positions", HeaderPositionsUIPlugin).add("viewport", SheetViewPlugin).add("clipboard", ClipboardPlugin).add("carousel_ui", CarouselUIPlugin).add("lock_sheet", LockSheetPlugin);
70765
+ const coreViewsPluginRegistry = new Registry().add("evaluation", EvaluationPlugin).add("evaluation_chart", EvaluationChartPlugin).add("evaluation_cf", EvaluationConditionalFormatPlugin).add("row_size", HeaderSizeUIPlugin).add("data_validation_ui", EvaluationDataValidationPlugin).add("dynamic_tables", DynamicTablesPlugin).add("custom_colors", CustomColorsPlugin).add("pivot_ui", PivotUIPlugin).add("cell_icon", CellIconPlugin).add("formula_tracker", FormulaTrackerPlugin);
70789
70766
 
70790
70767
  //#endregion
70791
70768
  //#region src/registries/auto_completes/data_validation_auto_complete.ts
@@ -76669,6 +76646,11 @@ stores.inject(MyMetaStore, storeInstance);
76669
76646
  `;
76670
76647
  }
76671
76648
  function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
76649
+ const textProperties = [
76650
+ ["b", style.bold ? "1" : "0"],
76651
+ ["i", style.italic ? "1" : "0"],
76652
+ ["sz", fontsize * 100]
76653
+ ];
76672
76654
  return escapeXml`
76673
76655
  <c:tx>
76674
76656
  <c:rich>
@@ -76676,13 +76658,13 @@ stores.inject(MyMetaStore, storeInstance);
76676
76658
  <a:lstStyle />
76677
76659
  <a:p>
76678
76660
  <a:pPr lvl="0">
76679
- <a:defRPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}">
76661
+ <a:defRPr ${formatAttributes(textProperties)}>
76680
76662
  ${solidFill(fontColor)}
76681
76663
  <a:latin typeface="+mn-lt"/>
76682
76664
  </a:defRPr>
76683
76665
  </a:pPr>
76684
76666
  <a:r> <!-- Runs -->
76685
- <a:rPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}" sz="${fontsize * 100}"/>
76667
+ <a:rPr ${formatAttributes(textProperties)}/>
76686
76668
  <a:t>${text}</a:t>
76687
76669
  </a:r>
76688
76670
  </a:p>
@@ -81706,8 +81688,8 @@ exports.stores = stores;
81706
81688
  exports.tokenColors = tokenColors;
81707
81689
  exports.tokenize = tokenize;
81708
81690
 
81709
- __info__.version = "19.2.14";
81710
- __info__.date = "2026-05-27T05:57:14.898Z";
81711
- __info__.hash = "96730cd";
81691
+ __info__.version = "19.2.15";
81692
+ __info__.date = "2026-06-06T06:23:14.723Z";
81693
+ __info__.hash = "d29528e";
81712
81694
 
81713
81695
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);