@mog-sdk/node 0.1.10 → 0.1.12

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.
package/dist/index.js CHANGED
@@ -272,36 +272,6 @@ var init_errors = __esm({
272
272
  }
273
273
  });
274
274
 
275
- // ../../contracts/src/document/protection.ts
276
- var DEFAULT_PROTECTION_OPTIONS, DEFAULT_WORKBOOK_PROTECTION_OPTIONS;
277
- var init_protection = __esm({
278
- "../../contracts/src/document/protection.ts"() {
279
- "use strict";
280
- init_esm_shims();
281
- DEFAULT_PROTECTION_OPTIONS = {
282
- // Selection defaults to true (users can always select cells)
283
- selectLockedCells: true,
284
- selectUnlockedCells: true,
285
- // All other operations blocked by default
286
- insertRows: false,
287
- insertColumns: false,
288
- deleteRows: false,
289
- deleteColumns: false,
290
- formatCells: false,
291
- formatColumns: false,
292
- formatRows: false,
293
- sort: false,
294
- useAutoFilter: false,
295
- usePivotTableReports: false,
296
- editObjects: false,
297
- editScenarios: false
298
- };
299
- DEFAULT_WORKBOOK_PROTECTION_OPTIONS = {
300
- structure: true
301
- };
302
- }
303
- });
304
-
305
275
  // ../../infra/transport/src/command-metadata.gen.ts
306
276
  var BYTES_TUPLE_COMMANDS, RECALC_COMMANDS;
