@odoo/o-spreadsheet 19.3.4 → 19.3.6

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.3.4
6
- * @date 2026-05-15T07:07:34.417Z
7
- * @hash 1dc7b42
5
+ * @version 19.3.6
6
+ * @date 2026-06-06T06:24:22.727Z
7
+ * @hash 0fe939b
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -3241,31 +3241,78 @@ stores.inject(MyMetaStore, storeInstance);
3241
3241
  }
3242
3242
 
3243
3243
  //#endregion
3244
- //#region src/registry.ts
3245
- var Registry$1 = class {
3244
+ //#region src/registries/registry.ts
3245
+ /**
3246
+ * Registry
3247
+ *
3248
+ * The Registry class is basically just a mapping from a string key to an object.
3249
+ * It is really not much more than an object. It is however useful for the
3250
+ * following reasons:
3251
+ *
3252
+ * 1. it let us react and execute code when someone add something to the registry
3253
+ * (for example, the FunctionRegistry subclass this for this purpose)
3254
+ * 2. it throws an error when the get operation fails
3255
+ * 3. it provides a chained API to add items to the registry.
3256
+ */
3257
+ var Registry = class {
3246
3258
  content = {};
3259
+ /**
3260
+ * Add an item to the registry, you can only add if there is no item
3261
+ * already present in the registery with the given key
3262
+ *
3263
+ * Note that this also returns the registry, so another add method call can
3264
+ * be chained
3265
+ */
3247
3266
  add(key, value) {
3248
3267
  if (key in this.content) throw new Error(`${key} is already present in this registry!`);
3249
3268
  return this.replace(key, value);
3250
3269
  }
3270
+ /**
3271
+ * Replace (or add) an item to the registry
3272
+ *
3273
+ * Note that this also returns the registry, so another add method call can
3274
+ * be chained
3275
+ */
3251
3276
  replace(key, value) {
3252
3277
  this.content[key] = value;
3253
3278
  return this;
3254
3279
  }
3280
+ /**
3281
+ * Get an item from the registry
3282
+ */
3255
3283
  get(key) {
3284
+ /**
3285
+ * Note: key in {} is ~12 times slower than {}[key].
3286
+ * So, we check the absence of key only when the direct access returns
3287
+ * a falsy value. It's done to ensure that the registry can contains falsy values
3288
+ */
3256
3289
  const content = this.content[key];
3257
- if (!content && !(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
3290
+ if (!content) {
3291
+ if (!(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
3292
+ }
3258
3293
  return content;
3259
3294
  }
3295
+ /**
3296
+ * Check if the key is already in the registry
3297
+ */
3260
3298
  contains(key) {
3261
3299
  return key in this.content;
3262
3300
  }
3301
+ /**
3302
+ * Get a list of all elements in the registry
3303
+ */
3263
3304
  getAll() {
3264
3305
  return Object.values(this.content);
3265
3306
  }
3307
+ /**
3308
+ * Get a list of all keys in the registry
3309
+ */
3266
3310
  getKeys() {
3267
3311
  return Object.keys(this.content);
3268
3312
  }
3313
+ /**
3314
+ * Remove an item from the registry
3315
+ */
3269
3316
  remove(key) {
3270
3317
  delete this.content[key];
3271
3318
  }
@@ -4644,7 +4691,7 @@ stores.inject(MyMetaStore, storeInstance);
4644
4691
  //#endregion
4645
4692
  //#region src/functions/function_registry.ts
4646
4693
  const functionNameRegex = /^[A-Z0-9\_\.]+$/;
4647
- var FunctionRegistry = class extends Registry$1 {
4694
+ var FunctionRegistry = class extends Registry {
4648
4695
  mapping = {};
4649
4696
  add(name, addDescr) {
4650
4697
  name = name.toUpperCase();
@@ -5458,84 +5505,6 @@ stores.inject(MyMetaStore, storeInstance);
5458
5505
  return nextToken?.type === "LEFT_PAREN" && functionRegex.test(currentToken.value) && currentToken.value === unquote(currentToken.value, "'");
5459
5506
  }
5460
5507
 
5461
- //#endregion
5462
- //#region src/registries/registry.ts
5463
- /**
5464
- * Registry
5465
- *
5466
- * The Registry class is basically just a mapping from a string key to an object.
5467
- * It is really not much more than an object. It is however useful for the
5468
- * following reasons:
5469
- *
5470
- * 1. it let us react and execute code when someone add something to the registry
5471
- * (for example, the FunctionRegistry subclass this for this purpose)
5472
- * 2. it throws an error when the get operation fails
5473
- * 3. it provides a chained API to add items to the registry.
5474
- */
5475
- var Registry = class {
5476
- content = {};
5477
- /**
5478
- * Add an item to the registry, you can only add if there is no item
5479
- * already present in the registery with the given key
5480
- *
5481
- * Note that this also returns the registry, so another add method call can
5482
- * be chained
5483
- */
5484
- add(key, value) {
5485
- if (key in this.content) throw new Error(`${key} is already present in this registry!`);
5486
- return this.replace(key, value);
5487
- }
5488
- /**
5489
- * Replace (or add) an item to the registry
5490
- *
5491
- * Note that this also returns the registry, so another add method call can
5492
- * be chained
5493
- */
5494
- replace(key, value) {
5495
- this.content[key] = value;
5496
- return this;
5497
- }
5498
- /**
5499
- * Get an item from the registry
5500
- */
5501
- get(key) {
5502
- /**
5503
- * Note: key in {} is ~12 times slower than {}[key].
5504
- * So, we check the absence of key only when the direct access returns
5505
- * a falsy value. It's done to ensure that the registry can contains falsy values
5506
- */
5507
- const content = this.content[key];
5508
- if (!content) {
5509
- if (!(key in this.content)) throw new Error(`Cannot find ${key} in this registry!`);
5510
- }
5511
- return content;
5512
- }
5513
- /**
5514
- * Check if the key is already in the registry
5515
- */
5516
- contains(key) {
5517
- return key in this.content;
5518
- }
5519
- /**
5520
- * Get a list of all elements in the registry
5521
- */
5522
- getAll() {
5523
- return Object.values(this.content);
5524
- }
5525
- /**
5526
- * Get a list of all keys in the registry
5527
- */
5528
- getKeys() {
5529
- return Object.keys(this.content);
5530
- }
5531
- /**
5532
- * Remove an item from the registry
5533
- */
5534
- remove(key) {
5535
- delete this.content[key];
5536
- }
5537
- };
5538
-
5539
5508
  //#endregion
5540
5509
  //#region src/helpers/range.ts
5541
5510
  function createRange(args, getSheetSize) {
@@ -5817,8 +5786,13 @@ stores.inject(MyMetaStore, storeInstance);
5817
5786
  changeType: "NONE",
5818
5787
  range
5819
5788
  };
5789
+ const isUnboundedAtEnd = range.unboundedZone[end] === void 0;
5790
+ if (isUnboundedAtEnd && !range.unboundedZone.hasHeader) return {
5791
+ changeType: "RESIZE",
5792
+ range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5793
+ };
5820
5794
  if (cmd.position === "after") {
5821
- if (range.zone[start] <= cmd.base && cmd.base < range.zone[end]) return {
5795
+ if (range.zone[start] <= cmd.base && (cmd.base < range.zone[end] || isUnboundedAtEnd)) return {
5822
5796
  changeType: "RESIZE",
5823
5797
  range: createAdaptedRange(range, dimension, "RESIZE", cmd.quantity)
5824
5798
  };
@@ -6556,6 +6530,7 @@ stores.inject(MyMetaStore, storeInstance);
6556
6530
  //#endregion
6557
6531
  //#region src/helpers/format/format_tokenizer.ts
6558
6532
  function tokenizeFormat(str) {
6533
+ str = str.replace(/\s/g, " ");
6559
6534
  const chars = new TokenizingChars(str);
6560
6535
  const result = [];
6561
6536
  let currentFormatPart = [];
@@ -7686,7 +7661,12 @@ stores.inject(MyMetaStore, storeInstance);
7686
7661
  "SET_ZOOM",
7687
7662
  "UPDATE_CAROUSEL_ACTIVE_ITEM",
7688
7663
  "DUPLICATE_PIVOT_IN_NEW_SHEET",
7689
- "UPDATE_FILTER"
7664
+ "UPDATE_FILTER",
7665
+ "ACTIVATE_NEXT_SHEET",
7666
+ "ACTIVATE_PREVIOUS_SHEET",
7667
+ "SCROLL_TO_CELL",
7668
+ "SHIFT_VIEWPORT_DOWN",
7669
+ "SHIFT_VIEWPORT_UP"
7690
7670
  ]);
7691
7671
  const coreTypes = new Set([
7692
7672
  "UPDATE_CELL",
@@ -8759,7 +8739,7 @@ stores.inject(MyMetaStore, storeInstance);
8759
8739
 
8760
8740
  //#endregion
8761
8741
  //#region src/helpers/figures/charts/chart_js_extension.ts
8762
- const chartJsExtensionRegistry = new Registry$1();
8742
+ const chartJsExtensionRegistry = new Registry();
8763
8743
  function areChartJSExtensionsLoaded() {
8764
8744
  return globalThis.Chart ? !!globalThis.Chart.registry.plugins.get("chartShowValuesPlugin") : true;
8765
8745
  }
@@ -9119,6 +9099,10 @@ stores.inject(MyMetaStore, storeInstance);
9119
9099
  ROUNDDOWN: [{
9120
9100
  type: "NUMBER",
9121
9101
  value: 0
9102
+ }],
9103
+ IFERROR: [{
9104
+ type: "NUMBER",
9105
+ value: 0
9122
9106
  }]
9123
9107
  };
9124
9108
  /**
@@ -23266,7 +23250,7 @@ stores.inject(MyMetaStore, storeInstance);
23266
23250
 
23267
23251
  //#endregion
23268
23252
  //#region src/migrations/migration_steps.ts
23269
- const migrationStepRegistry = new Registry$1();
23253
+ const migrationStepRegistry = new Registry();
23270
23254
  migrationStepRegistry.add("0.1", { migrate(data) {
23271
23255
  if (data.sheets && data.sheets[0]) data.activeSheet = data.sheets[0].name;
23272
23256
  return data;
@@ -30278,11 +30262,10 @@ stores.inject(MyMetaStore, storeInstance);
30278
30262
  if (interactiveCreateTable(env, env.model.getters.getActiveSheetId()).isSuccessful) env.openSidePanel("TableSidePanel", {});
30279
30263
  };
30280
30264
  const DELETE_SELECTED_TABLE = (env) => {
30281
- const position = env.model.getters.getActivePosition();
30282
- const table = env.model.getters.getTable(position);
30265
+ const table = env.model.getters.getFirstTableInSelection();
30283
30266
  if (!table) return;
30284
30267
  env.model.dispatch("REMOVE_TABLE", {
30285
- sheetId: position.sheetId,
30268
+ sheetId: env.model.getters.getActiveSheetId(),
30286
30269
  target: [table.range.zone]
30287
30270
  });
30288
30271
  };
@@ -32875,11 +32858,12 @@ stores.inject(MyMetaStore, storeInstance);
32875
32858
  type: "range",
32876
32859
  dataSets: [],
32877
32860
  dataSetsHaveTitle: false,
32861
+ labelRange: context.auxiliaryRange,
32878
32862
  ...context.dataSource
32879
32863
  };
32880
32864
  },
32881
32865
  fromHierarchicalContextCreation(context) {
32882
- if (context.dataSource?.type !== "range" || context.hierarchicalDataSource?.type !== "range") return {
32866
+ if (context.dataSource?.type !== "range" || context.hierarchicalDataSource !== void 0 && context.hierarchicalDataSource.type !== "range") return {
32883
32867
  type: "range",
32884
32868
  dataSets: [],
32885
32869
  dataSetsHaveTitle: false
@@ -37546,7 +37530,7 @@ stores.inject(MyMetaStore, storeInstance);
37546
37530
  col,
37547
37531
  row
37548
37532
  };
37549
- if (pivotId === getters.getPivotIdFromPosition(position)) positions.push(position);
37533
+ if (getters.getPivotIdsFromPosition(position).includes(pivotId)) positions.push(position);
37550
37534
  }
37551
37535
  return positions;
37552
37536
  }
@@ -39556,7 +39540,7 @@ stores.inject(MyMetaStore, storeInstance);
39556
39540
 
39557
39541
  //#endregion
39558
39542
  //#region src/helpers/pivot/pivot_registry.ts
39559
- const pivotRegistry = new Registry$1();
39543
+ const pivotRegistry = new Registry();
39560
39544
  const dateGranularities = [
39561
39545
  "year",
39562
39546
  "quarter_number",
@@ -39620,6 +39604,9 @@ stores.inject(MyMetaStore, storeInstance);
39620
39604
  function getFirstPivotFunction(compiledFormula, getters) {
39621
39605
  return compiledFormula.getFunctionsFromTokens(PIVOT_FUNCTIONS, getters)[0];
39622
39606
  }
39607
+ function getPivotFunctions(compiledFormula, getters) {
39608
+ return compiledFormula.getFunctionsFromTokens(PIVOT_FUNCTIONS, getters);
39609
+ }
39623
39610
  /**
39624
39611
  * Parse a spreadsheet formula and detect the number of PIVOT functions that are
39625
39612
  * present in the given formula.
@@ -57834,6 +57821,7 @@ stores.inject(MyMetaStore, storeInstance);
57834
57821
  "getFirstPivotFunction",
57835
57822
  "getPivotCellSortDirection",
57836
57823
  "getPivotIdFromPosition",
57824
+ "getPivotIdsFromPosition",
57837
57825
  "getPivotCellFromPosition",
57838
57826
  "generateNewCalculatedMeasureName",
57839
57827
  "isPivotUnused",
@@ -57860,9 +57848,11 @@ stores.inject(MyMetaStore, storeInstance);
57860
57848
  this.refreshPivot(cmd.id);
57861
57849
  break;
57862
57850
  case "ADD_PIVOT":
57851
+ this.unusedPivotsInFormulas?.push(cmd.pivotId);
57863
57852
  this.setupPivot(cmd.pivotId);
57864
57853
  break;
57865
57854
  case "DUPLICATE_PIVOT":
57855
+ this.unusedPivotsInFormulas?.push(cmd.newPivotId);
57866
57856
  this.setupPivot(cmd.newPivotId);
57867
57857
  break;
57868
57858
  case "UPDATE_PIVOT":
@@ -57893,37 +57883,52 @@ stores.inject(MyMetaStore, storeInstance);
57893
57883
  }
57894
57884
  }
57895
57885
  /**
57896
- * Get the id of the pivot at the given position. Returns undefined if there
57886
+ * Get the id of the first pivot in the formula at the given position. Returns undefined if there
57897
57887
  * is no pivot at this position
57898
57888
  */
57899
57889
  getPivotIdFromPosition(position) {
57890
+ return this.getPivotIdsFromPosition(position)[0];
57891
+ }
57892
+ /**
57893
+ * Get all of the ids of the pivot present in the formula at the given position.
57894
+ */
57895
+ getPivotIdsFromPosition(position) {
57900
57896
  const cell = this.getters.getCorrespondingFormulaCell(position);
57901
- if (cell && cell.isFormula) {
57902
- const pivotFunction = this.getFirstPivotFunction(position.sheetId, cell.compiledFormula);
57903
- if (pivotFunction) {
57904
- const pivotId = pivotFunction.args[0]?.toString();
57905
- return pivotId && this.getters.getPivotId(pivotId);
57906
- }
57907
- }
57897
+ if (cell && cell.isFormula) return this.getPivotIdsFromFormula(position.sheetId, cell.compiledFormula);
57898
+ return [];
57899
+ }
57900
+ getPivotIdsFromFormula(sheetId, formula) {
57901
+ return this.getPivotFunctions(sheetId, formula).map((pivotFunction) => {
57902
+ const pivotId = pivotFunction.args[0]?.toString();
57903
+ return pivotId && this.getters.getPivotId(pivotId);
57904
+ }).filter(isDefined);
57908
57905
  }
57909
57906
  isSpillPivotFormula(position) {
57910
57907
  const cell = this.getters.getCorrespondingFormulaCell(position);
57911
57908
  if (cell && cell.isFormula) return this.getFirstPivotFunction(position.sheetId, cell.compiledFormula)?.functionName === "PIVOT";
57912
57909
  return false;
57913
57910
  }
57914
- getFirstPivotFunction(sheetId, compiledFormula) {
57915
- const pivotFunction = getFirstPivotFunction(compiledFormula, this.getters);
57916
- if (!pivotFunction) return;
57917
- const { functionName, args } = pivotFunction;
57918
- return {
57919
- functionName,
57920
- args: args.map((argAst) => {
57911
+ getPivotFunctions(sheetId, formula) {
57912
+ const pivotFunctions = getPivotFunctions(formula, this.getters);
57913
+ if (!pivotFunctions.length) return [];
57914
+ const evaluatedPivotFunctions = [];
57915
+ for (const pivotFunction of pivotFunctions) {
57916
+ const { functionName, args } = pivotFunction;
57917
+ const evaluatedArgs = args.map((argAst) => {
57921
57918
  if (argAst.type === "EMPTY") return;
57922
57919
  else if (argAst.type === "STRING" || argAst.type === "BOOLEAN" || argAst.type === "NUMBER") return argAst.value;
57923
57920
  const argsString = astToFormula(argAst);
57924
57921
  return this.getters.evaluateFormula(sheetId, argsString);
57925
- })
57926
- };
57922
+ });
57923
+ evaluatedPivotFunctions.push({
57924
+ functionName,
57925
+ args: evaluatedArgs
57926
+ });
57927
+ }
57928
+ return evaluatedPivotFunctions;
57929
+ }
57930
+ getFirstPivotFunction(sheetId, formula) {
57931
+ return this.getPivotFunctions(sheetId, formula)[0];
57927
57932
  }
57928
57933
  /**
57929
57934
  * Returns the domain args of a pivot formula from a position.
@@ -58029,8 +58034,8 @@ stores.inject(MyMetaStore, storeInstance);
58029
58034
  const unusedPivots = new Set(this.getters.getPivotIds());
58030
58035
  for (const sheetId of this.getters.getSheetIds()) for (const cell of this.getters.getCells(sheetId)) {
58031
58036
  const position = this.getters.getCellPosition(cell.id);
58032
- const pivotId = this.getPivotIdFromPosition(position);
58033
- if (pivotId) {
58037
+ const pivotIds = this.getPivotIdsFromPosition(position);
58038
+ for (const pivotId of pivotIds) {
58034
58039
  unusedPivots.delete(pivotId);
58035
58040
  if (!unusedPivots.size) {
58036
58041
  this.unusedPivotsInFormulas = [];
@@ -58038,6 +58043,21 @@ stores.inject(MyMetaStore, storeInstance);
58038
58043
  }
58039
58044
  }
58040
58045
  }
58046
+ for (const pivotId of this.getters.getPivotIds()) {
58047
+ const pivot = this.getters.getPivotCoreDefinition(pivotId);
58048
+ for (const measure of pivot.measures) if (measure.computedBy) {
58049
+ const { sheetId } = measure.computedBy;
58050
+ const formula = this.getters.getMeasureCompiledFormula(pivotId, measure);
58051
+ const relatedPivotIds = this.getPivotIdsFromFormula(sheetId, formula);
58052
+ for (const relatedPivotId of relatedPivotIds) {
58053
+ unusedPivots.delete(relatedPivotId);
58054
+ if (!unusedPivots.size) {
58055
+ this.unusedPivotsInFormulas = [];
58056
+ return [];
58057
+ }
58058
+ }
58059
+ }
58060
+ }
58041
58061
  this.unusedPivotsInFormulas = [...unusedPivots];
58042
58062
  return this.unusedPivotsInFormulas;
58043
58063
  }
@@ -59787,7 +59807,8 @@ stores.inject(MyMetaStore, storeInstance);
59787
59807
  "REMOVE_TABLE",
59788
59808
  "RESIZE_TABLE",
59789
59809
  "CREATE_TABLE_STYLE",
59790
- "REMOVE_TABLE_STYLE"
59810
+ "REMOVE_TABLE_STYLE",
59811
+ "DELETE_CONTENT"
59791
59812
  ]);
59792
59813
  function doesCommandInvalidatesTableStyle(cmd) {
59793
59814
  return invalidateTableStyleCommandsSet.has(cmd.type);
@@ -65482,10 +65503,10 @@ stores.inject(MyMetaStore, storeInstance);
65482
65503
 
65483
65504
  //#endregion
65484
65505
  //#region src/plugins/index.ts
65485
- 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("named_ranges", NamedRangesPlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
65486
- 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);
65487
- 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);
65488
- 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);
65506
+ 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("named_ranges", NamedRangesPlugin).add("pivot_core", PivotCorePlugin).add("spreadsheet_pivot_core", SpreadsheetPivotCorePlugin).add("tableStyle", TableStylePlugin);
65507
+ 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);
65508
+ 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);
65509
+ 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);
65489
65510
 
65490
65511
  //#endregion
65491
65512
  //#region src/registries/auto_completes/data_validation_auto_complete.ts
@@ -72283,6 +72304,11 @@ stores.inject(MyMetaStore, storeInstance);
72283
72304
  `;
72284
72305
  }
72285
72306
  function insertText(text, fontColor = "000000", fontsize = 16, style = {}) {
72307
+ const textProperties = [
72308
+ ["b", style.bold ? "1" : "0"],
72309
+ ["i", style.italic ? "1" : "0"],
72310
+ ["sz", fontsize * 100]
72311
+ ];
72286
72312
  return escapeXml`
72287
72313
  <c:tx>
72288
72314
  <c:rich>
@@ -72290,13 +72316,13 @@ stores.inject(MyMetaStore, storeInstance);
72290
72316
  <a:lstStyle />
72291
72317
  <a:p>
72292
72318
  <a:pPr lvl="0">
72293
- <a:defRPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}">
72319
+ <a:defRPr ${formatAttributes(textProperties)}>
72294
72320
  ${solidFill(fontColor)}
72295
72321
  <a:latin typeface="+mn-lt"/>
72296
72322
  </a:defRPr>
72297
72323
  </a:pPr>
72298
72324
  <a:r> <!-- Runs -->
72299
- <a:rPr b="${style?.bold ? 1 : 0}" i="${style?.italic ? 1 : 0}" sz="${fontsize * 100}"/>
72325
+ <a:rPr ${formatAttributes(textProperties)}/>
72300
72326
  <a:t>${text}</a:t>
72301
72327
  </a:r>
72302
72328
  </a:p>
@@ -84504,8 +84530,8 @@ exports.stores = stores;
84504
84530
  exports.tokenColors = tokenColors;
84505
84531
  exports.tokenize = tokenize;
84506
84532
 
84507
- __info__.version = "19.3.4";
84508
- __info__.date = "2026-05-15T07:07:34.417Z";
84509
- __info__.hash = "1dc7b42";
84533
+ __info__.version = "19.3.6";
84534
+ __info__.date = "2026-06-06T06:24:22.727Z";
84535
+ __info__.hash = "0fe939b";
84510
84536
 
84511
84537
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);