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