307
277
  var init_command_metadata_gen = __esm({
@@ -1311,6 +1281,106 @@ var init_schemas = __esm({
1311
1281
  }
1312
1282
  });
1313
1283
 
1284
+ // ../../kernel/src/api/worksheet/change-accumulator.ts
1285
+ function colToLetter(col) {
1286
+ let result = "";
1287
+ let c = col;
1288
+ while (c >= 0) {
1289
+ result = String.fromCharCode(c % 26 + 65) + result;
1290
+ c = Math.floor(c / 26) - 1;
1291
+ }
1292
+ return result;
1293
+ }
1294
+ function toA1(row, col) {
1295
+ return `${colToLetter(col)}${row + 1}`;
1296
+ }
1297
+ var ChangeAccumulator;
1298
+ var init_change_accumulator = __esm({
1299
+ "../../kernel/src/api/worksheet/change-accumulator.ts"() {
1300
+ "use strict";
1301
+ init_esm_shims();
1302
+ ChangeAccumulator = class {
1303
+ constructor() {
1304
+ this.trackers = /* @__PURE__ */ new Set();
1305
+ /**
1306
+ * Pending direct edits set before a mutation, consumed by the next ingest().
1307
+ * Since JS is single-threaded, setDirectEdits() before the bridge call
1308
+ * guarantees these are consumed by the corresponding ingest().
1309
+ */
1310
+ this.pendingDirectEdits = null;
1311
+ }
1312
+ /**
1313
+ * Set the direct edit positions for the next mutation.
1314
+ * Called by cell-operations before triggering the bridge call.
1315
+ * Consumed (cleared) by the next ingest() call.
1316
+ */
1317
+ setDirectEdits(edits) {
1318
+ this.pendingDirectEdits = edits;
1319
+ }
1320
+ /**
1321
+ * Called by MutationResultHandler after every mutation.
1322
+ *
1323
+ * @param changedCells - RecalcResult.changedCells from the MutationResult
1324
+ * @param directEdits - The (sheetId, row, col) tuples that were directly written
1325
+ * (to distinguish direct vs cascade)
1326
+ * @param source - user or remote
1327
+ */
1328
+ ingest(changedCells, directEdits, source) {
1329
+ if (this.trackers.size === 0) {
1330
+ this.pendingDirectEdits = null;
1331
+ return;
1332
+ }
1333
+ if (changedCells.length === 0) {
1334
+ this.pendingDirectEdits = null;
1335
+ return;
1336
+ }
1337
+ const edits = directEdits ?? this.pendingDirectEdits;
1338
+ this.pendingDirectEdits = null;
1339
+ const directSet = /* @__PURE__ */ new Set();
1340
+ if (edits) {
1341
+ for (const e of edits) {
1342
+ directSet.add(`${e.sheetId}:${e.row}:${e.col}`);
1343
+ }
1344
+ }
1345
+ const recordsBySheet = /* @__PURE__ */ new Map();
1346
+ for (const cell of changedCells) {
1347
+ const key = `${cell.sheetId}:${cell.row}:${cell.col}`;
1348
+ const origin = source === "remote" ? "remote" : directSet.has(key) ? "direct" : "cascade";
1349
+ const record = {
1350
+ address: toA1(cell.row, cell.col),
1351
+ row: cell.row,
1352
+ col: cell.col,
1353
+ origin,
1354
+ type: "modified"
1355
+ };
1356
+ let list = recordsBySheet.get(cell.sheetId);
1357
+ if (!list) {
1358
+ list = [];
1359
+ recordsBySheet.set(cell.sheetId, list);
1360
+ }
1361
+ list.push(record);
1362
+ }
1363
+ for (const tracker of this.trackers) {
1364
+ const records = recordsBySheet.get(tracker.sheetId);
1365
+ if (records && records.length > 0) {
1366
+ tracker._ingest(records);
1367
+ }
1368
+ }
1369
+ }
1370
+ register(tracker) {
1371
+ this.trackers.add(tracker);
1372
+ }
1373
+ unregister(tracker) {
1374
+ this.trackers.delete(tracker);
1375
+ }
1376
+ /** Number of active trackers. */
1377
+ get activeCount() {
1378
+ return this.trackers.size;
1379
+ }
1380
+ };
1381
+ }
1382
+ });
1383
+
1314
1384
  // ../../kernel/src/bridges/mutation-result-handler.ts
1315
1385
  function resolvedPosition(row, col) {
1316
1386
  if (row === POSITION_SENTINEL || col === POSITION_SENTINEL) {
@@ -1323,6 +1393,7 @@ var init_mutation_result_handler = __esm({
1323
1393
  "../../kernel/src/bridges/mutation-result-handler.ts"() {
1324
1394
  "use strict";
1325
1395
  init_esm_shims();
1396
+ init_change_accumulator();
1326
1397
  POSITION_SENTINEL = 4294967295;
1327
1398
  MutationResultHandler = class {
1328
1399
  constructor(eventBus, onUndoDescription) {
@@ -1332,6 +1403,7 @@ var init_mutation_result_handler = __esm({
1332
1403
  this.errorCallbacks = [];
1333
1404
  this.eventBus = eventBus;
1334
1405
  this.onUndoDescription = onUndoDescription;
1406
+ this.changeAccumulator = new ChangeAccumulator();
1335
1407
  }
1336
1408
  /** Set the ViewportCoordinatorRegistry for per-viewport dimension patching. */
1337
1409
  setCoordinatorRegistry(registry2) {
@@ -1353,8 +1425,9 @@ var init_mutation_result_handler = __esm({
1353
1425
  *
1354
1426
  * @param result - MutationResult from a Rust IPC command
1355
1427
  * @param source - Whether this mutation originated from the local user or remote collaboration
1428
+ * @param directEdits - Optional positions of directly-written cells (to distinguish direct vs cascade)
1356
1429
  */
1357
- applyAndNotify(result, source = "user") {
1430
+ applyAndNotify(result, source = "user", directEdits) {
1358
1431
  if (result.recalc) {
1359
1432
  this.handleRecalcResult(result.recalc, source);
1360
1433
  }
@@ -1415,6 +1488,9 @@ var init_mutation_result_handler = __esm({
1415
1488
  if (result.undoDescription) {
1416
1489
  this.handleUndoDescription(result.undoDescription);
1417
1490
  }
1491
+ if (this.changeAccumulator.activeCount > 0 && result.recalc?.changedCells?.length) {
1492
+ this.changeAccumulator.ingest(result.recalc.changedCells, directEdits ?? null, source);
1493
+ }
1418
1494
  }
1419
1495
  /**
1420
1496
  * Register an error callback for mutation failures.
@@ -2104,101 +2180,6 @@ var init_mutation_result_handler = __esm({
2104
2180
  }
2105
2181
  });
2106
2182
 
2107
- // ../../contracts/src/core/commands.ts
2108
- var init_commands = __esm({
2109
- "../../contracts/src/core/commands.ts"() {
2110
- "use strict";
2111
- init_esm_shims();
2112
- }
2113
- });
2114
-
2115
- // ../../contracts/src/core/core.ts
2116
- var init_core2 = __esm({
2117
- "../../contracts/src/core/core.ts"() {
2118
- "use strict";
2119
- init_esm_shims();
2120
- }
2121
- });
2122
-
2123
- // ../../contracts/src/core/disposable.ts
2124
- var init_disposable = __esm({
2125
- "../../contracts/src/core/disposable.ts"() {
2126
- "use strict";
2127
- init_esm_shims();
2128
- }
2129
- });
2130
-
2131
- // ../../contracts/src/core/event-base.ts
2132
- var init_event_base = __esm({
2133
- "../../contracts/src/core/event-base.ts"() {
2134
- "use strict";
2135
- init_esm_shims();
2136
- }
2137
- });
2138
-
2139
- // ../../contracts/src/core/execution.ts
2140
- var init_execution = __esm({
2141
- "../../contracts/src/core/execution.ts"() {
2142
- "use strict";
2143
- init_esm_shims();
2144
- }
2145
- });
2146
-
2147
- // ../../contracts/src/core/result.ts
2148
- var init_result = __esm({
2149
- "../../contracts/src/core/result.ts"() {
2150
- "use strict";
2151
- init_esm_shims();
2152
- }
2153
- });
2154
-
2155
- // ../../contracts/src/core/schema.ts
2156
- var init_schema = __esm({
2157
- "../../contracts/src/core/schema.ts"() {
2158
- "use strict";
2159
- init_esm_shims();
2160
- }
2161
- });
2162
-
2163
- // ../../contracts/src/core/formatted-text.ts
2164
- function asFormattedText(s) {
2165
- return s;
2166
- }
2167
- function displayStringOrNull(text) {
2168
- return text;
2169
- }
2170
- var init_formatted_text = __esm({
2171
- "../../contracts/src/core/formatted-text.ts"() {
2172
- "use strict";
2173
- init_esm_shims();
2174
- }
2175
- });
2176
-
2177
- // ../../contracts/src/core/testing.ts
2178
- var init_testing = __esm({
2179
- "../../contracts/src/core/testing.ts"() {
2180
- "use strict";
2181
- init_esm_shims();
2182
- }
2183
- });
2184
-
2185
- // ../../contracts/src/core/index.ts
2186
- var init_core3 = __esm({
2187
- "../../contracts/src/core/index.ts"() {
2188
- "use strict";
2189
- init_esm_shims();
2190
- init_commands();
2191
- init_core2();
2192
- init_disposable();
2193
- init_event_base();
2194
- init_execution();
2195
- init_result();
2196
- init_schema();
2197
- init_formatted_text();
2198
- init_testing();
2199
- }
2200
- });
2201
-
2202
2183
  // ../../kernel/src/bridges/wire/constants.gen.ts
2203
2184
  var HEADER_SIZE, CELL_STRIDE, MERGE_STRIDE, DIM_STRIDE, NO_STRING, MUTATION_HEADER_SIZE, PATCH_STRIDE, OFF_NUMBER_VALUE, OFF_DISPLAY_OFF, OFF_ERROR_OFF, OFF_FLAGS, OFF_FORMAT_IDX, OFF_DISPLAY_LEN, OFF_ERROR_LEN, OFF_BG_COLOR_OVERRIDE, OFF_FONT_COLOR_OVERRIDE, DATA_BAR_ENTRY_STRIDE, ICON_ENTRY_STRIDE, MUT_HAS_PROJECTION_CHANGES, MUT_HAS_ERRORS, MUT_HAS_PALETTE, ICON_SET_NAMES;
2204
2185
  var init_constants_gen = __esm({
@@ -2256,12 +2237,12 @@ var init_constants_gen = __esm({
2256
2237
  });
2257
2238
 
2258
2239
  // ../../kernel/src/bridges/wire/binary-mutation-reader.ts
2240
+ import { asFormattedText } from "@mog-sdk/spreadsheet-contracts/core";
2259
2241
  var sharedDecoder, BinaryMutationReader;
2260
2242
  var init_binary_mutation_reader = __esm({
2261
2243
  "../../kernel/src/bridges/wire/binary-mutation-reader.ts"() {
2262
2244
  "use strict";
2263
2245
  init_esm_shims();
2264
- init_core3();
2265
2246
  init_constants_gen();
2266
2247
  sharedDecoder = new TextDecoder("utf-8");
2267
2248
  BinaryMutationReader = class {
@@ -2555,6 +2536,7 @@ var init_binary_mutation_reader = __esm({
2555
2536
  });
2556
2537
 
2557
2538
  // ../../kernel/src/bridges/wire/binary-viewport-buffer.ts
2539
+ import { asFormattedText as asFormattedText2, displayStringOrNull } from "@mog-sdk/spreadsheet-contracts/core";
2558
2540
  function rgbaU32ToHex(value) {
2559
2541
  const r = value >>> 24 & 255;
2560
2542
  const g = value >>> 16 & 255;
@@ -2566,7 +2548,6 @@ var init_binary_viewport_buffer = __esm({
2566
2548
  "../../kernel/src/bridges/wire/binary-viewport-buffer.ts"() {
2567
2549
  "use strict";
2568
2550
  init_esm_shims();
2569
- init_core3();
2570
2551
  init_constants_gen();
2571
2552
  init_constants_gen();
2572
2553
  sharedEncoder = new TextEncoder();
@@ -3663,7 +3644,7 @@ var init_binary_viewport_buffer = __esm({
3663
3644
  */
3664
3645
  get displayText() {
3665
3646
  const decoded = this._buffer.getOrDecodeString(this._displayOff, this._displayLen);
3666
- return decoded !== null ? asFormattedText(decoded) : null;
3647
+ return decoded !== null ? asFormattedText2(decoded) : null;
3667
3648
  }
3668
3649
  /**
3669
3650
  * Get the error text for the current cell.
@@ -3722,6 +3703,7 @@ var init_binary_viewport_buffer = __esm({
3722
3703
  });
3723
3704
 
3724
3705
  // ../../kernel/src/bridges/wire/viewport-coordinator.ts
3706
+ import { displayStringOrNull as displayStringOrNull2 } from "@mog-sdk/spreadsheet-contracts/core";
3725
3707
  function cellKey(row, col) {
3726
3708
  return `${row},${col}`;
3727
3709
  }
@@ -3731,7 +3713,6 @@ var init_viewport_coordinator = __esm({
3731
3713
  "use strict";
3732
3714
  init_esm_shims();
3733
3715
  init_binary_viewport_buffer();
3734
- init_core3();
3735
3716
  ViewportCoordinator = class {
3736
3717
  constructor(viewportId) {
3737
3718
  /** Monotonically increasing version, incremented on every write. */
@@ -3852,7 +3833,7 @@ var init_viewport_coordinator = __esm({
3852
3833
  flags: reader.patchFlags(i),
3853
3834
  numberValue: reader.patchNumberValue(i),
3854
3835
  formatIdx: reader.patchFormatIdx(i),
3855
- displayString: displayStringOrNull(reader.patchDisplayText(i)),
3836
+ displayString: displayStringOrNull2(reader.patchDisplayText(i)),
3856
3837
  errorString: reader.patchErrorText(i),
3857
3838
  bgColorOverride: reader.patchBgColorOverride(i),
3858
3839
  fontColorOverride: reader.patchFontColorOverride(i),
@@ -3869,7 +3850,7 @@ var init_viewport_coordinator = __esm({
3869
3850
  flags: reader.spillPatchFlags(i),
3870
3851
  numberValue: reader.spillPatchNumberValue(i),
3871
3852
  formatIdx: reader.spillPatchFormatIdx(i),
3872
- displayString: displayStringOrNull(reader.spillPatchDisplayText(i)),
3853
+ displayString: displayStringOrNull2(reader.spillPatchDisplayText(i)),
3873
3854
  errorString: reader.spillPatchErrorText(i),
3874
3855
  bgColorOverride: reader.spillPatchBgColorOverride(i),
3875
3856
  fontColorOverride: reader.spillPatchFontColorOverride(i),
@@ -5978,6 +5959,9 @@ var init_compute_bridge_gen = __esm({
5978
5959
  getCellFormatWithCf(sheetId, cellId, row, col) {
5979
5960
  return this.core.query(this.core.transport.call("compute_get_cell_format_with_cf", { docId: this.core.docId, sheetId, cellId, row, col }));
5980
5961
  }
5962
+ getResolvedFormat(sheetId, row, col) {
5963
+ return this.core.query(this.core.transport.call("compute_get_resolved_format", { docId: this.core.docId, sheetId, row, col }));
5964
+ }
5981
5965
  setCellFormat(sheetId, cellId, format) {
5982
5966
  return this.core.mutatePlain(this.core.transport.call("compute_set_cell_format", { docId: this.core.docId, sheetId, cellId, format }));
5983
5967
  }
@@ -6727,6 +6711,7 @@ __export(compute_bridge_exports, {
6727
6711
  wireTableToTableConfig: () => wireTableToTableConfig,
6728
6712
  wireToIdentityFormula: () => wireToIdentityFormula
6729
6713
  });
6714
+ import { DEFAULT_PROTECTION_OPTIONS } from "@mog-sdk/spreadsheet-contracts/protection";
6730
6715
  function emptyMutationResult() {
6731
6716
  return {
6732
6717
  recalc: {
@@ -6797,7 +6782,6 @@ var init_compute_bridge = __esm({
6797
6782
  "use strict";
6798
6783
  init_esm_shims();
6799
6784
  init_formula_string();
6800
- init_protection();
6801
6785
  init_src();
6802
6786
  init_compute_wire_converters();
6803
6787
  init_compute_core();
@@ -7223,65 +7207,8 @@ var init_compute_bridge = __esm({
7223
7207
  }
7224
7208
  });
7225
7209
 
7226
- // ../../contracts/src/rendering/grid-renderer.ts
7227
- var init_grid_renderer = __esm({
7228
- "../../contracts/src/rendering/grid-renderer.ts"() {
7229
- "use strict";
7230
- init_esm_shims();
7231
- }
7232
- });
7233
-
7234
- // ../../contracts/src/rendering/constants.ts
7235
- var DEFAULT_COL_WIDTH_WINDOWS, DEFAULT_COL_WIDTH_MACOS, _isMac, DEFAULT_COL_WIDTH;
7236
- var init_constants = __esm({
7237
- "../../contracts/src/rendering/constants.ts"() {
7238
- "use strict";
7239
- init_esm_shims();
7240
- DEFAULT_COL_WIDTH_WINDOWS = 64;
7241
- DEFAULT_COL_WIDTH_MACOS = 72;
7242
- _isMac = typeof navigator !== "undefined" && /Mac/.test(navigator.platform ?? "");
7243
- DEFAULT_COL_WIDTH = _isMac ? DEFAULT_COL_WIDTH_MACOS : DEFAULT_COL_WIDTH_WINDOWS;
7244
- }
7245
- });
7246
-
7247
- // ../../contracts/src/rendering/data-sources.ts
7248
- var DEFAULT_CHROME_THEME;
7249
- var init_data_sources = __esm({
7250
- "../../contracts/src/rendering/data-sources.ts"() {
7251
- "use strict";
7252
- init_esm_shims();
7253
- DEFAULT_CHROME_THEME = {
7254
- canvasBackground: "#ffffff",
7255
- gridlineColor: "#e0e0e0",
7256
- headerBackground: "#f8f9fa",
7257
- headerText: "#333333",
7258
- headerBorder: "#dadce0",
7259
- headerHighlightBackground: "#e8eaed",
7260
- headerHighlightText: "#1a73e8",
7261
- selectionFill: "rgba(66, 133, 244, 0.1)",
7262
- selectionBorder: "#4285f4",
7263
- activeCellBorder: "#1a73e8",
7264
- fillHandleColor: "#4285f4",
7265
- dragSourceColor: "rgba(66, 133, 244, 0.15)",
7266
- dragTargetColor: "#4285f4",
7267
- scrollbarTrack: "#f1f1f1",
7268
- scrollbarThumb: "#c1c1c1"
7269
- };
7270
- }
7271
- });
7272
-
7273
- // ../../contracts/src/rendering/index.ts
7274
- var init_rendering = __esm({
7275
- "../../contracts/src/rendering/index.ts"() {
7276
- "use strict";
7277
- init_esm_shims();
7278
- init_grid_renderer();
7279
- init_constants();
7280
- init_data_sources();
7281
- }
7282
- });
7283
-
7284
7210
  // ../../kernel/src/domain/sheets/sheet-meta-defaults.ts
7211
+ import { DEFAULT_COL_WIDTH as _PLATFORM_COL_WIDTH } from "@mog-sdk/spreadsheet-contracts/rendering";
7285
7212
  function getSheetMetaDefault(field) {
7286
7213
  const def = SHEET_META_SCHEMA[field];
7287
7214
  return def.default;
@@ -7291,9 +7218,8 @@ var init_sheet_meta_defaults = __esm({
7291
7218
  "../../kernel/src/domain/sheets/sheet-meta-defaults.ts"() {
7292
7219
  "use strict";
7293
7220
  init_esm_shims();
7294
- init_rendering();
7295
7221
  SHEET_META_DEFAULT_ROW_HEIGHT = 20;
7296
- SHEET_META_DEFAULT_COL_WIDTH = DEFAULT_COL_WIDTH;
7222
+ SHEET_META_DEFAULT_COL_WIDTH = _PLATFORM_COL_WIDTH;
7297
7223
  SHEET_META_DEFAULT_GRIDLINE_COLOR = "#e2e2e2";
7298
7224
  SHEET_META_SCHEMA = {
7299
7225
  // ===========================================================================
@@ -7784,16 +7710,18 @@ var init_core_defaults = __esm({
7784
7710
  async function getMeta(ctx, sheetId) {
7785
7711
  const name = await ctx.computeBridge.getSheetName(sheetId);
7786
7712
  if (name === null) return void 0;
7787
- const [frozen, tabColor, hidden] = await Promise.all([
7713
+ const [frozen, tabColor, hidden, defaultRowHeight, defaultColWidth] = await Promise.all([
7788
7714
  ctx.computeBridge.getFrozenPanesQuery(sheetId),
7789
7715
  ctx.computeBridge.getTabColorQuery(sheetId),
7790
- ctx.computeBridge.isSheetHidden(sheetId)
7716
+ ctx.computeBridge.isSheetHidden(sheetId),
7717
+ ctx.computeBridge.getDefaultRowHeight(sheetId),
7718
+ ctx.computeBridge.getDefaultColWidth(sheetId)
7791
7719
  ]);
7792
7720
  return {
7793
7721
  id: sheetId,
7794
7722
  name,
7795
- defaultRowHeight: 20,
7796
- defaultColWidth: 100,
7723
+ defaultRowHeight,
7724
+ defaultColWidth,
7797
7725
  frozenRows: frozen.rows,
7798
7726
  frozenCols: frozen.cols,
7799
7727
  tabColor: tabColor ?? void 0,
@@ -7820,6 +7748,7 @@ var init_sheet_meta = __esm({
7820
7748
  });
7821
7749
 
7822
7750
  // ../../spreadsheet-utils/src/range.ts
7751
+ import { MAX_COLS, MAX_ROWS } from "@mog-sdk/spreadsheet-contracts/core";
7823
7752
  function normalizeRange(range2) {
7824
7753
  return {
7825
7754
  startRow: Math.min(range2.startRow, range2.endRow),
@@ -7835,12 +7764,11 @@ var init_range = __esm({
7835
7764
  "../../spreadsheet-utils/src/range.ts"() {
7836
7765
  "use strict";
7837
7766
  init_esm_shims();
7838
- init_core3();
7839
7767
  }
7840
7768
  });
7841
7769
 
7842
7770
  // ../../spreadsheet-utils/src/a1.ts
7843
- function colToLetter2(col) {
7771
+ function colToLetter3(col) {
7844
7772
  if (col < 0) {
7845
7773
  throw new Error("Column number must be >= 0");
7846
7774
  }
@@ -7860,8 +7788,8 @@ function letterToCol(letters) {
7860
7788
  }
7861
7789
  return result - 1;
7862
7790
  }
7863
- function toA1(row, col) {
7864
- return `${colToLetter2(col)}${row + 1}`;
7791
+ function toA12(row, col) {
7792
+ return `${colToLetter3(col)}${row + 1}`;
7865
7793
  }
7866
7794
  function parseCellAddress(ref) {
7867
7795
  const match = ref.match(CELL_ADDRESS_REGEX);
@@ -9292,7 +9220,7 @@ var init_data_extractor = __esm({
9292
9220
  });
9293
9221
 
9294
9222
  // ../../charts/src/core/index.ts
9295
- var init_core4 = __esm({
9223
+ var init_core2 = __esm({
9296
9224
  "../../charts/src/core/index.ts"() {
9297
9225
  "use strict";
9298
9226
  init_esm_shims();
@@ -13276,7 +13204,7 @@ var init_src2 = __esm({
13276
13204
  "../../charts/src/index.ts"() {
13277
13205
  "use strict";
13278
13206
  init_esm_shims();
13279
- init_core4();
13207
+ init_core2();
13280
13208
  init_primitives();
13281
13209
  init_compiler();
13282
13210
  }
@@ -16352,7 +16280,7 @@ function toDisposable(fn) {
16352
16280
  return disposable;
16353
16281
  }
16354
16282
  var DisposableBase, DisposableStore, DisposableNone;
16355
- var init_disposable2 = __esm({
16283
+ var init_disposable = __esm({
16356
16284
  "../../spreadsheet-utils/src/disposable.ts"() {
16357
16285
  "use strict";
16358
16286
  init_esm_shims();
@@ -16416,7 +16344,7 @@ function ok(value) {
16416
16344
  function err(error) {
16417
16345
  return { ok: false, error };
16418
16346
  }
16419
- var init_result2 = __esm({
16347
+ var init_result = __esm({
16420
16348
  "../../spreadsheet-utils/src/result.ts"() {
16421
16349
  "use strict";
16422
16350
  init_esm_shims();
@@ -16429,7 +16357,7 @@ var init_subscribable = __esm({
16429
16357
  "../../kernel/src/services/primitives/subscribable.ts"() {
16430
16358
  "use strict";
16431
16359
  init_esm_shims();
16432
- init_disposable2();
16360
+ init_disposable();
16433
16361
  Subscribable = class extends DisposableBase {
16434
16362
  constructor() {
16435
16363
  super(...arguments);
@@ -16489,7 +16417,7 @@ var init_event_emitter = __esm({
16489
16417
  "../../kernel/src/services/primitives/event-emitter.ts"() {
16490
16418
  "use strict";
16491
16419
  init_esm_shims();
16492
- init_disposable2();
16420
+ init_disposable();
16493
16421
  TypedEventEmitter = class extends DisposableBase {
16494
16422
  constructor() {
16495
16423
  super(...arguments);
@@ -16554,8 +16482,8 @@ var init_primitives3 = __esm({
16554
16482
  "../../kernel/src/services/primitives/index.ts"() {
16555
16483
  "use strict";
16556
16484
  init_esm_shims();
16557
- init_disposable2();
16558
- init_result2();
16485
+ init_disposable();
16486
+ init_result();
16559
16487
  init_subscribable();
16560
16488
  init_event_emitter();
16561
16489
  }
@@ -24605,34 +24533,8 @@ var init_equation_bridge = __esm({
24605
24533
  }
24606
24534
  });
24607
24535
 
24608
- // ../../contracts/src/bridges/ink-recognition-bridge.ts
24609
- var DEFAULT_RECOGNITION_THRESHOLDS;
24610
- var init_ink_recognition_bridge = __esm({
24611
- "../../contracts/src/bridges/ink-recognition-bridge.ts"() {
24612
- "use strict";
24613
- init_esm_shims();
24614
- DEFAULT_RECOGNITION_THRESHOLDS = {
24615
- line: 0.7,
24616
- rectangle: 0.65,
24617
- ellipse: 0.7,
24618
- triangle: 0.6,
24619
- arrow: 0.6,
24620
- star: 0.65,
24621
- text: 0.5
24622
- };
24623
- }
24624
- });
24625
-
24626
- // ../../contracts/src/bridges/index.ts
24627
- var init_bridges = __esm({
24628
- "../../contracts/src/bridges/index.ts"() {
24629
- "use strict";
24630
- init_esm_shims();
24631
- init_ink_recognition_bridge();
24632
- }
24633
- });
24634
-
24635
24536
  // ../../kernel/src/domain/drawing/ink-recognition-bridge.ts
24537
+ import { DEFAULT_RECOGNITION_THRESHOLDS } from "@mog-sdk/spreadsheet-contracts/bridges";
24636
24538
  function createInkRecognitionBridge(initialThresholds) {
24637
24539
  let thresholds = {
24638
24540
  ...DEFAULT_RECOGNITION_THRESHOLDS,
@@ -25048,11 +24950,10 @@ async function recognizeWithBrowserAPI(strokes) {
25048
24950
  }
25049
24951
  return null;
25050
24952
  }
25051
- var init_ink_recognition_bridge2 = __esm({
24953
+ var init_ink_recognition_bridge = __esm({
25052
24954
  "../../kernel/src/domain/drawing/ink-recognition-bridge.ts"() {
25053
24955
  "use strict";
25054
24956
  init_esm_shims();
25055
- init_bridges();
25056
24957
  }
25057
24958
  });
25058
24959
 
@@ -30065,7 +29966,7 @@ var init_arrows = __esm({
30065
29966
 
30066
29967
  // ../../canvas/drawing/shapes/src/presets/constants.ts
30067
29968
  var KAPPA;
30068
- var init_constants2 = __esm({
29969
+ var init_constants = __esm({
30069
29970
  "../../canvas/drawing/shapes/src/presets/constants.ts"() {
30070
29971
  "use strict";
30071
29972
  init_esm_shims();
@@ -30089,7 +29990,7 @@ var init_primitives4 = __esm({
30089
29990
  "use strict";
30090
29991
  init_esm_shims();
30091
29992
  init_src3();
30092
- init_constants2();
29993
+ init_constants();
30093
29994
  }
30094
29995
  });
30095
29996
 
@@ -30099,7 +30000,7 @@ var init_basic = __esm({
30099
30000
  "use strict";
30100
30001
  init_esm_shims();
30101
30002
  init_src3();
30102
- init_constants2();
30003
+ init_constants();
30103
30004
  init_primitives4();
30104
30005
  init_registry3();
30105
30006
  init_primitives4();
@@ -70172,438 +70073,21 @@ var init_rules = __esm({
70172
70073
  }
70173
70074
  });
70174
70075
 
70175
- // ../../contracts/src/smartart/layouts.ts
70176
- var init_layouts2 = __esm({
70177
- "../../contracts/src/smartart/layouts.ts"() {
70178
- "use strict";
70179
- init_esm_shims();
70180
- }
70181
- });
70182
-
70183
- // ../../contracts/src/smartart/ooxml-algorithm-types.ts
70184
- var ParameterId, VALID_PARAMS_BY_ALGORITHM;
70185
- var init_ooxml_algorithm_types = __esm({
70186
- "../../contracts/src/smartart/ooxml-algorithm-types.ts"() {
70187
- "use strict";
70188
- init_esm_shims();
70189
- ParameterId = {
70190
- // ── Alignment Parameters ──────────────────────────────────────────────────
70191
- /** Horizontal alignment of children within the layout area. */
70192
- horzAlign: "horzAlign",
70193
- /** Vertical alignment of children within the layout area. */
70194
- vertAlign: "vertAlign",
70195
- /** Horizontal alignment for individual nodes (hierarchy algorithms). */
70196
- nodeHorzAlign: "nodeHorzAlign",
70197
- /** Vertical alignment for individual nodes (hierarchy algorithms). */
70198
- nodeVertAlign: "nodeVertAlign",
70199
- /** Hierarchy alignment (16 possible values for tree orientation). */
70200
- hierAlign: "hierAlign",
70201
- /** Text alignment (whether text should be aligned with shape). */
70202
- alignTx: "alignTx",
70203
- // ── Direction Parameters ──────────────────────────────────────────────────
70204
- /** Child direction (horizontal or vertical arrangement of children). */
70205
- chDir: "chDir",
70206
- /** Child alignment (how children align on the cross-axis). */
70207
- chAlign: "chAlign",
70208
- /** Secondary child alignment (for complex hierarchy layouts). */
70209
- secChAlign: "secChAlign",
70210
- /** Linear direction (which edge children flow from). */
70211
- linDir: "linDir",
70212
- /** Secondary linear direction (for complex hierarchy layouts). */
70213
- secLinDir: "secLinDir",
70214
- /** Text direction (horizontal or vertical text blocks). */
70215
- txDir: "txDir",
70216
- /** Text block direction (horizontal or vertical text flow). */
70217
- txBlDir: "txBlDir",
70218
- /** Growth direction (which corner the snake starts from). */
70219
- grDir: "grDir",
70220
- /** Flow direction (whether snake flows by row or column). */
70221
- flowDir: "flowDir",
70222
- /** Continue direction (same direction or reversed for each row). */
70223
- contDir: "contDir",
70224
- // ── Connector Parameters ──────────────────────────────────────────────────
70225
- /** Connector routing style (straight, bend, curve, long curve). */
70226
- connRout: "connRout",
70227
- /** Beginning/start arrowhead style for connectors. */
70228
- begSty: "begSty",
70229
- /** Ending arrowhead style for connectors. */
70230
- endSty: "endSty",
70231
- /** Connector dimension (1D, 2D, or custom). */
70232
- dim: "dim",
70233
- /** Source node name for connector routing. */
70234
- srcNode: "srcNode",
70235
- /** Destination node name for connector routing. */
70236
- dstNode: "dstNode",
70237
- /** Beginning connection points (which points on the source shape). */
70238
- begPts: "begPts",
70239
- /** Ending connection points (which points on the destination shape). */
70240
- endPts: "endPts",
70241
- /** Bend point position for right-angle connectors. */
70242
- bendPt: "bendPt",
70243
- // ── Cycle/Circular Parameters ─────────────────────────────────────────────
70244
- /** Start angle in degrees for cycle algorithm. */
70245
- stAng: "stAng",
70246
- /** Span angle in degrees for cycle algorithm. */
70247
- spanAng: "spanAng",
70248
- /** Rotation path (none or along the circular path). */
70249
- rotPath: "rotPath",
70250
- /** Center shape mapping (whether first node goes to center). */
70251
- ctrShpMap: "ctrShpMap",
70252
- // ── Snake Parameters ──────────────────────────────────────────────────────
70253
- /** Breakpoint logic for snake wrapping (end of canvas, balanced, fixed). */
70254
- bkpt: "bkpt",
70255
- /** Breakpoint fixed value (number of items per row when bkpt=fixed). */
70256
- bkPtFixedVal: "bkPtFixedVal",
70257
- /** Offset mode for staggered rows in snake layout. */
70258
- off: "off",
70259
- // ── Linear/Sequence Parameters ────────────────────────────────────────────
70260
- /** Starting element index (which node type starts the alternating sequence). */
70261
- stElem: "stElem",
70262
- /** Starting bullet level for text algorithm. */
70263
- stBulletLvl: "stBulletLvl",
70264
- // ── Pyramid Parameters ────────────────────────────────────────────────────
70265
- /** Pyramid accent position (before or after the level). */
70266
- pyraAcctPos: "pyraAcctPos",
70267
- /** Pyramid accent text margin (step or stack behavior). */
70268
- pyraAcctTxMar: "pyraAcctTxMar",
70269
- /** Pyramid level node name. */
70270
- pyraLvlNode: "pyraLvlNode",
70271
- /** Pyramid accent background node name. */
70272
- pyraAcctBkgdNode: "pyraAcctBkgdNode",
70273
- /** Pyramid accent text node name. */
70274
- pyraAcctTxNode: "pyraAcctTxNode",
70275
- // ── Text Parameters ───────────────────────────────────────────────────────
70276
- /** Parent text LTR alignment. */
70277
- parTxLTRAlign: "parTxLTRAlign",
70278
- /** Parent text RTL alignment. */
70279
- parTxRTLAlign: "parTxRTLAlign",
70280
- /** Shape text LTR alignment for children. */
70281
- shpTxLTRAlignCh: "shpTxLTRAlignCh",
70282
- /** Shape text RTL alignment for children. */
70283
- shpTxRTLAlignCh: "shpTxRTLAlignCh",
70284
- /** Text anchor horizontal position. */
70285
- txAnchorHorz: "txAnchorHorz",
70286
- /** Text anchor vertical position. */
70287
- txAnchorVert: "txAnchorVert",
70288
- /** Text anchor horizontal position for children. */
70289
- txAnchorHorzCh: "txAnchorHorzCh",
70290
- /** Text anchor vertical position for children. */
70291
- txAnchorVertCh: "txAnchorVertCh",
70292
- /** Auto text rotation mode (none, upright, gravity-based). */
70293
- autoTxRot: "autoTxRot",
70294
- // ── Spacing & Sizing Parameters ───────────────────────────────────────────
70295
- /** Aspect ratio value. */
70296
- ar: "ar",
70297
- /** Line spacing for parent text (percentage). */
70298
- lnSpPar: "lnSpPar",
70299
- /** Line spacing after parent paragraph (percentage). */
70300
- lnSpAfParP: "lnSpAfParP",
70301
- /** Line spacing for child text (percentage). */
70302
- lnSpCh: "lnSpCh",
70303
- /** Line spacing after child paragraph (percentage). */
70304
- lnSpAfChP: "lnSpAfChP",
70305
- // ── Hierarchy-Specific Parameters ─────────────────────────────────────────
70306
- /** Root short distance flag (hierarchy algorithms). */
70307
- rtShortDist: "rtShortDist",
70308
- // ── Fallback Parameter ────────────────────────────────────────────────────
70309
- /** Fallback dimension for the algorithm. */
70310
- fallback: "fallback"
70311
- };
70312
- VALID_PARAMS_BY_ALGORITHM = {
70313
- composite: [ParameterId.ar],
70314
- lin: [
70315
- ParameterId.linDir,
70316
- ParameterId.chDir,
70317
- ParameterId.chAlign,
70318
- ParameterId.horzAlign,
70319
- ParameterId.vertAlign,
70320
- ParameterId.stElem,
70321
- ParameterId.fallback,
70322
- ParameterId.nodeHorzAlign,
70323
- ParameterId.nodeVertAlign
70324
- ],
70325
- snake: [
70326
- ParameterId.grDir,
70327
- ParameterId.flowDir,
70328
- ParameterId.contDir,
70329
- ParameterId.bkpt,
70330
- ParameterId.bkPtFixedVal,
70331
- ParameterId.off
70332
- ],
70333
- cycle: [ParameterId.stAng, ParameterId.spanAng, ParameterId.rotPath, ParameterId.ctrShpMap],
70334
- hierRoot: [
70335
- ParameterId.hierAlign,
70336
- ParameterId.nodeHorzAlign,
70337
- ParameterId.nodeVertAlign,
70338
- ParameterId.rtShortDist
70339
- ],
70340
- hierChild: [
70341
- ParameterId.chAlign,
70342
- ParameterId.linDir,
70343
- ParameterId.secChAlign,
70344
- ParameterId.secLinDir
70345
- ],
70346
- pyra: [
70347
- ParameterId.linDir,
70348
- ParameterId.txDir,
70349
- ParameterId.pyraAcctPos,
70350
- ParameterId.pyraAcctTxMar,
70351
- ParameterId.pyraLvlNode,
70352
- ParameterId.pyraAcctBkgdNode,
70353
- ParameterId.pyraAcctTxNode
70354
- ],
70355
- conn: [
70356
- ParameterId.srcNode,
70357
- ParameterId.dstNode,
70358
- ParameterId.connRout,
70359
- ParameterId.begSty,
70360
- ParameterId.endSty,
70361
- ParameterId.dim,
70362
- ParameterId.bendPt,
70363
- ParameterId.begPts,
70364
- ParameterId.endPts
70365
- ],
70366
- tx: [
70367
- ParameterId.parTxLTRAlign,
70368
- ParameterId.parTxRTLAlign,
70369
- ParameterId.shpTxLTRAlignCh,
70370
- ParameterId.shpTxRTLAlignCh,
70371
- ParameterId.txAnchorVert,
70372
- ParameterId.txAnchorHorz,
70373
- ParameterId.txAnchorVertCh,
70374
- ParameterId.txAnchorHorzCh,
70375
- ParameterId.txBlDir,
70376
- ParameterId.autoTxRot,
70377
- ParameterId.stBulletLvl,
70378
- ParameterId.lnSpPar,
70379
- ParameterId.lnSpAfParP,
70380
- ParameterId.lnSpCh,
70381
- ParameterId.lnSpAfChP,
70382
- ParameterId.alignTx
70383
- ],
70384
- sp: []
70385
- };
70386
- }
70387
- });
70388
-
70389
- // ../../contracts/src/smartart/ooxml-data-model-types.ts
70390
- var init_ooxml_data_model_types = __esm({
70391
- "../../contracts/src/smartart/ooxml-data-model-types.ts"() {
70392
- "use strict";
70393
- init_esm_shims();
70394
- }
70395
- });
70396
-
70397
- // ../../contracts/src/smartart/ooxml-drawing-types.ts
70398
- var init_ooxml_drawing_types = __esm({
70399
- "../../contracts/src/smartart/ooxml-drawing-types.ts"() {
70400
- "use strict";
70401
- init_esm_shims();
70402
- }
70403
- });
70404
-
70405
- // ../../contracts/src/smartart/ooxml-engine-types.ts
70406
- var POSITIONAL_CONSTRAINT_TYPES, DIMENSIONAL_CONSTRAINT_TYPES, MARGIN_CONSTRAINT_TYPES, FONT_CONSTRAINT_TYPES, SPACING_CONSTRAINT_TYPES, GEOMETRY_CONSTRAINT_TYPES, USER_DEFINED_CONSTRAINT_TYPES, ALL_CONSTRAINT_TYPES, ALL_ELEMENT_TYPES, ALL_FUNCTION_TYPES, ALL_FUNCTION_OPERATORS, ALL_FUNCTION_ARGUMENTS;
70407
- var init_ooxml_engine_types = __esm({
70408
- "../../contracts/src/smartart/ooxml-engine-types.ts"() {
70409
- "use strict";
70410
- init_esm_shims();
70411
- POSITIONAL_CONSTRAINT_TYPES = [
70412
- "l",
70413
- "t",
70414
- "r",
70415
- "b",
70416
- "lOff",
70417
- "tOff",
70418
- "rOff",
70419
- "bOff",
70420
- "ctrX",
70421
- "ctrY",
70422
- "ctrXOff",
70423
- "ctrYOff"
70424
- ];
70425
- DIMENSIONAL_CONSTRAINT_TYPES = [
70426
- "w",
70427
- "h",
70428
- "wOff",
70429
- "hOff"
70430
- ];
70431
- MARGIN_CONSTRAINT_TYPES = [
70432
- "lMarg",
70433
- "tMarg",
70434
- "rMarg",
70435
- "bMarg",
70436
- "begMarg",
70437
- "endMarg"
70438
- ];
70439
- FONT_CONSTRAINT_TYPES = [
70440
- "primFontSz",
70441
- "secFontSz"
70442
- ];
70443
- SPACING_CONSTRAINT_TYPES = [
70444
- "sp",
70445
- "sibSp",
70446
- "secSibSp"
70447
- ];
70448
- GEOMETRY_CONSTRAINT_TYPES = [
70449
- "connDist",
70450
- "diam",
70451
- "stemThick",
70452
- "begPad",
70453
- "endPad",
70454
- "wArH",
70455
- "hArH",
70456
- "bendDist"
70457
- ];
70458
- USER_DEFINED_CONSTRAINT_TYPES = [
70459
- "userA",
70460
- "userB",
70461
- "userC",
70462
- "userD",
70463
- "userE",
70464
- "userF",
70465
- "userG",
70466
- "userH",
70467
- "userI",
70468
- "userJ",
70469
- "userK",
70470
- "userL",
70471
- "userM",
70472
- "userN",
70473
- "userO",
70474
- "userP",
70475
- "userQ",
70476
- "userR",
70477
- "userS",
70478
- "userT",
70479
- "userU",
70480
- "userV",
70481
- "userW",
70482
- "userX",
70483
- "userY",
70484
- "userZ"
70485
- ];
70486
- ALL_CONSTRAINT_TYPES = [
70487
- ...POSITIONAL_CONSTRAINT_TYPES,
70488
- ...DIMENSIONAL_CONSTRAINT_TYPES,
70489
- ...MARGIN_CONSTRAINT_TYPES,
70490
- ...FONT_CONSTRAINT_TYPES,
70491
- ...SPACING_CONSTRAINT_TYPES,
70492
- ...GEOMETRY_CONSTRAINT_TYPES,
70493
- "pyraAcctRatio",
70494
- "alignOff",
70495
- ...USER_DEFINED_CONSTRAINT_TYPES,
70496
- "none"
70497
- ];
70498
- ALL_ELEMENT_TYPES = [
70499
- "all",
70500
- "doc",
70501
- "node",
70502
- "norm",
70503
- "nonNorm",
70504
- "asst",
70505
- "nonAsst",
70506
- "parTrans",
70507
- "pres",
70508
- "sibTrans"
70509
- ];
70510
- ALL_FUNCTION_TYPES = [
70511
- "cnt",
70512
- "pos",
70513
- "revPos",
70514
- "posEven",
70515
- "posOdd",
70516
- "var",
70517
- "depth",
70518
- "maxDepth"
70519
- ];
70520
- ALL_FUNCTION_OPERATORS = [
70521
- "equ",
70522
- "neq",
70523
- "gt",
70524
- "lt",
70525
- "gte",
70526
- "lte"
70527
- ];
70528
- ALL_FUNCTION_ARGUMENTS = [
70529
- "none",
70530
- "orgChart",
70531
- "chMax",
70532
- "chPref",
70533
- "bulEnabled",
70534
- "dir",
70535
- "hierBranch",
70536
- "animOne",
70537
- "animLvl",
70538
- "resizeHandles"
70539
- ];
70540
- }
70541
- });
70542
-
70543
- // ../../contracts/src/smartart/ooxml-layout-types.ts
70544
- var init_ooxml_layout_types = __esm({
70545
- "../../contracts/src/smartart/ooxml-layout-types.ts"() {
70546
- "use strict";
70547
- init_esm_shims();
70548
- }
70549
- });
70550
-
70551
- // ../../contracts/src/smartart/ooxml-style-types.ts
70552
- var init_ooxml_style_types = __esm({
70553
- "../../contracts/src/smartart/ooxml-style-types.ts"() {
70554
- "use strict";
70555
- init_esm_shims();
70556
- }
70557
- });
70558
-
70559
- // ../../contracts/src/smartart/styles.ts
70560
- var init_styles3 = __esm({
70561
- "../../contracts/src/smartart/styles.ts"() {
70562
- "use strict";
70563
- init_esm_shims();
70564
- }
70565
- });
70566
-
70567
- // ../../contracts/src/smartart/types.ts
70568
- var init_types4 = __esm({
70569
- "../../contracts/src/smartart/types.ts"() {
70570
- "use strict";
70571
- init_esm_shims();
70572
- }
70573
- });
70574
-
70575
- // ../../contracts/src/smartart/index.ts
70576
- var init_smartart = __esm({
70577
- "../../contracts/src/smartart/index.ts"() {
70578
- "use strict";
70579
- init_esm_shims();
70580
- init_layouts2();
70581
- init_ooxml_algorithm_types();
70582
- init_ooxml_data_model_types();
70583
- init_ooxml_drawing_types();
70584
- init_ooxml_engine_types();
70585
- init_ooxml_layout_types();
70586
- init_ooxml_style_types();
70587
- init_styles3();
70588
- init_types4();
70589
- }
70590
- });
70591
-
70592
70076
  // ../../canvas/drawing/smartart/src/engine/algorithms/composite.ts
70077
+ import { AlgorithmType } from "@mog-sdk/spreadsheet-contracts/smartart";
70593
70078
  var init_composite = __esm({
70594
70079
  "../../canvas/drawing/smartart/src/engine/algorithms/composite.ts"() {
70595
70080
  "use strict";
70596
70081
  init_esm_shims();
70597
- init_smartart();
70598
70082
  }
70599
70083
  });
70600
70084
 
70601
70085
  // ../../canvas/drawing/smartart/src/engine/algorithms/linear.ts
70086
+ import { AlgorithmType as AlgorithmType2 } from "@mog-sdk/spreadsheet-contracts/smartart";
70602
70087
  var init_linear2 = __esm({
70603
70088
  "../../canvas/drawing/smartart/src/engine/algorithms/linear.ts"() {
70604
70089
  "use strict";
70605
70090
  init_esm_shims();
70606
- init_smartart();
70607
70091
  }
70608
70092
  });
70609
70093
 
@@ -70616,82 +70100,82 @@ var init_param_utils = __esm({
70616
70100
  });
70617
70101
 
70618
70102
  // ../../canvas/drawing/smartart/src/engine/algorithms/snake.ts
70103
+ import { AlgorithmType as AlgorithmType3 } from "@mog-sdk/spreadsheet-contracts/smartart";
70619
70104
  var init_snake = __esm({
70620
70105
  "../../canvas/drawing/smartart/src/engine/algorithms/snake.ts"() {
70621
70106
  "use strict";
70622
70107
  init_esm_shims();
70623
- init_smartart();
70624
70108
  init_param_utils();
70625
70109
  }
70626
70110
  });
70627
70111
 
70628
70112
  // ../../canvas/drawing/smartart/src/engine/algorithms/cycle.ts
70113
+ import { AlgorithmType as AlgorithmType4 } from "@mog-sdk/spreadsheet-contracts/smartart";
70629
70114
  var init_cycle2 = __esm({
70630
70115
  "../../canvas/drawing/smartart/src/engine/algorithms/cycle.ts"() {
70631
70116
  "use strict";
70632
70117
  init_esm_shims();
70633
- init_smartart();
70634
70118
  init_param_utils();
70635
70119
  }
70636
70120
  });
70637
70121
 
70638
70122
  // ../../canvas/drawing/smartart/src/engine/algorithms/hier-root.ts
70123
+ import { AlgorithmType as AlgorithmType5 } from "@mog-sdk/spreadsheet-contracts/smartart";
70639
70124
  var init_hier_root = __esm({
70640
70125
  "../../canvas/drawing/smartart/src/engine/algorithms/hier-root.ts"() {
70641
70126
  "use strict";
70642
70127
  init_esm_shims();
70643
- init_smartart();
70644
70128
  init_param_utils();
70645
70129
  }
70646
70130
  });
70647
70131
 
70648
70132
  // ../../canvas/drawing/smartart/src/engine/algorithms/hier-child.ts
70133
+ import { AlgorithmType as AlgorithmType6 } from "@mog-sdk/spreadsheet-contracts/smartart";
70649
70134
  var init_hier_child = __esm({
70650
70135
  "../../canvas/drawing/smartart/src/engine/algorithms/hier-child.ts"() {
70651
70136
  "use strict";
70652
70137
  init_esm_shims();
70653
- init_smartart();
70654
70138
  init_param_utils();
70655
70139
  }
70656
70140
  });
70657
70141
 
70658
70142
  // ../../canvas/drawing/smartart/src/engine/algorithms/pyramid.ts
70143
+ import { AlgorithmType as AlgorithmType7 } from "@mog-sdk/spreadsheet-contracts/smartart";
70659
70144
  var init_pyramid2 = __esm({
70660
70145
  "../../canvas/drawing/smartart/src/engine/algorithms/pyramid.ts"() {
70661
70146
  "use strict";
70662
70147
  init_esm_shims();
70663
- init_smartart();
70664
70148
  init_param_utils();
70665
70149
  }
70666
70150
  });
70667
70151
 
70668
70152
  // ../../canvas/drawing/smartart/src/engine/algorithms/connector.ts
70153
+ import { AlgorithmType as AlgorithmType8 } from "@mog-sdk/spreadsheet-contracts/smartart";
70669
70154
  var init_connector = __esm({
70670
70155
  "../../canvas/drawing/smartart/src/engine/algorithms/connector.ts"() {
70671
70156
  "use strict";
70672
70157
  init_esm_shims();
70673
- init_smartart();
70674
70158
  init_connector_routing();
70675
70159
  init_param_utils();
70676
70160
  }
70677
70161
  });
70678
70162
 
70679
70163
  // ../../canvas/drawing/smartart/src/engine/algorithms/text.ts
70164
+ import { AlgorithmType as AlgorithmType9 } from "@mog-sdk/spreadsheet-contracts/smartart";
70680
70165
  var init_text3 = __esm({
70681
70166
  "../../canvas/drawing/smartart/src/engine/algorithms/text.ts"() {
70682
70167
  "use strict";
70683
70168
  init_esm_shims();
70684
- init_smartart();
70685
70169
  init_param_utils();
70686
70170
  }
70687
70171
  });
70688
70172
 
70689
70173
  // ../../canvas/drawing/smartart/src/engine/algorithms/space.ts
70174
+ import { AlgorithmType as AlgorithmType10 } from "@mog-sdk/spreadsheet-contracts/smartart";
70690
70175
  var init_space = __esm({
70691
70176
  "../../canvas/drawing/smartart/src/engine/algorithms/space.ts"() {
70692
70177
  "use strict";
70693
70178
  init_esm_shims();
70694
- init_smartart();
70695
70179
  }
70696
70180
  });
70697
70181
 
@@ -70850,12 +70334,18 @@ var init_drawing_parser = __esm({
70850
70334
  });
70851
70335
 
70852
70336
  // ../../canvas/drawing/smartart/src/parser/layout-def-parser.ts
70337
+ import {
70338
+ ALL_ELEMENT_TYPES,
70339
+ ALL_FUNCTION_ARGUMENTS,
70340
+ ALL_FUNCTION_OPERATORS,
70341
+ ALL_FUNCTION_TYPES,
70342
+ VARIABLE_LIST_DEFAULTS
70343
+ } from "@mog-sdk/spreadsheet-contracts/smartart";
70853
70344
  var VALID_ELEMENT_TYPES, VALID_FUNCTION_TYPES, VALID_FUNCTION_OPERATORS, VALID_FUNCTION_ARGUMENTS;
70854
70345
  var init_layout_def_parser = __esm({
70855
70346
  "../../canvas/drawing/smartart/src/parser/layout-def-parser.ts"() {
70856
70347
  "use strict";
70857
70348
  init_esm_shims();
70858
- init_smartart();
70859
70349
  init_data_model_parser();
70860
70350
  init_drawingml_helpers();
70861
70351
  init_xml_helpers();
@@ -74757,7 +74247,7 @@ var init_cell_anchor_resolver = __esm({
74757
74247
  });
74758
74248
 
74759
74249
  // ../../kernel/src/floating-objects/types.ts
74760
- var init_types5 = __esm({
74250
+ var init_types4 = __esm({
74761
74251
  "../../kernel/src/floating-objects/types.ts"() {
74762
74252
  "use strict";
74763
74253
  init_esm_shims();
@@ -74856,7 +74346,7 @@ var init_picture_manager = __esm({
74856
74346
  "use strict";
74857
74347
  init_esm_shims();
74858
74348
  init_document();
74859
- init_types5();
74349
+ init_types4();
74860
74350
  }
74861
74351
  });
74862
74352
 
@@ -74958,7 +74448,7 @@ var init_textbox_manager = __esm({
74958
74448
  "../../kernel/src/floating-objects/managers/textbox-manager.ts"() {
74959
74449
  "use strict";
74960
74450
  init_esm_shims();
74961
- init_types5();
74451
+ init_types4();
74962
74452
  DEFAULT_TEXTBOX_FILL = { type: "solid", color: "#ffffff" };
74963
74453
  DEFAULT_TEXTBOX_BORDER = { style: "solid", color: "#000000", width: 1 };
74964
74454
  }
@@ -76139,7 +75629,7 @@ var init_kernel_context = __esm({
76139
75629
  init_esm_shims();
76140
75630
  init_chart_bridge();
76141
75631
  init_equation_bridge();
76142
- init_ink_recognition_bridge2();
75632
+ init_ink_recognition_bridge();
76143
75633
  init_locale_bridge();
76144
75634
  init_pivot_bridge();
76145
75635
  init_schema_bridge();
@@ -77149,21 +76639,8 @@ var WorkbookHistoryImpl = class {
77149
76639
 
77150
76640
  // ../../kernel/src/api/workbook/names.ts
77151
76641
  init_esm_shims();
77152
-
77153
- // ../../contracts/src/api/index.ts
77154
- init_esm_shims();
77155
-
77156
- // ../../contracts/src/api/types.ts
77157
- init_esm_shims();
77158
-
77159
- // ../../contracts/src/api/worksheet/index.ts
77160
- init_esm_shims();
77161
-
77162
- // ../../contracts/src/api/worksheet/format-mappings.ts
77163
- init_esm_shims();
77164
-
77165
- // ../../kernel/src/api/workbook/names.ts
77166
76642
  init_errors();
76643
+ import { RangeValueType } from "@mog-sdk/spreadsheet-contracts/api";
77167
76644
 
77168
76645
  // ../../kernel/src/domain/formulas/named-ranges.ts
77169
76646
  init_esm_shims();
@@ -77295,6 +76772,10 @@ async function getRefersToA1(ctx, name) {
77295
76772
  const a1 = await ctx.computeBridge.toA1Display(NIL_SHEET_ID, wire);
77296
76773
  return a1.startsWith("=") ? a1 : `=${a1}`;
77297
76774
  }
76775
+ async function getVisible(ctx) {
76776
+ const rustNames = await ctx.computeBridge.getVisibleNamedRanges();
76777
+ return rustNames.map(mapRustNamedRange);
76778
+ }
77298
76779
  async function create2(ctx, input, contextSheet, _origin = "user") {
77299
76780
  const formula = await ctx.computeBridge.toIdentityFormula(contextSheet, input.refersToA1);
77300
76781
  const rawFormula = formula;
@@ -77380,7 +76861,7 @@ async function update2(ctx, id, updates, contextSheet, _origin = "user") {
77380
76861
  }
77381
76862
  const newName = updates.name ?? existing.name;
77382
76863
  if (newName !== existing.name) {
77383
- void ctx.computeBridge.removeNamedRange(existing.name);
76864
+ void ctx.computeBridge.removeNamedRangeById(existing.id);
77384
76865
  }
77385
76866
  let refersToWire = identityFormulaToWire(existing.refersTo);
77386
76867
  if (updates.refersToA1) {
@@ -77467,7 +76948,7 @@ async function remove(ctx, id, _origin = "user") {
77467
76948
  if (!existing) {
77468
76949
  throw new KernelError("DOMAIN_DEFINED_NAME_NOT_FOUND", `Defined name with ID ${id} not found`);
77469
76950
  }
77470
- void ctx.computeBridge.removeNamedRange(existing.name);
76951
+ void ctx.computeBridge.removeNamedRangeById(existing.id);
77471
76952
  }
77472
76953
  async function exportNames(ctx) {
77473
76954
  const all = await getAll(ctx);
@@ -77492,7 +76973,7 @@ function sanitizeLabel(label) {
77492
76973
  }
77493
76974
  return name;
77494
76975
  }
77495
- function colToLetter(col) {
76976
+ function colToLetter2(col) {
77496
76977
  let result = "";
77497
76978
  let c = col;
77498
76979
  while (c >= 0) {
@@ -77566,7 +77047,7 @@ async function createFromSelection(ctx, sheetId, range2, options, _origin = "use
77566
77047
  result.skippedReasons.push({ label: name, reason: validation.message ?? "invalid name" });
77567
77048
  return;
77568
77049
  }
77569
- const refersToA1 = refStartRow === refEndRow && refStartCol === refEndCol ? `=$${colToLetter(refStartCol)}$${refStartRow + 1}` : `=$${colToLetter(refStartCol)}$${refStartRow + 1}:$${colToLetter(refEndCol)}$${refEndRow + 1}`;
77050
+ const refersToA1 = refStartRow === refEndRow && refStartCol === refEndCol ? `=$${colToLetter2(refStartCol)}$${refStartRow + 1}` : `=$${colToLetter2(refStartCol)}$${refStartRow + 1}:$${colToLetter2(refEndCol)}$${refEndRow + 1}`;
77570
77051
  try {
77571
77052
  await create2(ctx, { name: sanitized, refersToA1 }, sheetId);
77572
77053
  existingKeys.add(key);
@@ -77781,13 +77262,13 @@ var WorkbookNamesImpl = class {
77781
77262
  if (!values) return null;
77782
77263
  return values.map(
77783
77264
  (row) => row.map((cell) => {
77784
- if (cell === null || cell === void 0) return "Empty" /* Empty */;
77785
- if (typeof cell === "boolean") return "Boolean" /* Boolean */;
77786
- if (typeof cell === "number") return "Double" /* Double */;
77787
- if (typeof cell === "string") return "String" /* String */;
77265
+ if (cell === null || cell === void 0) return RangeValueType.Empty;
77266
+ if (typeof cell === "boolean") return RangeValueType.Boolean;
77267
+ if (typeof cell === "number") return RangeValueType.Double;
77268
+ if (typeof cell === "string") return RangeValueType.String;
77788
77269
  if (typeof cell === "object" && cell !== null && "type" in cell)
77789
- return "Error" /* Error */;
77790
- return "String" /* String */;
77270
+ return RangeValueType.Error;
77271
+ return RangeValueType.String;
77791
77272
  })
77792
77273
  );
77793
77274
  }
@@ -77879,7 +77360,7 @@ var BUILT_IN_LISTS = [
77879
77360
  ];
77880
77361
 
77881
77362
  // ../../kernel/src/domain/workbook/workbook.ts
77882
- init_protection();
77363
+ import { DEFAULT_WORKBOOK_PROTECTION_OPTIONS } from "@mog-sdk/spreadsheet-contracts/protection";
77883
77364
 
77884
77365
  // ../../spreadsheet-utils/src/protection.ts
77885
77366
  init_esm_shims();
@@ -78335,9 +77816,9 @@ init_sheet_meta();
78335
77816
 
78336
77817
  // ../../kernel/src/api/worksheet/worksheet-impl.ts
78337
77818
  init_esm_shims();
78338
- init_core3();
78339
77819
  init_errors3();
78340
77820
  init_errors();
77821
+ import { displayStringOrNull as displayStringOrNull3 } from "@mog-sdk/spreadsheet-contracts/core";
78341
77822
 
78342
77823
  // ../../kernel/src/bridges/wire/cell-metadata-cache.ts
78343
77824
  init_esm_shims();
@@ -78838,6 +78319,7 @@ init_cell_properties();
78838
78319
  var MAX_RANGE_CELLS = 1e4;
78839
78320
  var MAX_RANGE_BOUNDING_BOX = 5e5;
78840
78321
  var MAX_DESCRIBE_OUTPUT_CHARS = 5e4;
78322
+ var MAX_SUMMARY_NAMED_RANGES = 20;
78841
78323
  async function getStyleHints(ctx, sheetId, row, col) {
78842
78324
  const format = await getFormat(ctx, sheetId, row, col);
78843
78325
  if (!format) return null;
@@ -78927,7 +78409,7 @@ function generateFormulaDocumentation(analysis) {
78927
78409
  const lines = [""];
78928
78410
  for (const info of significantPatterns) {
78929
78411
  const examples = info.cells.slice(0, 2).map((cell) => {
78930
- const addr = `${colToLetter2(cell.col)}${cell.row + 1}`;
78412
+ const addr = `${colToLetter3(cell.col)}${cell.row + 1}`;
78931
78413
  return `${addr}: =${cell.formula}`;
78932
78414
  });
78933
78415
  const exampleStr = examples.length > 0 ? ` (e.g. ${examples.join(", ")})` : "";
@@ -78986,7 +78468,7 @@ function buildLeftContext(leftCells, startRow, startCol, endRow) {
78986
78468
  found.sort((a, b) => a.col - b.col);
78987
78469
  const tokens = found.map((f) => {
78988
78470
  const prefix = "\u2192".repeat(Math.max(0, f.indent));
78989
- const addr = `${colToLetter2(f.col)}${row + 1}`;
78471
+ const addr = `${colToLetter3(f.col)}${row + 1}`;
78990
78472
  return `${prefix}${addr}:${f.text}`;
78991
78473
  });
78992
78474
  lines.push(tokens.join(" | "));
@@ -79058,7 +78540,7 @@ function buildAboveContext(aboveCells, startRow, startCol, endCol) {
79058
78540
  sawNumeric = true;
79059
78541
  continue;
79060
78542
  }
79061
- const addr = `${colToLetter2(c)}${bestRow + 1}`;
78543
+ const addr = `${colToLetter3(c)}${bestRow + 1}`;
79062
78544
  if (tokens.length > 0 && sawNumeric) tokens.push("...");
79063
78545
  tokens.push(`${addr}:${d}`);
79064
78546
  sawNumeric = false;
@@ -79116,8 +78598,8 @@ function consolidateRanges(cells) {
79116
78598
  covered.add(`${r},${c}`);
79117
78599
  }
79118
78600
  }
79119
- const start = `${colToLetter2(cell.col)}${cell.row + 1}`;
79120
- const end = `${colToLetter2(endCol)}${endRow + 1}`;
78601
+ const start = `${colToLetter3(cell.col)}${cell.row + 1}`;
78602
+ const end = `${colToLetter3(endCol)}${endRow + 1}`;
79121
78603
  ranges.push(start === end ? start : `${start}:${end}`);
79122
78604
  }
79123
78605
  return ranges;
@@ -79188,9 +78670,12 @@ async function getDisplayValue(ctx, sheetId, row, col) {
79188
78670
  async function getCell(ctx, sheetId, row, col) {
79189
78671
  const data = await getData(ctx, sheetId, row, col);
79190
78672
  if (!data) return void 0;
78673
+ const fmt = await getFormat(ctx, sheetId, row, col);
79191
78674
  return {
79192
78675
  value: (data.formula !== void 0 ? data.computed : rawToCellValue(data.raw)) ?? null,
79193
- formula: data.formula
78676
+ formula: data.formula,
78677
+ format: fmt ?? void 0,
78678
+ formatted: await getDisplayValue(ctx, sheetId, row, col) ?? void 0
79194
78679
  };
79195
78680
  }
79196
78681
  async function getDisplayValue2(ctx, sheetId, row, col) {
@@ -79211,10 +78696,11 @@ async function setCell(ctx, sheetId, row, col, value) {
79211
78696
  throw KernelError.from(null, "COMPUTE_ERROR", `Invalid cell address: row=${row}, col=${col}`);
79212
78697
  }
79213
78698
  const input = value === null || value === void 0 ? "" : value === "" ? "\0" : String(value);
79214
- const result = await ctx.computeBridge.setCellsByPosition(sheetId, [{ row, col, input }]);
78699
+ ctx.computeBridge.getMutationHandler()?.changeAccumulator.setDirectEdits([{ sheetId, row, col }]);
78700
+ await ctx.computeBridge.setCellsByPosition(sheetId, [{ row, col, input }]);
79215
78701
  }
79216
78702
  async function setCells(ctx, sheetId, cells) {
79217
- if (cells.length === 0) return { cellsWritten: 0 };
78703
+ if (cells.length === 0) return { cellsWritten: 0, errors: null };
79218
78704
  const edits = cells.map((cell) => {
79219
78705
  let row;
79220
78706
  let col;
@@ -79236,13 +78722,20 @@ async function setCells(ctx, sheetId, cells) {
79236
78722
  }
79237
78723
  const uniqueEdits = Array.from(deduped.values());
79238
78724
  const duplicatesRemoved = edits.length - uniqueEdits.length;
78725
+ ctx.computeBridge.getMutationHandler()?.changeAccumulator.setDirectEdits(
78726
+ uniqueEdits.map((e) => ({ sheetId, row: e.row, col: e.col }))
78727
+ );
79239
78728
  await ctx.computeBridge.setCellsByPosition(sheetId, uniqueEdits);
79240
- const result = { cellsWritten: uniqueEdits.length };
78729
+ const result = { cellsWritten: uniqueEdits.length, errors: null };
79241
78730
  if (duplicatesRemoved > 0) {
79242
78731
  result.warnings = [
79243
- createWarning("API_DUPLICATE_COORDINATES", `${duplicatesRemoved} duplicate coordinate(s) resolved by last-write-wins`, {
79244
- duplicatesRemoved
79245
- })
78732
+ createWarning(
78733
+ "API_DUPLICATE_COORDINATES",
78734
+ `${duplicatesRemoved} duplicate coordinate(s) resolved by last-write-wins`,
78735
+ {
78736
+ duplicatesRemoved
78737
+ }
78738
+ )
79246
78739
  ];
79247
78740
  }
79248
78741
  return result;
@@ -79343,7 +78836,7 @@ async function batchGetCellPositions(ctx, sheetId, cellIds) {
79343
78836
 
79344
78837
  // ../../kernel/src/api/worksheet/operations/dependency-operations.ts
79345
78838
  init_esm_shims();
79346
- function colToLetter3(col) {
78839
+ function colToLetter4(col) {
79347
78840
  let result = "";
79348
78841
  let c = col;
79349
78842
  while (c >= 0) {
@@ -79354,11 +78847,11 @@ function colToLetter3(col) {
79354
78847
  }
79355
78848
  async function getDependents(ctx, sheetId, row, col) {
79356
78849
  const results = await ctx.computeBridge.getDependents(sheetId, row, col);
79357
- return results.map((r) => `${colToLetter3(r.col)}${r.row + 1}`);
78850
+ return results.map((r) => `${colToLetter4(r.col)}${r.row + 1}`);
79358
78851
  }
79359
78852
  async function getPrecedents(ctx, sheetId, row, col) {
79360
78853
  const results = await ctx.computeBridge.getPrecedents(sheetId, row, col);
79361
- return results.map((r) => `${colToLetter3(r.col)}${r.row + 1}`);
78854
+ return results.map((r) => `${colToLetter4(r.col)}${r.row + 1}`);
79362
78855
  }
79363
78856
 
79364
78857
  // ../../kernel/src/api/worksheet/operations/fill-operations.ts
@@ -79411,7 +78904,8 @@ async function autoFill(ctx, sheetId, sourceRange, targetRange, mode) {
79411
78904
  return {
79412
78905
  patternType: fillData?.patternType ?? "copy",
79413
78906
  filledCellCount: fillData?.filledCellCount ?? 0,
79414
- warnings: fillData?.warnings ?? []
78907
+ warnings: fillData?.warnings ?? [],
78908
+ changes: fillData?.changes ?? []
79415
78909
  };
79416
78910
  }
79417
78911
  function splitRangeForSeries(range2, direction) {
@@ -79735,14 +79229,14 @@ async function regexSearch(ctx, sheetId, patterns, options) {
79735
79229
  for (const { regex, source } of compiledPatterns) {
79736
79230
  regex.lastIndex = 0;
79737
79231
  if (regex.test(valueStr)) {
79738
- const address = `${colToLetter2(cell.col)}${cell.row + 1}`;
79232
+ const address = `${colToLetter3(cell.col)}${cell.row + 1}`;
79739
79233
  results.push({ address, value: valueStr, sheetName, matchedPattern: source });
79740
79234
  break;
79741
79235
  }
79742
79236
  if (options?.includeFormulas && cell.formula) {
79743
79237
  regex.lastIndex = 0;
79744
79238
  if (regex.test(cell.formula)) {
79745
- const address = `${colToLetter2(cell.col)}${cell.row + 1}`;
79239
+ const address = `${colToLetter3(cell.col)}${cell.row + 1}`;
79746
79240
  results.push({ address, value: valueStr, sheetName, matchedPattern: source });
79747
79241
  break;
79748
79242
  }
@@ -79898,7 +79392,7 @@ async function clearRange2(ctx, sheetId, range2) {
79898
79392
  }
79899
79393
  }
79900
79394
  }
79901
- return { success: true, data: void 0, affectedCells };
79395
+ return { success: true, data: { cellCount }, affectedCells };
79902
79396
  } catch (e) {
79903
79397
  return {
79904
79398
  success: false,
@@ -79911,6 +79405,10 @@ async function clearRange2(ctx, sheetId, range2) {
79911
79405
  init_esm_shims();
79912
79406
  init_a1();
79913
79407
  init_value_conversions();
79408
+ import {
79409
+ NumberFormatCategory,
79410
+ RangeValueType as RangeValueType2
79411
+ } from "@mog-sdk/spreadsheet-contracts/api";
79914
79412
  async function clearWithMode(ctx, sheetId, range2, applyTo = "all") {
79915
79413
  const n = normalizeRange(range2);
79916
79414
  const promises = [];
@@ -79930,6 +79428,8 @@ async function clearWithMode(ctx, sheetId, range2, applyTo = "all") {
79930
79428
  promises.push(clearHyperlinksInRange(ctx, sheetId, n));
79931
79429
  }
79932
79430
  await Promise.all(promises);
79431
+ const cellCount = (n.endRow - n.startRow + 1) * (n.endCol - n.startCol + 1);
79432
+ return { cellCount };
79933
79433
  }
79934
79434
  async function clearHyperlinksInRange(ctx, sheetId, range2) {
79935
79435
  const rangeResult = await ctx.computeBridge.queryRange(
@@ -80008,7 +79508,7 @@ async function getValueTypes(ctx, sheetId, range2) {
80008
79508
  for (let col = n.startCol; col <= n.endCol; col++) {
80009
79509
  const cell = cellMap.get(`${row},${col}`);
80010
79510
  if (!cell) {
80011
- rowData.push("Empty" /* Empty */);
79511
+ rowData.push(RangeValueType2.Empty);
80012
79512
  } else {
80013
79513
  rowData.push(classifyValueType(viewportCellValueToCellValue(cell.value)));
80014
79514
  }
@@ -80018,12 +79518,12 @@ async function getValueTypes(ctx, sheetId, range2) {
80018
79518
  return result;
80019
79519
  }
80020
79520
  function classifyValueType(value) {
80021
- if (value === null || value === void 0) return "Empty" /* Empty */;
80022
- if (typeof value === "string") return value === "" ? "Empty" /* Empty */ : "String" /* String */;
80023
- if (typeof value === "number") return "Double" /* Double */;
80024
- if (typeof value === "boolean") return "Boolean" /* Boolean */;
80025
- if (typeof value === "object" && value !== null && "type" in value) return "Error" /* Error */;
80026
- return "String" /* String */;
79521
+ if (value === null || value === void 0) return RangeValueType2.Empty;
79522
+ if (typeof value === "string") return value === "" ? RangeValueType2.Empty : RangeValueType2.String;
79523
+ if (typeof value === "number") return RangeValueType2.Double;
79524
+ if (typeof value === "boolean") return RangeValueType2.Boolean;
79525
+ if (typeof value === "object" && value !== null && "type" in value) return RangeValueType2.Error;
79526
+ return RangeValueType2.String;
80027
79527
  }
80028
79528
  async function findInRange(ctx, sheetId, range2, text, options) {
80029
79529
  const n = normalizeRange(range2);
@@ -80048,7 +79548,7 @@ async function findInRange(ctx, sheetId, range2, text, options) {
80048
79548
  const valueStr = cell.formatted ?? viewportCellValueToString(cell.value);
80049
79549
  if (pattern.test(valueStr)) {
80050
79550
  return {
80051
- address: `${colToLetter2(cell.col)}${cell.row + 1}`,
79551
+ address: `${colToLetter3(cell.col)}${cell.row + 1}`,
80052
79552
  value: valueStr
80053
79553
  };
80054
79554
  }
@@ -80120,46 +79620,46 @@ async function getNumberFormatCategories(ctx, sheetId, range2) {
80120
79620
  }
80121
79621
  function detectFormatType(formatCode) {
80122
79622
  if (!formatCode || formatCode === "" || formatCode === "General") {
80123
- return "General" /* General */;
79623
+ return NumberFormatCategory.General;
80124
79624
  }
80125
79625
  if (formatCode === "@") {
80126
- return "Text" /* Text */;
79626
+ return NumberFormatCategory.Text;
80127
79627
  }
80128
79628
  const stripped = formatCode.replace(/\[[^\]]*\]/g, "").replace(/"[^"]*"/g, "");
80129
79629
  if (/[yYmMdD]/.test(stripped) && /[yYdD]/.test(stripped)) {
80130
- return "Date" /* Date */;
79630
+ return NumberFormatCategory.Date;
80131
79631
  }
80132
79632
  if (/[hHsS]/.test(stripped)) {
80133
79633
  if (/[yYdD]/.test(stripped)) {
80134
- return "Date" /* Date */;
79634
+ return NumberFormatCategory.Date;
80135
79635
  }
80136
- return "Time" /* Time */;
79636
+ return NumberFormatCategory.Time;
80137
79637
  }
80138
79638
  if (/AM\/PM/i.test(stripped)) {
80139
- return "Time" /* Time */;
79639
+ return NumberFormatCategory.Time;
80140
79640
  }
80141
79641
  if (stripped.includes("%")) {
80142
- return "Percentage" /* Percentage */;
79642
+ return NumberFormatCategory.Percentage;
80143
79643
  }
80144
79644
  if (/[eE][+-]/.test(stripped)) {
80145
- return "Scientific" /* Scientific */;
79645
+ return NumberFormatCategory.Scientific;
80146
79646
  }
80147
79647
  if (stripped.includes("/") && !/[yYmMdDhHsS]/.test(stripped)) {
80148
- return "Fraction" /* Fraction */;
79648
+ return NumberFormatCategory.Fraction;
80149
79649
  }
80150
79650
  if (/[_*]/.test(stripped) && /[$(]/.test(stripped)) {
80151
- return "Accounting" /* Accounting */;
79651
+ return NumberFormatCategory.Accounting;
80152
79652
  }
80153
79653
  if (/[$€£¥₹]/.test(formatCode)) {
80154
- return "Currency" /* Currency */;
79654
+ return NumberFormatCategory.Currency;
80155
79655
  }
80156
79656
  if (/^0{5}/.test(stripped) || /^0{3}-0{2}-0{4}/.test(stripped)) {
80157
- return "Special" /* Special */;
79657
+ return NumberFormatCategory.Special;
80158
79658
  }
80159
79659
  if (/[#0]/.test(stripped)) {
80160
- return "Number" /* Number */;
79660
+ return NumberFormatCategory.Number;
80161
79661
  }
80162
- return "Custom" /* Custom */;
79662
+ return NumberFormatCategory.Custom;
80163
79663
  }
80164
79664
 
80165
79665
  // ../../kernel/src/api/worksheet/operations/sort-operations.ts
@@ -80935,6 +80435,84 @@ var WorksheetBindingsImpl = class {
80935
80435
  }
80936
80436
  };
80937
80437
 
80438
+ // ../../kernel/src/api/worksheet/index.ts
80439
+ init_change_accumulator();
80440
+
80441
+ // ../../kernel/src/api/worksheet/changes.ts
80442
+ init_esm_shims();
80443
+ function parseRangeScope(scope) {
80444
+ const match = scope.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/i);
80445
+ if (!match) return null;
80446
+ const startCol = letterToCol2(match[1].toUpperCase());
80447
+ const startRow = parseInt(match[2], 10) - 1;
80448
+ const endCol = letterToCol2(match[3].toUpperCase());
80449
+ const endRow = parseInt(match[4], 10) - 1;
80450
+ return { startRow, startCol, endRow, endCol };
80451
+ }
80452
+ function letterToCol2(letters) {
80453
+ let col = 0;
80454
+ for (let i = 0; i < letters.length; i++) {
80455
+ col = col * 26 + (letters.charCodeAt(i) - 64);
80456
+ }
80457
+ return col - 1;
80458
+ }
80459
+ var ChangeTrackerImpl = class {
80460
+ constructor(sheetId, options, unregister) {
80461
+ this._active = true;
80462
+ this.buffer = [];
80463
+ this.sheetId = sheetId;
80464
+ this.unregister = unregister;
80465
+ this.scopeBounds = options?.scope ? parseRangeScope(options.scope) : null;
80466
+ this.excludeOrigins = options?.excludeOrigins && options.excludeOrigins.length > 0 ? new Set(options.excludeOrigins) : null;
80467
+ }
80468
+ // --- TrackerHandle (called by ChangeAccumulator) ---
80469
+ _ingest(records) {
80470
+ if (!this._active) return;
80471
+ for (const record of records) {
80472
+ if (this.excludeOrigins?.has(record.origin)) continue;
80473
+ if (this.scopeBounds) {
80474
+ const { startRow, startCol, endRow, endCol } = this.scopeBounds;
80475
+ if (record.row < startRow || record.row > endRow || record.col < startCol || record.col > endCol) {
80476
+ continue;
80477
+ }
80478
+ }
80479
+ this.buffer.push(record);
80480
+ }
80481
+ }
80482
+ // --- ChangeTracker public API ---
80483
+ collect() {
80484
+ const result = this.buffer;
80485
+ this.buffer = [];
80486
+ return result;
80487
+ }
80488
+ close() {
80489
+ if (!this._active) return;
80490
+ this._active = false;
80491
+ this.buffer = [];
80492
+ this.unregister();
80493
+ }
80494
+ get active() {
80495
+ return this._active;
80496
+ }
80497
+ };
80498
+ var WorksheetChangesImpl = class {
80499
+ constructor(ctx, sheetId) {
80500
+ this.ctx = ctx;
80501
+ this.sheetId = sheetId;
80502
+ }
80503
+ track(options) {
80504
+ const accumulator = this.ctx.computeBridge.getMutationHandler()?.changeAccumulator;
80505
+ if (!accumulator) {
80506
+ throw new Error("Change tracking unavailable: MutationResultHandler not initialized");
80507
+ }
80508
+ const tracker = new ChangeTrackerImpl(this.sheetId, options, () => {
80509
+ accumulator.unregister(tracker);
80510
+ });
80511
+ accumulator.register(tracker);
80512
+ return tracker;
80513
+ }
80514
+ };
80515
+
80938
80516
  // ../../kernel/src/api/worksheet/charts.ts
80939
80517
  init_esm_shims();
80940
80518
  function buildStatisticalExtra(config) {
@@ -81364,7 +80942,7 @@ function cellRefToA1(cellRef) {
81364
80942
  const col = parseInt(parts[0], 10);
81365
80943
  const row = parseInt(parts[1], 10);
81366
80944
  if (isNaN(col) || isNaN(row)) return cellRef;
81367
- return toA1(row, col);
80945
+ return toA12(row, col);
81368
80946
  }
81369
80947
  function toApiComment(c) {
81370
80948
  const text = c.content ?? c.runs.map((r) => r.text).join("");
@@ -81465,7 +81043,7 @@ var WorksheetCommentsImpl = class {
81465
81043
  return {
81466
81044
  content,
81467
81045
  author: first.author,
81468
- cellAddress: toA1(row, col)
81046
+ cellAddress: toA12(row, col)
81469
81047
  };
81470
81048
  }
81471
81049
  async removeNote(a, b) {
@@ -81808,7 +81386,7 @@ var WorksheetFiltersImpl = class {
81808
81386
  }
81809
81387
  }
81810
81388
  return {
81811
- range: `${toA1(filter.startRow ?? 0, filter.startCol ?? 0)}:${toA1(filter.endRow ?? 0, filter.endCol ?? 0)}`,
81389
+ range: `${toA12(filter.startRow ?? 0, filter.startCol ?? 0)}:${toA12(filter.endRow ?? 0, filter.endCol ?? 0)}`,
81812
81390
  columns
81813
81391
  };
81814
81392
  }
@@ -82183,7 +81761,12 @@ var WorksheetFormatsImpl = class {
82183
81761
  col = b;
82184
81762
  format = c;
82185
81763
  }
82186
- await this.ctx.computeBridge.setFormatForRanges(this.sheetId, [[row, col, row, col]], format);
81764
+ const result = await this.ctx.computeBridge.setFormatForRanges(
81765
+ this.sheetId,
81766
+ [[row, col, row, col]],
81767
+ format
81768
+ );
81769
+ return { cellCount: result.propertyChanges?.length ?? 0 };
82187
81770
  }
82188
81771
  async setRange(a, b) {
82189
81772
  let range2;
@@ -82195,11 +81778,12 @@ var WorksheetFormatsImpl = class {
82195
81778
  range2 = a;
82196
81779
  }
82197
81780
  const n = normalizeRange(range2);
82198
- await this.ctx.computeBridge.setFormatForRanges(
81781
+ const result = await this.ctx.computeBridge.setFormatForRanges(
82199
81782
  this.sheetId,
82200
81783
  [[n.startRow, n.startCol, n.endRow, n.endCol]],
82201
81784
  b
82202
81785
  );
81786
+ return { cellCount: result.propertyChanges?.length ?? 0 };
82203
81787
  }
82204
81788
  async setRanges(ranges, format) {
82205
81789
  const boundedRanges = [];
@@ -82230,9 +81814,11 @@ var WorksheetFormatsImpl = class {
82230
81814
  }
82231
81815
  async get(a, b) {
82232
81816
  const { row, col } = resolveCell(a, b);
82233
- const result = await this.ctx.computeBridge.queryRange(this.sheetId, row, col, row, col);
82234
- if (!result?.cells || result.cells.length === 0) return null;
82235
- return result.cells[0]?.format ?? null;
81817
+ return this.ctx.computeBridge.getResolvedFormat(
81818
+ this.sheetId,
81819
+ row,
81820
+ col
81821
+ );
82236
81822
  }
82237
81823
  async adjustIndent(a, b, c) {
82238
81824
  let row, col, amount;
@@ -82256,7 +81842,8 @@ var WorksheetFormatsImpl = class {
82256
81842
  async clearFill(a, b) {
82257
81843
  const { row, col } = resolveCell(a, b);
82258
81844
  const rangeTuple = [row, col, row, col];
82259
- const current = await this.get(row, col);
81845
+ const result = await this.ctx.computeBridge.queryRange(this.sheetId, row, col, row, col);
81846
+ const current = result?.cells?.[0]?.format ?? null;
82260
81847
  await this.ctx.computeBridge.clearFormatForRanges(this.sheetId, [rangeTuple]);
82261
81848
  if (current) {
82262
81849
  const { backgroundColor, patternType, patternForegroundColor, gradientFill, ...rest } = current;
@@ -83016,8 +82603,8 @@ init_esm_shims();
83016
82603
  init_errors();
83017
82604
  function formatDataSource(sourceSheetName, sourceRange) {
83018
82605
  if (!sourceRange) return "";
83019
- const start = toA1(sourceRange.startRow, sourceRange.startCol);
83020
- const end = toA1(sourceRange.endRow, sourceRange.endCol);
82606
+ const start = toA12(sourceRange.startRow, sourceRange.startCol);
82607
+ const end = toA12(sourceRange.endRow, sourceRange.endCol);
83021
82608
  const sheetRef = sourceSheetName ?? "Unknown";
83022
82609
  const needsQuotes = /[^A-Za-z0-9_]/.test(sheetRef);
83023
82610
  const quotedSheet = needsQuotes ? `'${sheetRef}'` : sheetRef;
@@ -83109,7 +82696,7 @@ var WorksheetPivotsImpl = class _WorksheetPivotsImpl {
83109
82696
  }
83110
82697
  return pivots.map((p) => {
83111
82698
  const apiConfig = dataConfigToApiConfig(p, p.sourceSheetName);
83112
- const location = p.outputLocation ? toA1(p.outputLocation.row, p.outputLocation.col) : void 0;
82699
+ const location = p.outputLocation ? toA12(p.outputLocation.row, p.outputLocation.col) : void 0;
83113
82700
  return {
83114
82701
  name: p.name ?? p.id,
83115
82702
  dataSource: apiConfig.dataSource,
@@ -83630,7 +83217,7 @@ init_errors();
83630
83217
 
83631
83218
  // ../../kernel/src/api/worksheet/operations/sheet-management-operations.ts
83632
83219
  init_esm_shims();
83633
- init_protection();
83220
+ import { DEFAULT_PROTECTION_OPTIONS as DEFAULT_PROTECTION_OPTIONS2 } from "@mog-sdk/spreadsheet-contracts/protection";
83634
83221
  function parseCellRef2(ref) {
83635
83222
  const match = ref.match(/^([A-Z]+)(\d+)$/i);
83636
83223
  if (!match) return null;
@@ -83642,7 +83229,7 @@ function parseCellRef2(ref) {
83642
83229
  }
83643
83230
  return { row: rowNum - 1, col: col - 1 };
83644
83231
  }
83645
- function colToLetter4(col) {
83232
+ function colToLetter5(col) {
83646
83233
  let result = "";
83647
83234
  let c = col;
83648
83235
  while (c >= 0) {
@@ -83652,8 +83239,8 @@ function colToLetter4(col) {
83652
83239
  return result;
83653
83240
  }
83654
83241
  function printRangeToA1(range2) {
83655
- const startRef = `${colToLetter4(range2.startCol)}${range2.startRow + 1}`;
83656
- const endRef = `${colToLetter4(range2.endCol)}${range2.endRow + 1}`;
83242
+ const startRef = `${colToLetter5(range2.startCol)}${range2.startRow + 1}`;
83243
+ const endRef = `${colToLetter5(range2.endCol)}${range2.endRow + 1}`;
83657
83244
  return `${startRef}:${endRef}`;
83658
83245
  }
83659
83246
  async function getPageBreaks(ctx, sheetId) {
@@ -84053,7 +83640,11 @@ var WorksheetSlicersImpl = class {
84053
83640
  this.sheetId = sheetId;
84054
83641
  }
84055
83642
  async add(config) {
84056
- const storedConfig = config;
83643
+ const caption = config.caption ?? config.name ?? "";
83644
+ const storedConfig = {
83645
+ ...config,
83646
+ caption
83647
+ };
84057
83648
  await this.ctx.computeBridge.createSlicer(this.sheetId, storedConfig);
84058
83649
  return storedConfig.id ?? "";
84059
83650
  }
@@ -84767,7 +84358,7 @@ var WorksheetStructureImpl = class {
84767
84358
  async getMergedRegions() {
84768
84359
  const regions = await getAll3(this.ctx, this.sheetId);
84769
84360
  return regions.map((r) => ({
84770
- range: `${toA1(r.startRow, r.startCol)}:${toA1(r.endRow, r.endCol)}`,
84361
+ range: `${toA12(r.startRow, r.startCol)}:${toA12(r.endRow, r.endCol)}`,
84771
84362
  startRow: r.startRow,
84772
84363
  startCol: r.startCol,
84773
84364
  endRow: r.endRow,
@@ -84830,8 +84421,8 @@ function parseA1Range(range2) {
84830
84421
  };
84831
84422
  }
84832
84423
  function bridgeTableToTableInfo(table) {
84833
- const startLetter = colToLetter2(table.range.startCol);
84834
- const endLetter = colToLetter2(table.range.endCol);
84424
+ const startLetter = colToLetter3(table.range.startCol);
84425
+ const endLetter = colToLetter3(table.range.endCol);
84835
84426
  const startRowA1 = table.range.startRow + 1;
84836
84427
  const endRowA1 = table.range.endRow + 1;
84837
84428
  const range2 = `${startLetter}${startRowA1}:${endLetter}${endRowA1}`;
@@ -84876,16 +84467,16 @@ function getDataBodyRangeFromInfo(table) {
84876
84467
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
84877
84468
  const dataEndRow = table.showTotals ? parsed.endRow - 1 : parsed.endRow;
84878
84469
  if (dataStartRow > dataEndRow) return null;
84879
- const startLetter = colToLetter2(parsed.startCol);
84880
- const endLetter = colToLetter2(parsed.endCol);
84470
+ const startLetter = colToLetter3(parsed.startCol);
84471
+ const endLetter = colToLetter3(parsed.endCol);
84881
84472
  return `${startLetter}${dataStartRow + 1}:${endLetter}${dataEndRow + 1}`;
84882
84473
  }
84883
84474
  function getHeaderRowRangeFromInfo(table) {
84884
84475
  if (!table.hasHeaders) return null;
84885
84476
  const parsed = parseA1Range(table.range);
84886
84477
  if (!parsed) return null;
84887
- const startLetter = colToLetter2(parsed.startCol);
84888
- const endLetter = colToLetter2(parsed.endCol);
84478
+ const startLetter = colToLetter3(parsed.startCol);
84479
+ const endLetter = colToLetter3(parsed.endCol);
84889
84480
  const headerRow = parsed.startRow + 1;
84890
84481
  return `${startLetter}${headerRow}:${endLetter}${headerRow}`;
84891
84482
  }
@@ -84893,8 +84484,8 @@ function getTotalRowRangeFromInfo(table) {
84893
84484
  if (!table.showTotals) return null;
84894
84485
  const parsed = parseA1Range(table.range);
84895
84486
  if (!parsed) return null;
84896
- const startLetter = colToLetter2(parsed.startCol);
84897
- const endLetter = colToLetter2(parsed.endCol);
84487
+ const startLetter = colToLetter3(parsed.startCol);
84488
+ const endLetter = colToLetter3(parsed.endCol);
84898
84489
  const totalRow = parsed.endRow + 1;
84899
84490
  return `${startLetter}${totalRow}:${endLetter}${totalRow}`;
84900
84491
  }
@@ -84937,9 +84528,9 @@ var WorksheetTablesImpl = class {
84937
84528
  if (!match) {
84938
84529
  throw new KernelError("COMPUTE_ERROR", `Invalid range: ${range2}`);
84939
84530
  }
84940
- const startCol = letterToCol2(match[1]);
84531
+ const startCol = letterToCol3(match[1]);
84941
84532
  const startRow = parseInt(match[2], 10) - 1;
84942
- const endCol = letterToCol2(match[3]);
84533
+ const endCol = letterToCol3(match[3]);
84943
84534
  const endRow = parseInt(match[4], 10) - 1;
84944
84535
  await this.ctx.computeBridge.createTable(
84945
84536
  this.sheetId,
@@ -85019,9 +84610,9 @@ var WorksheetTablesImpl = class {
85019
84610
  if (!parsed) {
85020
84611
  throw new KernelError("COMPUTE_ERROR", `Invalid table range: ${table.range}`);
85021
84612
  }
85022
- const startCol = letterToCol2(parsed[1]);
84613
+ const startCol = letterToCol3(parsed[1]);
85023
84614
  const startRow = parseInt(parsed[2], 10) - 1;
85024
- const endCol = letterToCol2(parsed[3]);
84615
+ const endCol = letterToCol3(parsed[3]);
85025
84616
  const endRow = parseInt(parsed[4], 10) - 1;
85026
84617
  const filter = await getFilterForRange(this.ctx, this.sheetId, {
85027
84618
  startRow,
@@ -85042,9 +84633,9 @@ var WorksheetTablesImpl = class {
85042
84633
  if (!match) {
85043
84634
  throw new KernelError("COMPUTE_ERROR", `Invalid range: ${newRange}`);
85044
84635
  }
85045
- const startCol = letterToCol2(match[1]);
84636
+ const startCol = letterToCol3(match[1]);
85046
84637
  const startRow = parseInt(match[2], 10) - 1;
85047
- const endCol = letterToCol2(match[3]);
84638
+ const endCol = letterToCol3(match[3]);
85048
84639
  const endRow = parseInt(match[4], 10) - 1;
85049
84640
  await this.ctx.computeBridge.resizeTable(name, startRow, startCol, endRow, endCol);
85050
84641
  }
@@ -85175,8 +84766,8 @@ var WorksheetTablesImpl = class {
85175
84766
  if (!parsed) throw new KernelError("COMPUTE_ERROR", `Invalid table range: ${table.range}`);
85176
84767
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
85177
84768
  const absRow = dataStartRow + index;
85178
- const startLetter = colToLetter2(parsed.startCol);
85179
- const endLetter = colToLetter2(parsed.endCol);
84769
+ const startLetter = colToLetter3(parsed.startCol);
84770
+ const endLetter = colToLetter3(parsed.endCol);
85180
84771
  return `${startLetter}${absRow + 1}:${endLetter}${absRow + 1}`;
85181
84772
  }
85182
84773
  async getRowValues(tableName, index) {
@@ -85215,7 +84806,7 @@ var WorksheetTablesImpl = class {
85215
84806
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
85216
84807
  const dataEndRow = table.showTotals ? parsed.endRow - 1 : parsed.endRow;
85217
84808
  if (dataStartRow > dataEndRow) return null;
85218
- const letter = colToLetter2(col);
84809
+ const letter = colToLetter3(col);
85219
84810
  return `${letter}${dataStartRow + 1}:${letter}${dataEndRow + 1}`;
85220
84811
  }
85221
84812
  async getColumnHeaderRange(tableName, columnIndex) {
@@ -85225,7 +84816,7 @@ var WorksheetTablesImpl = class {
85225
84816
  if (!parsed) return null;
85226
84817
  const col = parsed.startCol + columnIndex;
85227
84818
  if (col > parsed.endCol) return null;
85228
- const letter = colToLetter2(col);
84819
+ const letter = colToLetter3(col);
85229
84820
  const headerRow = parsed.startRow + 1;
85230
84821
  return `${letter}${headerRow}`;
85231
84822
  }
@@ -85236,7 +84827,7 @@ var WorksheetTablesImpl = class {
85236
84827
  if (!parsed) return null;
85237
84828
  const col = parsed.startCol + columnIndex;
85238
84829
  if (col > parsed.endCol) return null;
85239
- const letter = colToLetter2(col);
84830
+ const letter = colToLetter3(col);
85240
84831
  return `${letter}${parsed.startRow + 1}:${letter}${parsed.endRow + 1}`;
85241
84832
  }
85242
84833
  async getColumnTotalRange(tableName, columnIndex) {
@@ -85246,7 +84837,7 @@ var WorksheetTablesImpl = class {
85246
84837
  if (!parsed) return null;
85247
84838
  const col = parsed.startCol + columnIndex;
85248
84839
  if (col > parsed.endCol) return null;
85249
- const letter = colToLetter2(col);
84840
+ const letter = colToLetter3(col);
85250
84841
  const totalRow = parsed.endRow + 1;
85251
84842
  return `${letter}${totalRow}`;
85252
84843
  }
@@ -85345,7 +84936,7 @@ var WorksheetTablesImpl = class {
85345
84936
  async sortClear(_tableName) {
85346
84937
  }
85347
84938
  };
85348
- function letterToCol2(letters) {
84939
+ function letterToCol3(letters) {
85349
84940
  let col = 0;
85350
84941
  for (let i = 0; i < letters.length; i++) {
85351
84942
  col = col * 26 + (letters.toUpperCase().charCodeAt(i) - 64);
@@ -85356,9 +84947,9 @@ function parseA1Range2(range2) {
85356
84947
  const match = range2.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/i);
85357
84948
  if (!match) return null;
85358
84949
  return {
85359
- startCol: letterToCol2(match[1]),
84950
+ startCol: letterToCol3(match[1]),
85360
84951
  startRow: parseInt(match[2], 10) - 1,
85361
- endCol: letterToCol2(match[3]),
84952
+ endCol: letterToCol3(match[3]),
85362
84953
  endRow: parseInt(match[4], 10) - 1
85363
84954
  };
85364
84955
  }
@@ -85547,8 +85138,8 @@ function rangeSchemaToValidationRule(schema) {
85547
85138
  const start = parseRefIdSimple(ref.startId);
85548
85139
  const end = parseRefIdSimple(ref.endId);
85549
85140
  if (start && end) {
85550
- const startA1 = toA1(start.row, start.col);
85551
- const endA1 = toA1(end.row, end.col);
85141
+ const startA1 = toA12(start.row, start.col);
85142
+ const endA1 = toA12(end.row, end.col);
85552
85143
  range2 = startA1 === endA1 ? startA1 : `${startA1}:${endA1}`;
85553
85144
  }
85554
85145
  }
@@ -85581,8 +85172,8 @@ function rangeSchemaToValidationRule(schema) {
85581
85172
  const srcStart = parseRefIdSimple(src.startId);
85582
85173
  const srcEnd = parseRefIdSimple(src.endId);
85583
85174
  if (srcStart && srcEnd) {
85584
- const srcStartA1 = toA1(srcStart.row, srcStart.col);
85585
- const srcEndA1 = toA1(srcEnd.row, srcEnd.col);
85175
+ const srcStartA1 = toA12(srcStart.row, srcStart.col);
85176
+ const srcEndA1 = toA12(srcEnd.row, srcEnd.col);
85586
85177
  rule.listSource = srcStartA1 === srcEndA1 ? `=${srcStartA1}` : `=${srcStartA1}:${srcEndA1}`;
85587
85178
  }
85588
85179
  }
@@ -87799,11 +87390,12 @@ var WorksheetImpl = class {
87799
87390
  if (!result.success) {
87800
87391
  throw result.error;
87801
87392
  }
87393
+ return result.data;
87802
87394
  }
87803
87395
  async clear(range2, applyTo) {
87804
87396
  const parsed = parseCellRange(range2);
87805
87397
  if (!parsed) throw new KernelError("COMPUTE_ERROR", `Invalid range: "${range2}"`);
87806
- await clearWithMode(
87398
+ return clearWithMode(
87807
87399
  this.ctx,
87808
87400
  this.sheetId,
87809
87401
  { sheetId: this.sheetId, ...parsed },
@@ -87851,7 +87443,7 @@ var WorksheetImpl = class {
87851
87443
  format: format ?? void 0,
87852
87444
  hyperlink: hyperlink ?? void 0,
87853
87445
  isMerged: mergeInfo !== void 0,
87854
- mergedRegion: mergeInfo ? `${toA1(mergeInfo.startRow, mergeInfo.startCol)}:${toA1(mergeInfo.endRow, mergeInfo.endCol)}` : void 0
87446
+ mergedRegion: mergeInfo ? `${toA12(mergeInfo.startRow, mergeInfo.startCol)}:${toA12(mergeInfo.endRow, mergeInfo.endCol)}` : void 0
87855
87447
  };
87856
87448
  }
87857
87449
  async getRawRangeData(range2, _includeFormula) {
@@ -87878,7 +87470,8 @@ var WorksheetImpl = class {
87878
87470
  } else {
87879
87471
  rowData.push({
87880
87472
  value: viewportCellValueToCellValue(vc.value) ?? null,
87881
- formula: vc.formula
87473
+ formula: vc.formula,
87474
+ format: vc.format ?? void 0
87882
87475
  });
87883
87476
  }
87884
87477
  }
@@ -87903,10 +87496,10 @@ var WorksheetImpl = class {
87903
87496
  const { row, col } = resolveCell(address);
87904
87497
  const data = await getCell(this.ctx, this.sheetId, row, col);
87905
87498
  if (!data) return "";
87906
- const rawValue = viewportCellValueToString(data.value);
87907
- let result = rawValue;
87499
+ const displayValue = await getDisplayValue2(this.ctx, this.sheetId, row, col);
87500
+ let result = displayValue;
87908
87501
  if (data.formula) {
87909
- result = rawValue !== "" ? `${rawValue}(${data.formula})` : `(${data.formula})`;
87502
+ result = displayValue !== "" ? `${displayValue}(${data.formula})` : `(${data.formula})`;
87910
87503
  }
87911
87504
  const styleHintsStr = await getStyleHints(this.ctx, this.sheetId, row, col);
87912
87505
  if (styleHintsStr) {
@@ -87965,17 +87558,15 @@ var WorksheetImpl = class {
87965
87558
  }
87966
87559
  for (let row = parsed.startRow; row <= parsed.endRow; row++) {
87967
87560
  const rowValues = [];
87968
- let hasContent = false;
87969
87561
  for (let col = parsed.startCol; col <= parsed.endCol; col++) {
87970
- const cellAddr = toA1(row, col);
87562
+ const cellAddr = toA12(row, col);
87971
87563
  const vc = cellMap.get(`${row},${col}`);
87972
87564
  if (!vc) {
87973
87565
  rowValues.push(`${cellAddr}:`);
87974
87566
  continue;
87975
87567
  }
87976
- const rawValue = viewportCellValueToString(vc.value);
87977
- let cellStr = rawValue;
87978
- hasContent = true;
87568
+ const displayValue = vc.formatted ?? viewportCellValueToString(vc.value);
87569
+ let cellStr = displayValue;
87979
87570
  if (vc.formula) {
87980
87571
  const abbreviation = formulaAnalysis.formulaToId.get(`${row},${col}`);
87981
87572
  if (abbreviation) {
@@ -87986,9 +87577,7 @@ var WorksheetImpl = class {
87986
87577
  }
87987
87578
  rowValues.push(`${cellAddr}:${cellStr}`);
87988
87579
  }
87989
- if (hasContent) {
87990
- outputParts.push(rowValues.join(" | "));
87991
- }
87580
+ outputParts.push(rowValues.join(" | "));
87992
87581
  }
87993
87582
  const formulaDocs = generateFormulaDocumentation(formulaAnalysis);
87994
87583
  if (formulaDocs.length > 0) {
@@ -88077,8 +87666,8 @@ var WorksheetImpl = class {
88077
87666
  lines.push(`Sheet: ${meta.name}`);
88078
87667
  const bounds = await this.ctx.computeBridge.getDataBounds(this.sheetId);
88079
87668
  if (bounds) {
88080
- const startAddr = toA1(bounds.minRow, bounds.minCol);
88081
- const endAddr = toA1(bounds.maxRow, bounds.maxCol);
87669
+ const startAddr = toA12(bounds.minRow, bounds.minCol);
87670
+ const endAddr = toA12(bounds.maxRow, bounds.maxCol);
88082
87671
  lines.push(`Used Range: ${startAddr}:${endAddr}`);
88083
87672
  lines.push(
88084
87673
  `Dimensions: ${bounds.maxRow - bounds.minRow + 1} rows x ${bounds.maxCol - bounds.minCol + 1} columns`
@@ -88098,20 +87687,31 @@ var WorksheetImpl = class {
88098
87687
  const tables = await getTablesInSheet(this.ctx, this.sheetId);
88099
87688
  if (tables.length > 0) {
88100
87689
  const tableDescs = tables.map((t) => {
88101
- const r = `${toA1(t.range.startRow, t.range.startCol)}:${toA1(t.range.endRow, t.range.endCol)}`;
87690
+ const r = `${toA12(t.range.startRow, t.range.startCol)}:${toA12(t.range.endRow, t.range.endCol)}`;
88102
87691
  return `${t.name} at ${r}`;
88103
87692
  });
88104
87693
  lines.push(`Tables: ${tables.length} (${tableDescs.join(", ")})`);
88105
87694
  }
88106
- const allNamedRanges = await getAll(this.ctx);
88107
- const sheetNamedRanges = allNamedRanges.filter((nr) => nr.scope === this.sheetId || !nr.scope);
88108
- if (sheetNamedRanges.length > 0) {
87695
+ const allVisible = await getVisible(this.ctx);
87696
+ const scoped = allVisible.filter((nr) => nr.scope === this.sheetId || !nr.scope);
87697
+ const valid = scoped.filter((nr) => !nr.refersTo.template.includes("#REF!"));
87698
+ const broken = scoped.length - valid.length;
87699
+ if (valid.length > 0 || broken > 0) {
87700
+ const toShow = valid.slice(0, MAX_SUMMARY_NAMED_RANGES);
88109
87701
  const nrDescs = [];
88110
- for (const nr of sheetNamedRanges) {
87702
+ for (const nr of toShow) {
88111
87703
  const a1 = await getRefersToA1(this.ctx, nr);
88112
87704
  nrDescs.push(`${nr.name}=${a1}`);
88113
87705
  }
88114
- lines.push(`Named Ranges: ${sheetNamedRanges.length} (${nrDescs.join(", ")})`);
87706
+ let label = `Named Ranges: ${valid.length}`;
87707
+ if (broken > 0) label += ` valid, ${broken} broken (#REF!) omitted`;
87708
+ if (nrDescs.length > 0) {
87709
+ const showing = valid.length > MAX_SUMMARY_NAMED_RANGES ? `showing ${MAX_SUMMARY_NAMED_RANGES}: ` : "";
87710
+ const more = valid.length > MAX_SUMMARY_NAMED_RANGES ? ` \u2014 ${valid.length - MAX_SUMMARY_NAMED_RANGES} more not shown` : "";
87711
+ lines.push(`${label} (${showing}${nrDescs.join(", ")})${more}`);
87712
+ } else {
87713
+ lines.push(label);
87714
+ }
88115
87715
  }
88116
87716
  const maxRows = options?.maxRows;
88117
87717
  const maxCols = options?.maxCols;
@@ -88141,9 +87741,7 @@ var WorksheetImpl = class {
88141
87741
  }
88142
87742
  const firstRowCells = (rowMap.get(finalRange.startRow) ?? []).slice().sort((a, b) => a.col - b.col);
88143
87743
  if (firstRowCells.length > 0) {
88144
- const allStrings = firstRowCells.every(
88145
- (vc) => typeof vc.value === "string" && !vc.formula
88146
- );
87744
+ const allStrings = firstRowCells.every((vc) => typeof vc.value === "string" && !vc.formula);
88147
87745
  if (allStrings) {
88148
87746
  const headers = firstRowCells.map((vc) => String(vc.value));
88149
87747
  lines.push(`Headers: ${headers.join(", ")}`);
@@ -88180,7 +87778,7 @@ var WorksheetImpl = class {
88180
87778
  const rowData = [];
88181
87779
  for (const vc of cells) {
88182
87780
  const rawValue = viewportCellValueToString(vc.value);
88183
- const addr = toA1(vc.row, vc.col);
87781
+ const addr = toA12(vc.row, vc.col);
88184
87782
  if (vc.formula) {
88185
87783
  rowData.push(`${addr}:${rawValue}(=${vc.formula})`);
88186
87784
  } else {
@@ -88204,7 +87802,7 @@ var WorksheetImpl = class {
88204
87802
  async getUsedRange() {
88205
87803
  const range2 = await getUsedRange2(this.ctx, this.sheetId);
88206
87804
  if (!range2) return null;
88207
- return `${toA1(range2.startRow, range2.startCol)}:${toA1(range2.endRow, range2.endCol)}`;
87805
+ return `${toA12(range2.startRow, range2.startCol)}:${toA12(range2.endRow, range2.endCol)}`;
88208
87806
  }
88209
87807
  async getCurrentRegion(row, col) {
88210
87808
  return getCurrentRegion(this.ctx, this.sheetId, row, col);
@@ -88214,15 +87812,15 @@ var WorksheetImpl = class {
88214
87812
  }
88215
87813
  async findCells(predicate) {
88216
87814
  const addresses = await findCells(this.ctx, this.sheetId, predicate);
88217
- return addresses.map((a) => toA1(a.row, a.col));
87815
+ return addresses.map((a) => toA12(a.row, a.col));
88218
87816
  }
88219
87817
  async findByValue(value) {
88220
87818
  const addresses = await findByValue(this.ctx, this.sheetId, value);
88221
- return addresses.map((a) => toA1(a.row, a.col));
87819
+ return addresses.map((a) => toA12(a.row, a.col));
88222
87820
  }
88223
87821
  async findByFormula(pattern) {
88224
87822
  const addresses = await findByFormula(this.ctx, this.sheetId, pattern);
88225
- return addresses.map((a) => toA1(a.row, a.col));
87823
+ return addresses.map((a) => toA12(a.row, a.col));
88226
87824
  }
88227
87825
  async regexSearch(patterns, options) {
88228
87826
  const results = await regexSearch(this.ctx, this.sheetId, patterns, {
@@ -88361,7 +87959,7 @@ var WorksheetImpl = class {
88361
87959
  await this.setRange(start.row, start.col, allRows);
88362
87960
  const endRow = start.row + allRows.length - 1;
88363
87961
  const endCol = start.col + headers.length - 1;
88364
- const rangeA1 = `${toA1(start.row, start.col)}:${toA1(endRow, endCol)}`;
87962
+ const rangeA1 = `${toA12(start.row, start.col)}:${toA12(endRow, endCol)}`;
88365
87963
  await this.tables.add(rangeA1, { name, hasHeaders: true });
88366
87964
  }
88367
87965
  // ===========================================================================
@@ -88604,7 +88202,7 @@ var WorksheetImpl = class {
88604
88202
  case 1:
88605
88203
  return accessor.numberValue;
88606
88204
  case 2:
88607
- return displayStringOrNull(accessor.displayText);
88205
+ return displayStringOrNull3(accessor.displayText);
88608
88206
  case 3:
88609
88207
  return accessor.numberValue !== 0;
88610
88208
  case 4: {
@@ -88754,6 +88352,9 @@ var WorksheetImpl = class {
88754
88352
  }
88755
88353
  return this._cellMetadata;
88756
88354
  }
88355
+ get changes() {
88356
+ return this._changes ??= new WorksheetChangesImpl(this.ctx, this.sheetId);
88357
+ }
88757
88358
  get formats() {
88758
88359
  return this._formats ??= new WorksheetFormatsImpl(this.ctx, this.sheetId);
88759
88360
  }
@@ -89225,7 +88826,7 @@ var WorkbookThemeImpl = class {
89225
88826
 
89226
88827
  // ../../kernel/src/api/workbook/workbook-impl.ts
89227
88828
  init_esm_shims();
89228
- init_disposable2();
88829
+ init_disposable();
89229
88830
  init_errors();
89230
88831
 
89231
88832
  // ../../kernel/src/domain/form-controls/index.ts
@@ -89812,26 +89413,7 @@ var globalRegistry = new FunctionRegistry();
89812
89413
 
89813
89414
  // ../../spreadsheet-utils/src/function-catalog.ts
89814
89415
  init_esm_shims();
89815
-
89816
- // ../../contracts/src/utils/function-registry.ts
89817
- init_esm_shims();
89818
- var FunctionCategory = /* @__PURE__ */ ((FunctionCategory2) => {
89819
- FunctionCategory2["MATH"] = "Math";
89820
- FunctionCategory2["STATISTICAL"] = "Statistical";
89821
- FunctionCategory2["TEXT"] = "Text";
89822
- FunctionCategory2["LOGICAL"] = "Logical";
89823
- FunctionCategory2["DATE_TIME"] = "Date & Time";
89824
- FunctionCategory2["LOOKUP"] = "Lookup & Reference";
89825
- FunctionCategory2["FINANCIAL"] = "Financial";
89826
- FunctionCategory2["INFORMATION"] = "Information";
89827
- FunctionCategory2["DATABASE"] = "Database";
89828
- FunctionCategory2["ENGINEERING"] = "Engineering";
89829
- FunctionCategory2["WEB"] = "Web";
89830
- FunctionCategory2["TESTING"] = "Testing";
89831
- return FunctionCategory2;
89832
- })(FunctionCategory || {});
89833
-
89834
- // ../../spreadsheet-utils/src/function-catalog.ts
89416
+ import { FunctionCategory } from "@mog-sdk/spreadsheet-contracts/utils/function-registry";
89835
89417
  var C = FunctionCategory;
89836
89418
  var INLINE_FUNCTIONS = [
89837
89419
  // Aggregates
@@ -90698,7 +90280,7 @@ function convertToFunctionInfo(metadata) {
90698
90280
 
90699
90281
  // ../../kernel/src/api/workbook/viewport.ts
90700
90282
  init_esm_shims();
90701
- init_disposable2();
90283
+ init_disposable();
90702
90284
  var regionCounter = 0;
90703
90285
  var ViewportRegionImpl = class extends DisposableBase {
90704
90286
  constructor(sheetId, bounds, computeBridge, viewportId) {
@@ -90752,7 +90334,7 @@ var WorkbookViewportImpl = class {
90752
90334
  };
90753
90335
 
90754
90336
  // ../../kernel/src/api/workbook/workbook-impl.ts
90755
- init_rendering();
90337
+ import { DEFAULT_CHROME_THEME } from "@mog-sdk/spreadsheet-contracts/rendering";
90756
90338
  var API_EVENT_TO_INTERNAL = {
90757
90339
  cellChanged: "cell:changed",
90758
90340
  rangeChanged: "range:changed",
@@ -91087,6 +90669,34 @@ var WorkbookImpl = class {
91087
90669
  calculationSettings: calcSettings
91088
90670
  });
91089
90671
  }
90672
+ async getIterativeCalculation() {
90673
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90674
+ return settings.calculationSettings?.enableIterativeCalculation ?? false;
90675
+ }
90676
+ async setIterativeCalculation(enabled) {
90677
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90678
+ const calcSettings = {
90679
+ ...settings.calculationSettings ?? {},
90680
+ enableIterativeCalculation: enabled
90681
+ };
90682
+ await this.ctx.computeBridge.patchWorkbookSettings({
90683
+ calculationSettings: calcSettings
90684
+ });
90685
+ }
90686
+ async setMaxIterations(n) {
90687
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90688
+ const calcSettings = { ...settings.calculationSettings ?? {}, maxIterations: n };
90689
+ await this.ctx.computeBridge.patchWorkbookSettings({
90690
+ calculationSettings: calcSettings
90691
+ });
90692
+ }
90693
+ async setConvergenceThreshold(threshold) {
90694
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90695
+ const calcSettings = { ...settings.calculationSettings ?? {}, maxChange: threshold };
90696
+ await this.ctx.computeBridge.patchWorkbookSettings({
90697
+ calculationSettings: calcSettings
90698
+ });
90699
+ }
91090
90700
  async getUsePrecisionAsDisplayed() {
91091
90701
  const settings = await this.ctx.computeBridge.getWorkbookSettings();
91092
90702
  return !(settings.calculationSettings?.fullPrecision ?? true);
@@ -91246,7 +90856,7 @@ var WorkbookImpl = class {
91246
90856
  // Utilities (sync)
91247
90857
  // ===========================================================================
91248
90858
  indexToAddress(row, col) {
91249
- return toA1(row, col);
90859
+ return toA12(row, col);
91250
90860
  }
91251
90861
  addressToIndex(address) {
91252
90862
  const parsed = parseCellAddress(address);
@@ -91498,6 +91108,7 @@ var api_spec_default = {
91498
91108
  },
91499
91109
  ws: {
91500
91110
  smartArt: "WorksheetSmartArt",
91111
+ changes: "WorksheetChanges",
91501
91112
  formats: "WorksheetFormats",
91502
91113
  layout: "WorksheetLayout",
91503
91114
  view: "WorksheetView",
@@ -91609,6 +91220,26 @@ var api_spec_default = {
91609
91220
  docstring: "Set the calculation mode.\nConvenience mutator \u2014 patches `calculationSettings.calcMode`.",
91610
91221
  usedTypes: []
91611
91222
  },
91223
+ getIterativeCalculation: {
91224
+ signature: "getIterativeCalculation(): Promise<boolean>;",
91225
+ docstring: "Get whether iterative calculation is enabled for circular references.\nConvenience accessor \u2014 equivalent to `(await getSettings()).calculationSettings.enableIterativeCalculation`.",
91226
+ usedTypes: []
91227
+ },
91228
+ setIterativeCalculation: {
91229
+ signature: "setIterativeCalculation(enabled: boolean): Promise<void>;",
91230
+ docstring: "Set whether iterative calculation is enabled for circular references.\nConvenience mutator \u2014 patches `calculationSettings.enableIterativeCalculation`.",
91231
+ usedTypes: []
91232
+ },
91233
+ setMaxIterations: {
91234
+ signature: "setMaxIterations(n: number): Promise<void>;",
91235
+ docstring: "Set the maximum number of iterations for iterative calculation.\nConvenience mutator \u2014 patches `calculationSettings.maxIterations`.",
91236
+ usedTypes: []
91237
+ },
91238
+ setConvergenceThreshold: {
91239
+ signature: "setConvergenceThreshold(threshold: number): Promise<void>;",
91240
+ docstring: "Set the convergence threshold (maximum change) for iterative calculation.\nConvenience mutator \u2014 patches `calculationSettings.maxChange`.",
91241
+ usedTypes: []
91242
+ },
91612
91243
  getUsePrecisionAsDisplayed: {
91613
91244
  signature: "getUsePrecisionAsDisplayed(): Promise<boolean>;",
91614
91245
  docstring: "Whether to use displayed precision instead of full (15-digit) precision.\nConvenience accessor \u2014 inverted from `calculationSettings.fullPrecision`.",
@@ -91820,18 +91451,21 @@ var api_spec_default = {
91820
91451
  usedTypes: []
91821
91452
  },
91822
91453
  clearData: {
91823
- signature: "clearData(range: string): Promise<void>;",
91454
+ signature: "clearData(range: string): Promise<ClearResult>;",
91824
91455
  docstring: 'Clear all cell data (values and formulas) in a range (A1 notation, e.g. "A1:C3").',
91825
- usedTypes: []
91456
+ usedTypes: [
91457
+ "ClearResult"
91458
+ ]
91826
91459
  },
91827
91460
  clear: {
91828
- signature: "clear(range: string, applyTo?: ClearApplyTo): Promise<void>;",
91461
+ signature: "clear(range: string, applyTo?: ClearApplyTo): Promise<ClearResult>;",
91829
91462
  docstring: `Unified clear with mode selection (OfficeJS Range.clear equivalent).
91830
91463
 
91831
91464
  @param range - A1 range string (e.g. "A1:C3")
91832
91465
  @param applyTo - What to clear: 'all' (default), 'contents', 'formats', 'hyperlinks'`,
91833
91466
  usedTypes: [
91834
- "ClearApplyTo"
91467
+ "ClearApplyTo",
91468
+ "ClearResult"
91835
91469
  ]
91836
91470
  },
91837
91471
  getValue: {
@@ -92710,21 +92344,36 @@ var api_spec_default = {
92710
92344
  }
92711
92345
  }
92712
92346
  },
92347
+ WorksheetChanges: {
92348
+ docstring: "Sub-API for opt-in change tracking on a worksheet.",
92349
+ functions: {
92350
+ track: {
92351
+ signature: "track(options?: ChangeTrackOptions): ChangeTracker;",
92352
+ docstring: "Create a change tracker that accumulates cell-level change records\nfrom this point forward.\n\n@param options - Optional scope and origin filters\n@returns A ChangeTracker handle \u2014 call collect() to drain, close() when done",
92353
+ usedTypes: [
92354
+ "ChangeTrackOptions",
92355
+ "ChangeTracker"
92356
+ ]
92357
+ }
92358
+ }
92359
+ },
92713
92360
  WorksheetFormats: {
92714
92361
  docstring: "Sub-API for cell formatting operations on a worksheet.",
92715
92362
  functions: {
92716
92363
  set: {
92717
- signature: "set(address: string, format: CellFormat): Promise<void>;",
92364
+ signature: "set(address: string, format: CellFormat): Promise<FormatChangeResult>;",
92718
92365
  docstring: 'Set format for a single cell.\n\n@param address - A1-style cell address (e.g. "A1", "B3")\n@param format - Format properties to apply',
92719
92366
  usedTypes: [
92720
- "CellFormat"
92367
+ "CellFormat",
92368
+ "FormatChangeResult"
92721
92369
  ]
92722
92370
  },
92723
92371
  setRange: {
92724
- signature: "setRange(range: string, format: CellFormat): Promise<void>;",
92372
+ signature: "setRange(range: string, format: CellFormat): Promise<FormatChangeResult>;",
92725
92373
  docstring: 'Set format for a contiguous range.\n\n@param range - A1-style range string (e.g. "A1:B2")\n@param format - Format properties to apply',
92726
92374
  usedTypes: [
92727
- "CellFormat"
92375
+ "CellFormat",
92376
+ "FormatChangeResult"
92728
92377
  ]
92729
92378
  },
92730
92379
  setRanges: {
@@ -92741,10 +92390,10 @@ var api_spec_default = {
92741
92390
  usedTypes: []
92742
92391
  },
92743
92392
  get: {
92744
- signature: "get(address: string): Promise<CellFormat | null>;",
92745
- docstring: "Get the format of a single cell.\n\n@param address - A1-style cell address\n@returns The cell format, or null if no format is set",
92393
+ signature: "get(address: string): Promise<ResolvedCellFormat>;",
92394
+ docstring: "Get the fully-resolved format of a single cell.\n\nReturns a dense CellFormat with all fields present (null for unset properties,\nnever undefined). Includes the full cascade (default \u2192 col \u2192 row \u2192 table \u2192 cell \u2192 CF)\nwith theme colors resolved to hex.\n\n@param address - A1-style cell address\n@returns The resolved cell format (always an object, never null)",
92746
92395
  usedTypes: [
92747
- "CellFormat"
92396
+ "ResolvedCellFormat"
92748
92397
  ]
92749
92398
  },
92750
92399
  adjustIndent: {
@@ -93553,7 +93202,7 @@ var api_spec_default = {
93553
93202
  usedTypes: []
93554
93203
  },
93555
93204
  setCriteria: {
93556
- signature: "setCriteria(\n filterId: string,\n col: number,\n criteria: ColumnFilterCriteria,\n ): Promise<void>;",
93205
+ signature: "setCriteria(filterId: string, col: number, criteria: ColumnFilterCriteria): Promise<void>;",
93557
93206
  docstring: "Set filter criteria for a column using filter ID.\n\n@param filterId - Filter ID\n@param col - Column index (0-based)\n@param criteria - Filter criteria to apply",
93558
93207
  usedTypes: [
93559
93208
  "ColumnFilterCriteria"
@@ -94871,6 +94520,11 @@ var api_spec_default = {
94871
94520
  definition: "'standard' | 'stacked' | 'percentStacked'",
94872
94521
  docstring: ""
94873
94522
  },
94523
+ AutoFillChange: {
94524
+ name: "AutoFillChange",
94525
+ definition: "{\n row: number;\n col: number;\n type: 'value' | 'formula' | 'format' | 'clear';\n}",
94526
+ docstring: "A single cell change produced by the fill engine."
94527
+ },
94874
94528
  AutoFillMode: {
94875
94529
  name: "AutoFillMode",
94876
94530
  definition: "| 'auto' // Detect pattern automatically (default)\n | 'copy' // Always copy (no series)\n | 'series' // Force series interpretation\n | 'days' // Force date unit: days\n | 'weekdays' // Force date unit: weekdays\n | 'months' // Force date unit: months\n | 'years' // Force date unit: years\n | 'formats' // Copy formats only\n | 'values' // Copy values only (no formats)\n | 'withoutFormats' // Copy values + formulas, skip formats\n | 'linearTrend' // Force linear regression trend\n | 'growthTrend'",
@@ -94878,7 +94532,7 @@ var api_spec_default = {
94878
94532
  },
94879
94533
  AutoFillResult: {
94880
94534
  name: "AutoFillResult",
94881
- definition: "{\n /** The pattern that was detected (or forced by mode) */\n patternType: FillPatternType;\n /** Number of cells that were filled */\n filledCellCount: number;\n /** Any warnings generated during fill */\n warnings: AutoFillWarning[];\n}",
94535
+ definition: "{\n /** The pattern that was detected (or forced by mode) */\n patternType: FillPatternType;\n /** Number of cells that were filled */\n filledCellCount: number;\n /** Any warnings generated during fill */\n warnings: AutoFillWarning[];\n /** Per-cell changes listing each cell written */\n changes: AutoFillChange[];\n}",
94882
94536
  docstring: "Result from autoFill() \u2014 summary of what the fill engine did."
94883
94537
  },
94884
94538
  AutoFillWarning: {
@@ -95225,6 +94879,37 @@ Example: { ignoreError: true } to suppress error indicators. */
95225
94879
  definition: "{\n /** If true, value is treated as a formula (prefixed with =) */\n asFormula?: boolean;\n}",
95226
94880
  docstring: "Options controlling how a cell value is interpreted when written."
95227
94881
  },
94882
+ ChangeOrigin: {
94883
+ name: "ChangeOrigin",
94884
+ definition: "'direct' | 'cascade' | 'remote'",
94885
+ docstring: "Origin of a change: direct write, formula recalculation, or remote collaborator."
94886
+ },
94887
+ ChangeRecord: {
94888
+ name: "ChangeRecord",
94889
+ definition: `{
94890
+ /** Cell address in A1 notation (e.g. "B1"). */
94891
+ address: string;
94892
+ /** 0-based row index. */
94893
+ row: number;
94894
+ /** 0-based column index. */
94895
+ col: number;
94896
+ /** What caused this change. */
94897
+ origin: ChangeOrigin;
94898
+ /** Type of change. */
94899
+ type: 'modified';
94900
+ }`,
94901
+ docstring: "WorksheetChanges \u2014 Sub-API for opt-in change tracking.\n\nCreates lightweight trackers that accumulate cell-level change records\nacross mutations. Trackers are opt-in to avoid bloating return values;\nthey return addresses + metadata only (no cell values) so callers can\nhydrate via getRange() when needed.\n\nInspired by:\n- Excel OfficeJS onChanged (lightweight payload + lazy hydration)\n- Firestore onSnapshot (query-scoped subscriptions)\n- Yjs transaction.origin (source/origin tagging for collab)"
94902
+ },
94903
+ ChangeTrackOptions: {
94904
+ name: "ChangeTrackOptions",
94905
+ definition: '{\n /** Only track changes within this range (A1 notation, e.g. "A1:Z100"). Omit for whole-sheet. */\n scope?: string;\n /** Exclude changes from these origin types. */\n excludeOrigins?: ChangeOrigin[];\n}',
94906
+ docstring: "Options for creating a change tracker."
94907
+ },
94908
+ ChangeTracker: {
94909
+ name: "ChangeTracker",
94910
+ definition: "{\n /** Drain all accumulated changes since creation or last collect() call.\nReturns addresses + metadata only (no cell values) \u2014 call ws.getRange()\nto hydrate if needed. */\n collect(): ChangeRecord[];;\n /** Stop tracking and release internal resources. */\n close(): void;;\n /** Whether this tracker is still active (not closed). */\n active: boolean;\n}",
94911
+ docstring: "A handle that accumulates change records across mutations."
94912
+ },
95228
94913
  Chart: {
95229
94914
  name: "Chart",
95230
94915
  definition: "{\n id: string;\n sheetId?: string;\n createdAt?: number;\n updatedAt?: number;\n}",
@@ -95359,6 +95044,11 @@ that are stored on the chart but not part of the core config schema. */
95359
95044
  definition: "'all' | 'contents' | 'formats' | 'hyperlinks'",
95360
95045
  docstring: "Determines which aspects of a range to clear.\nMatches OfficeJS Excel.ClearApplyTo enum."
95361
95046
  },
95047
+ ClearResult: {
95048
+ name: "ClearResult",
95049
+ definition: "{\n /** Number of cells in the cleared range. */\n cellCount: number;\n}",
95050
+ docstring: "Confirmation returned by clearData() and clear()."
95051
+ },
95362
95052
  CodeResult: {
95363
95053
  name: "CodeResult",
95364
95054
  definition: "{\n /** Whether execution completed successfully */\n success: boolean;\n /** Captured console output */\n output?: string;\n /** Error message (if success is false) */\n error?: string;\n /** Execution duration in milliseconds */\n duration?: number;\n}",
@@ -95572,6 +95262,11 @@ Used in condition filters where users specify rules like
95572
95262
  definition: "| 'shape'\n | 'connector'\n | 'picture'\n | 'textbox'\n | 'chart'\n | 'camera'\n | 'equation'\n | 'smartart'\n | 'drawing'\n | 'oleObject'\n | 'formControl'\n | 'slicer'\n | 'wordart'",
95573
95263
  docstring: "Type discriminator for floating objects. Superset of Rust FloatingObjectKind (12 variants) + legacy TS-only 'wordart'."
95574
95264
  },
95265
+ FormatChangeResult: {
95266
+ name: "FormatChangeResult",
95267
+ definition: "{\n /** Number of cells whose formatting was changed */\n cellCount: number;\n}",
95268
+ docstring: "Result of a format set/setRange operation."
95269
+ },
95575
95270
  FormatEntry: {
95576
95271
  name: "FormatEntry",
95577
95272
  definition: '{\n /** Cell value descriptor */\n value: { type: string; value?: unknown };\n /** Number format code (e.g., "#,##0.00") */\n formatCode: string;\n}',
@@ -95940,6 +95635,11 @@ Used in condition filters where users specify rules like
95940
95635
  definition: "{\n /** Number of duplicate rows removed */\n removedCount: number;\n /** Number of unique rows remaining */\n remainingCount: number;\n}",
95941
95636
  docstring: "Result of a remove-duplicates operation."
95942
95637
  },
95638
+ ResolvedCellFormat: {
95639
+ name: "ResolvedCellFormat",
95640
+ definition: "{\n [K in keyof CellFormat]-?: CellFormat[K] | null;\n}",
95641
+ docstring: "Dense cell format where every property is explicitly present (null when unset). Returned by formats.get()."
95642
+ },
95943
95643
  RichTextSegment: {
95944
95644
  name: "RichTextSegment",
95945
95645
  definition: "{\n text: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n color?: string;\n fontName?: string;\n fontSize?: number;\n}",
@@ -96020,7 +95720,7 @@ Used in condition filters where users specify rules like
96020
95720
  },
96021
95721
  SetCellsResult: {
96022
95722
  name: "SetCellsResult",
96023
- definition: "{\n /** Number of cells successfully written */\n cellsWritten: number;\n /** Per-cell errors, if any (omitted when all succeed) */\n errors?: Array<{ addr: string; error: string }>;\n /** Non-fatal warnings (e.g., deduplication, coercion) */\n warnings?: OperationWarning[];\n}",
95723
+ definition: "{\n /** Number of cells successfully written */\n cellsWritten: number;\n /** Per-cell errors, if any (omitted when all succeed) */\n errors?: Array<{ addr: string; error: string }> | null;\n /** Non-fatal warnings (e.g., deduplication, coercion) */\n warnings?: OperationWarning[];\n}",
96024
95724
  docstring: "Result of a bulk setCells() operation."
96025
95725
  },
96026
95726
  ShadowAlignment: {
@@ -96424,8 +96124,7 @@ Used in condition filters where users specify rules like
96424
96124
  definition: "{\n /** All sheets in the workbook */\n sheets: SheetSnapshot[];\n /** ID of the currently active sheet */\n activeSheetId: string;\n /** Total number of sheets */\n sheetCount: number;\n}",
96425
96125
  docstring: "A summary snapshot of the entire workbook state."
96426
96126
  }
96427
- },
96428
- generated: "2026-04-02T22:03:24.772Z"
96127
+ }
96429
96128
  };
96430
96129
 
96431
96130
  // src/api-describe.ts