@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.cjs CHANGED
@@ -295,36 +295,6 @@ var init_errors = __esm({
295
295
  }
296
296
  });
297
297
 
298
- // ../../contracts/src/document/protection.ts
299
- var DEFAULT_PROTECTION_OPTIONS, DEFAULT_WORKBOOK_PROTECTION_OPTIONS;
300
- var init_protection = __esm({
301
- "../../contracts/src/document/protection.ts"() {
302
- "use strict";
303
- init_cjs_shims();
304
- DEFAULT_PROTECTION_OPTIONS = {
305
- // Selection defaults to true (users can always select cells)
306
- selectLockedCells: true,
307
- selectUnlockedCells: true,
308
- // All other operations blocked by default
309
- insertRows: false,
310
- insertColumns: false,
311
- deleteRows: false,
312
- deleteColumns: false,
313
- formatCells: false,
314
- formatColumns: false,
315
- formatRows: false,
316
- sort: false,
317
- useAutoFilter: false,
318
- usePivotTableReports: false,
319
- editObjects: false,
320
- editScenarios: false
321
- };
322
- DEFAULT_WORKBOOK_PROTECTION_OPTIONS = {
323
- structure: true
324
- };
325
- }
326
- });
327
-
328
298
  // ../../infra/transport/src/command-metadata.gen.ts
329
299
  var BYTES_TUPLE_COMMANDS, RECALC_COMMANDS;
330
300
  var init_command_metadata_gen = __esm({
@@ -1334,6 +1304,106 @@ var init_schemas = __esm({
1334
1304
  }
1335
1305
  });
1336
1306
 
1307
+ // ../../kernel/src/api/worksheet/change-accumulator.ts
1308
+ function colToLetter(col) {
1309
+ let result = "";
1310
+ let c = col;
1311
+ while (c >= 0) {
1312
+ result = String.fromCharCode(c % 26 + 65) + result;
1313
+ c = Math.floor(c / 26) - 1;
1314
+ }
1315
+ return result;
1316
+ }
1317
+ function toA1(row, col) {
1318
+ return `${colToLetter(col)}${row + 1}`;
1319
+ }
1320
+ var ChangeAccumulator;
1321
+ var init_change_accumulator = __esm({
1322
+ "../../kernel/src/api/worksheet/change-accumulator.ts"() {
1323
+ "use strict";
1324
+ init_cjs_shims();
1325
+ ChangeAccumulator = class {
1326
+ constructor() {
1327
+ this.trackers = /* @__PURE__ */ new Set();
1328
+ /**
1329
+ * Pending direct edits set before a mutation, consumed by the next ingest().
1330
+ * Since JS is single-threaded, setDirectEdits() before the bridge call
1331
+ * guarantees these are consumed by the corresponding ingest().
1332
+ */
1333
+ this.pendingDirectEdits = null;
1334
+ }
1335
+ /**
1336
+ * Set the direct edit positions for the next mutation.
1337
+ * Called by cell-operations before triggering the bridge call.
1338
+ * Consumed (cleared) by the next ingest() call.
1339
+ */
1340
+ setDirectEdits(edits) {
1341
+ this.pendingDirectEdits = edits;
1342
+ }
1343
+ /**
1344
+ * Called by MutationResultHandler after every mutation.
1345
+ *
1346
+ * @param changedCells - RecalcResult.changedCells from the MutationResult
1347
+ * @param directEdits - The (sheetId, row, col) tuples that were directly written
1348
+ * (to distinguish direct vs cascade)
1349
+ * @param source - user or remote
1350
+ */
1351
+ ingest(changedCells, directEdits, source) {
1352
+ if (this.trackers.size === 0) {
1353
+ this.pendingDirectEdits = null;
1354
+ return;
1355
+ }
1356
+ if (changedCells.length === 0) {
1357
+ this.pendingDirectEdits = null;
1358
+ return;
1359
+ }
1360
+ const edits = directEdits ?? this.pendingDirectEdits;
1361
+ this.pendingDirectEdits = null;
1362
+ const directSet = /* @__PURE__ */ new Set();
1363
+ if (edits) {
1364
+ for (const e of edits) {
1365
+ directSet.add(`${e.sheetId}:${e.row}:${e.col}`);
1366
+ }
1367
+ }
1368
+ const recordsBySheet = /* @__PURE__ */ new Map();
1369
+ for (const cell of changedCells) {
1370
+ const key = `${cell.sheetId}:${cell.row}:${cell.col}`;
1371
+ const origin = source === "remote" ? "remote" : directSet.has(key) ? "direct" : "cascade";
1372
+ const record = {
1373
+ address: toA1(cell.row, cell.col),
1374
+ row: cell.row,
1375
+ col: cell.col,
1376
+ origin,
1377
+ type: "modified"
1378
+ };
1379
+ let list = recordsBySheet.get(cell.sheetId);
1380
+ if (!list) {
1381
+ list = [];
1382
+ recordsBySheet.set(cell.sheetId, list);
1383
+ }
1384
+ list.push(record);
1385
+ }
1386
+ for (const tracker of this.trackers) {
1387
+ const records = recordsBySheet.get(tracker.sheetId);
1388
+ if (records && records.length > 0) {
1389
+ tracker._ingest(records);
1390
+ }
1391
+ }
1392
+ }
1393
+ register(tracker) {
1394
+ this.trackers.add(tracker);
1395
+ }
1396
+ unregister(tracker) {
1397
+ this.trackers.delete(tracker);
1398
+ }
1399
+ /** Number of active trackers. */
1400
+ get activeCount() {
1401
+ return this.trackers.size;
1402
+ }
1403
+ };
1404
+ }
1405
+ });
1406
+
1337
1407
  // ../../kernel/src/bridges/mutation-result-handler.ts
1338
1408
  function resolvedPosition(row, col) {
1339
1409
  if (row === POSITION_SENTINEL || col === POSITION_SENTINEL) {
@@ -1346,6 +1416,7 @@ var init_mutation_result_handler = __esm({
1346
1416
  "../../kernel/src/bridges/mutation-result-handler.ts"() {
1347
1417
  "use strict";
1348
1418
  init_cjs_shims();
1419
+ init_change_accumulator();
1349
1420
  POSITION_SENTINEL = 4294967295;
1350
1421
  MutationResultHandler = class {
1351
1422
  constructor(eventBus, onUndoDescription) {
@@ -1355,6 +1426,7 @@ var init_mutation_result_handler = __esm({
1355
1426
  this.errorCallbacks = [];
1356
1427
  this.eventBus = eventBus;
1357
1428
  this.onUndoDescription = onUndoDescription;
1429
+ this.changeAccumulator = new ChangeAccumulator();
1358
1430
  }
1359
1431
  /** Set the ViewportCoordinatorRegistry for per-viewport dimension patching. */
1360
1432
  setCoordinatorRegistry(registry2) {
@@ -1376,8 +1448,9 @@ var init_mutation_result_handler = __esm({
1376
1448
  *
1377
1449
  * @param result - MutationResult from a Rust IPC command
1378
1450
  * @param source - Whether this mutation originated from the local user or remote collaboration
1451
+ * @param directEdits - Optional positions of directly-written cells (to distinguish direct vs cascade)
1379
1452
  */
1380
- applyAndNotify(result, source = "user") {
1453
+ applyAndNotify(result, source = "user", directEdits) {
1381
1454
  if (result.recalc) {
1382
1455
  this.handleRecalcResult(result.recalc, source);
1383
1456
  }
@@ -1438,6 +1511,9 @@ var init_mutation_result_handler = __esm({
1438
1511
  if (result.undoDescription) {
1439
1512
  this.handleUndoDescription(result.undoDescription);
1440
1513
  }
1514
+ if (this.changeAccumulator.activeCount > 0 && result.recalc?.changedCells?.length) {
1515
+ this.changeAccumulator.ingest(result.recalc.changedCells, directEdits ?? null, source);
1516
+ }
1441
1517
  }
1442
1518
  /**
1443
1519
  * Register an error callback for mutation failures.
@@ -2127,101 +2203,6 @@ var init_mutation_result_handler = __esm({
2127
2203
  }
2128
2204
  });
2129
2205
 
2130
- // ../../contracts/src/core/commands.ts
2131
- var init_commands = __esm({
2132
- "../../contracts/src/core/commands.ts"() {
2133
- "use strict";
2134
- init_cjs_shims();
2135
- }
2136
- });
2137
-
2138
- // ../../contracts/src/core/core.ts
2139
- var init_core2 = __esm({
2140
- "../../contracts/src/core/core.ts"() {
2141
- "use strict";
2142
- init_cjs_shims();
2143
- }
2144
- });
2145
-
2146
- // ../../contracts/src/core/disposable.ts
2147
- var init_disposable = __esm({
2148
- "../../contracts/src/core/disposable.ts"() {
2149
- "use strict";
2150
- init_cjs_shims();
2151
- }
2152
- });
2153
-
2154
- // ../../contracts/src/core/event-base.ts
2155
- var init_event_base = __esm({
2156
- "../../contracts/src/core/event-base.ts"() {
2157
- "use strict";
2158
- init_cjs_shims();
2159
- }
2160
- });
2161
-
2162
- // ../../contracts/src/core/execution.ts
2163
- var init_execution = __esm({
2164
- "../../contracts/src/core/execution.ts"() {
2165
- "use strict";
2166
- init_cjs_shims();
2167
- }
2168
- });
2169
-
2170
- // ../../contracts/src/core/result.ts
2171
- var init_result = __esm({
2172
- "../../contracts/src/core/result.ts"() {
2173
- "use strict";
2174
- init_cjs_shims();
2175
- }
2176
- });
2177
-
2178
- // ../../contracts/src/core/schema.ts
2179
- var init_schema = __esm({
2180
- "../../contracts/src/core/schema.ts"() {
2181
- "use strict";
2182
- init_cjs_shims();
2183
- }
2184
- });
2185
-
2186
- // ../../contracts/src/core/formatted-text.ts
2187
- function asFormattedText(s) {
2188
- return s;
2189
- }
2190
- function displayStringOrNull(text) {
2191
- return text;
2192
- }
2193
- var init_formatted_text = __esm({
2194
- "../../contracts/src/core/formatted-text.ts"() {
2195
- "use strict";
2196
- init_cjs_shims();
2197
- }
2198
- });
2199
-
2200
- // ../../contracts/src/core/testing.ts
2201
- var init_testing = __esm({
2202
- "../../contracts/src/core/testing.ts"() {
2203
- "use strict";
2204
- init_cjs_shims();
2205
- }
2206
- });
2207
-
2208
- // ../../contracts/src/core/index.ts
2209
- var init_core3 = __esm({
2210
- "../../contracts/src/core/index.ts"() {
2211
- "use strict";
2212
- init_cjs_shims();
2213
- init_commands();
2214
- init_core2();
2215
- init_disposable();
2216
- init_event_base();
2217
- init_execution();
2218
- init_result();
2219
- init_schema();
2220
- init_formatted_text();
2221
- init_testing();
2222
- }
2223
- });
2224
-
2225
2206
  // ../../kernel/src/bridges/wire/constants.gen.ts
2226
2207
  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;
2227
2208
  var init_constants_gen = __esm({
@@ -2279,12 +2260,12 @@ var init_constants_gen = __esm({
2279
2260
  });
2280
2261
 
2281
2262
  // ../../kernel/src/bridges/wire/binary-mutation-reader.ts
2282
- var sharedDecoder, BinaryMutationReader;
2263
+ var import_core, sharedDecoder, BinaryMutationReader;
2283
2264
  var init_binary_mutation_reader = __esm({
2284
2265
  "../../kernel/src/bridges/wire/binary-mutation-reader.ts"() {
2285
2266
  "use strict";
2286
2267
  init_cjs_shims();
2287
- init_core3();
2268
+ import_core = require("@mog-sdk/spreadsheet-contracts/core");
2288
2269
  init_constants_gen();
2289
2270
  sharedDecoder = new TextDecoder("utf-8");
2290
2271
  BinaryMutationReader = class {
@@ -2383,7 +2364,7 @@ var init_binary_mutation_reader = __esm({
2383
2364
  const displayLen = this._view.getUint16(recOff + OFF_DISPLAY_LEN, true);
2384
2365
  if (displayOff === NO_STRING || displayLen === 0) return null;
2385
2366
  const start = this._stringPoolStart + displayOff;
2386
- return asFormattedText(sharedDecoder.decode(this._bytes.subarray(start, start + displayLen)));
2367
+ return (0, import_core.asFormattedText)(sharedDecoder.decode(this._bytes.subarray(start, start + displayLen)));
2387
2368
  }
2388
2369
  /**
2389
2370
  * Get a zero-copy subarray view of the raw UTF-8 display bytes for patch i.
@@ -2535,7 +2516,7 @@ var init_binary_mutation_reader = __esm({
2535
2516
  const displayLen = this._view.getUint16(recOff + OFF_DISPLAY_LEN, true);
2536
2517
  if (displayOff === NO_STRING || displayLen === 0) return null;
2537
2518
  const start = this._stringPoolStart + displayOff;
2538
- return asFormattedText(sharedDecoder.decode(this._bytes.subarray(start, start + displayLen)));
2519
+ return (0, import_core.asFormattedText)(sharedDecoder.decode(this._bytes.subarray(start, start + displayLen)));
2539
2520
  }
2540
2521
  /**
2541
2522
  * Get a zero-copy subarray view of the raw UTF-8 display bytes for spill patch i.
@@ -2584,12 +2565,12 @@ function rgbaU32ToHex(value) {
2584
2565
  const b = value >>> 8 & 255;
2585
2566
  return "#" + (1 << 24 | r << 16 | g << 8 | b).toString(16).slice(1).toUpperCase();
2586
2567
  }
2587
- var sharedEncoder, sharedDecoder2, EMPTY_FORMAT, BinaryViewportBuffer, CellAccessor;
2568
+ var import_core2, sharedEncoder, sharedDecoder2, EMPTY_FORMAT, BinaryViewportBuffer, CellAccessor;
2588
2569
  var init_binary_viewport_buffer = __esm({
2589
2570
  "../../kernel/src/bridges/wire/binary-viewport-buffer.ts"() {
2590
2571
  "use strict";
2591
2572
  init_cjs_shims();
2592
- init_core3();
2573
+ import_core2 = require("@mog-sdk/spreadsheet-contracts/core");
2593
2574
  init_constants_gen();
2594
2575
  init_constants_gen();
2595
2576
  sharedEncoder = new TextEncoder();
@@ -2909,7 +2890,7 @@ var init_binary_viewport_buffer = __esm({
2909
2890
  sampleCells.push({
2910
2891
  row,
2911
2892
  col,
2912
- displayText: displayStringOrNull(reader.patchDisplayText(i))
2893
+ displayText: (0, import_core2.displayStringOrNull)(reader.patchDisplayText(i))
2913
2894
  });
2914
2895
  }
2915
2896
  }
@@ -2928,7 +2909,7 @@ var init_binary_viewport_buffer = __esm({
2928
2909
  sampleCells.push({
2929
2910
  row,
2930
2911
  col,
2931
- displayText: displayStringOrNull(reader.spillPatchDisplayText(i))
2912
+ displayText: (0, import_core2.displayStringOrNull)(reader.spillPatchDisplayText(i))
2932
2913
  });
2933
2914
  }
2934
2915
  }
@@ -3686,7 +3667,7 @@ var init_binary_viewport_buffer = __esm({
3686
3667
  */
3687
3668
  get displayText() {
3688
3669
  const decoded = this._buffer.getOrDecodeString(this._displayOff, this._displayLen);
3689
- return decoded !== null ? asFormattedText(decoded) : null;
3670
+ return decoded !== null ? (0, import_core2.asFormattedText)(decoded) : null;
3690
3671
  }
3691
3672
  /**
3692
3673
  * Get the error text for the current cell.
@@ -3748,13 +3729,13 @@ var init_binary_viewport_buffer = __esm({
3748
3729
  function cellKey(row, col) {
3749
3730
  return `${row},${col}`;
3750
3731
  }
3751
- var ViewportCoordinator;
3732
+ var import_core3, ViewportCoordinator;
3752
3733
  var init_viewport_coordinator = __esm({
3753
3734
  "../../kernel/src/bridges/wire/viewport-coordinator.ts"() {
3754
3735
  "use strict";
3755
3736
  init_cjs_shims();
3756
3737
  init_binary_viewport_buffer();
3757
- init_core3();
3738
+ import_core3 = require("@mog-sdk/spreadsheet-contracts/core");
3758
3739
  ViewportCoordinator = class {
3759
3740
  constructor(viewportId) {
3760
3741
  /** Monotonically increasing version, incremented on every write. */
@@ -3875,7 +3856,7 @@ var init_viewport_coordinator = __esm({
3875
3856
  flags: reader.patchFlags(i),
3876
3857
  numberValue: reader.patchNumberValue(i),
3877
3858
  formatIdx: reader.patchFormatIdx(i),
3878
- displayString: displayStringOrNull(reader.patchDisplayText(i)),
3859
+ displayString: (0, import_core3.displayStringOrNull)(reader.patchDisplayText(i)),
3879
3860
  errorString: reader.patchErrorText(i),
3880
3861
  bgColorOverride: reader.patchBgColorOverride(i),
3881
3862
  fontColorOverride: reader.patchFontColorOverride(i),
@@ -3892,7 +3873,7 @@ var init_viewport_coordinator = __esm({
3892
3873
  flags: reader.spillPatchFlags(i),
3893
3874
  numberValue: reader.spillPatchNumberValue(i),
3894
3875
  formatIdx: reader.spillPatchFormatIdx(i),
3895
- displayString: displayStringOrNull(reader.spillPatchDisplayText(i)),
3876
+ displayString: (0, import_core3.displayStringOrNull)(reader.spillPatchDisplayText(i)),
3896
3877
  errorString: reader.spillPatchErrorText(i),
3897
3878
  bgColorOverride: reader.spillPatchBgColorOverride(i),
3898
3879
  fontColorOverride: reader.spillPatchFontColorOverride(i),
@@ -6001,6 +5982,9 @@ var init_compute_bridge_gen = __esm({
6001
5982
  getCellFormatWithCf(sheetId, cellId, row, col) {
6002
5983
  return this.core.query(this.core.transport.call("compute_get_cell_format_with_cf", { docId: this.core.docId, sheetId, cellId, row, col }));
6003
5984
  }
5985
+ getResolvedFormat(sheetId, row, col) {
5986
+ return this.core.query(this.core.transport.call("compute_get_resolved_format", { docId: this.core.docId, sheetId, row, col }));
5987
+ }
6004
5988
  setCellFormat(sheetId, cellId, format) {
6005
5989
  return this.core.mutatePlain(this.core.transport.call("compute_set_cell_format", { docId: this.core.docId, sheetId, cellId, format }));
6006
5990
  }
@@ -6814,13 +6798,13 @@ async function rustSchemaInferColumn(values) {
6814
6798
  const t = await getSchemaTransport();
6815
6799
  return t.call("compute_schema_infer_column", { values });
6816
6800
  }
6817
- var ComputeBridge, schemaTransport;
6801
+ var import_protection, ComputeBridge, schemaTransport;
6818
6802
  var init_compute_bridge = __esm({
6819
6803
  "../../kernel/src/bridges/compute/compute-bridge.ts"() {
6820
6804
  "use strict";
6821
6805
  init_cjs_shims();
6822
6806
  init_formula_string();
6823
- init_protection();
6807
+ import_protection = require("@mog-sdk/spreadsheet-contracts/protection");
6824
6808
  init_src();
6825
6809
  init_compute_wire_converters();
6826
6810
  init_compute_core();
@@ -7162,7 +7146,7 @@ var init_compute_bridge = __esm({
7162
7146
  async getSheetProtectionOptions(sheetId) {
7163
7147
  const settings = await this.getSheetSettings(sheetId);
7164
7148
  if (!settings.isProtected) return null;
7165
- return { ...DEFAULT_PROTECTION_OPTIONS, ...settings.protectionOptions };
7149
+ return { ...import_protection.DEFAULT_PROTECTION_OPTIONS, ...settings.protectionOptions };
7166
7150
  }
7167
7151
  /** Set multiple sheet settings at once (iterates entries). */
7168
7152
  async setSheetSettings(sheetId, updates) {
@@ -7246,77 +7230,19 @@ var init_compute_bridge = __esm({
7246
7230
  }
7247
7231
  });
7248
7232
 
7249
- // ../../contracts/src/rendering/grid-renderer.ts
7250
- var init_grid_renderer = __esm({
7251
- "../../contracts/src/rendering/grid-renderer.ts"() {
7252
- "use strict";
7253
- init_cjs_shims();
7254
- }
7255
- });
7256
-
7257
- // ../../contracts/src/rendering/constants.ts
7258
- var DEFAULT_COL_WIDTH_WINDOWS, DEFAULT_COL_WIDTH_MACOS, _isMac, DEFAULT_COL_WIDTH;
7259
- var init_constants = __esm({
7260
- "../../contracts/src/rendering/constants.ts"() {
7261
- "use strict";
7262
- init_cjs_shims();
7263
- DEFAULT_COL_WIDTH_WINDOWS = 64;
7264
- DEFAULT_COL_WIDTH_MACOS = 72;
7265
- _isMac = typeof navigator !== "undefined" && /Mac/.test(navigator.platform ?? "");
7266
- DEFAULT_COL_WIDTH = _isMac ? DEFAULT_COL_WIDTH_MACOS : DEFAULT_COL_WIDTH_WINDOWS;
7267
- }
7268
- });
7269
-
7270
- // ../../contracts/src/rendering/data-sources.ts
7271
- var DEFAULT_CHROME_THEME;
7272
- var init_data_sources = __esm({
7273
- "../../contracts/src/rendering/data-sources.ts"() {
7274
- "use strict";
7275
- init_cjs_shims();
7276
- DEFAULT_CHROME_THEME = {
7277
- canvasBackground: "#ffffff",
7278
- gridlineColor: "#e0e0e0",
7279
- headerBackground: "#f8f9fa",
7280
- headerText: "#333333",
7281
- headerBorder: "#dadce0",
7282
- headerHighlightBackground: "#e8eaed",
7283
- headerHighlightText: "#1a73e8",
7284
- selectionFill: "rgba(66, 133, 244, 0.1)",
7285
- selectionBorder: "#4285f4",
7286
- activeCellBorder: "#1a73e8",
7287
- fillHandleColor: "#4285f4",
7288
- dragSourceColor: "rgba(66, 133, 244, 0.15)",
7289
- dragTargetColor: "#4285f4",
7290
- scrollbarTrack: "#f1f1f1",
7291
- scrollbarThumb: "#c1c1c1"
7292
- };
7293
- }
7294
- });
7295
-
7296
- // ../../contracts/src/rendering/index.ts
7297
- var init_rendering = __esm({
7298
- "../../contracts/src/rendering/index.ts"() {
7299
- "use strict";
7300
- init_cjs_shims();
7301
- init_grid_renderer();
7302
- init_constants();
7303
- init_data_sources();
7304
- }
7305
- });
7306
-
7307
7233
  // ../../kernel/src/domain/sheets/sheet-meta-defaults.ts
7308
7234
  function getSheetMetaDefault(field) {
7309
7235
  const def = SHEET_META_SCHEMA[field];
7310
7236
  return def.default;
7311
7237
  }
7312
- var SHEET_META_DEFAULT_ROW_HEIGHT, SHEET_META_DEFAULT_COL_WIDTH, SHEET_META_DEFAULT_GRIDLINE_COLOR, SHEET_META_SCHEMA;
7238
+ var import_rendering, SHEET_META_DEFAULT_ROW_HEIGHT, SHEET_META_DEFAULT_COL_WIDTH, SHEET_META_DEFAULT_GRIDLINE_COLOR, SHEET_META_SCHEMA;
7313
7239
  var init_sheet_meta_defaults = __esm({
7314
7240
  "../../kernel/src/domain/sheets/sheet-meta-defaults.ts"() {
7315
7241
  "use strict";
7316
7242
  init_cjs_shims();
7317
- init_rendering();
7243
+ import_rendering = require("@mog-sdk/spreadsheet-contracts/rendering");
7318
7244
  SHEET_META_DEFAULT_ROW_HEIGHT = 20;
7319
- SHEET_META_DEFAULT_COL_WIDTH = DEFAULT_COL_WIDTH;
7245
+ SHEET_META_DEFAULT_COL_WIDTH = import_rendering.DEFAULT_COL_WIDTH;
7320
7246
  SHEET_META_DEFAULT_GRIDLINE_COLOR = "#e2e2e2";
7321
7247
  SHEET_META_SCHEMA = {
7322
7248
  // ===========================================================================
@@ -7807,16 +7733,18 @@ var init_core_defaults = __esm({
7807
7733
  async function getMeta(ctx, sheetId) {
7808
7734
  const name = await ctx.computeBridge.getSheetName(sheetId);
7809
7735
  if (name === null) return void 0;
7810
- const [frozen, tabColor, hidden] = await Promise.all([
7736
+ const [frozen, tabColor, hidden, defaultRowHeight, defaultColWidth] = await Promise.all([
7811
7737
  ctx.computeBridge.getFrozenPanesQuery(sheetId),
7812
7738
  ctx.computeBridge.getTabColorQuery(sheetId),
7813
- ctx.computeBridge.isSheetHidden(sheetId)
7739
+ ctx.computeBridge.isSheetHidden(sheetId),
7740
+ ctx.computeBridge.getDefaultRowHeight(sheetId),
7741
+ ctx.computeBridge.getDefaultColWidth(sheetId)
7814
7742
  ]);
7815
7743
  return {
7816
7744
  id: sheetId,
7817
7745
  name,
7818
- defaultRowHeight: 20,
7819
- defaultColWidth: 100,
7746
+ defaultRowHeight,
7747
+ defaultColWidth,
7820
7748
  frozenRows: frozen.rows,
7821
7749
  frozenCols: frozen.cols,
7822
7750
  tabColor: tabColor ?? void 0,
@@ -7854,16 +7782,17 @@ function normalizeRange(range2) {
7854
7782
  sheetId: range2.sheetId
7855
7783
  };
7856
7784
  }
7785
+ var import_core4;
7857
7786
  var init_range = __esm({
7858
7787
  "../../spreadsheet-utils/src/range.ts"() {
7859
7788
  "use strict";
7860
7789
  init_cjs_shims();
7861
- init_core3();
7790
+ import_core4 = require("@mog-sdk/spreadsheet-contracts/core");
7862
7791
  }
7863
7792
  });
7864
7793
 
7865
7794
  // ../../spreadsheet-utils/src/a1.ts
7866
- function colToLetter2(col) {
7795
+ function colToLetter3(col) {
7867
7796
  if (col < 0) {
7868
7797
  throw new Error("Column number must be >= 0");
7869
7798
  }
@@ -7883,8 +7812,8 @@ function letterToCol(letters) {
7883
7812
  }
7884
7813
  return result - 1;
7885
7814
  }
7886
- function toA1(row, col) {
7887
- return `${colToLetter2(col)}${row + 1}`;
7815
+ function toA12(row, col) {
7816
+ return `${colToLetter3(col)}${row + 1}`;
7888
7817
  }
7889
7818
  function parseCellAddress(ref) {
7890
7819
  const match = ref.match(CELL_ADDRESS_REGEX);
@@ -9315,7 +9244,7 @@ var init_data_extractor = __esm({
9315
9244
  });
9316
9245
 
9317
9246
  // ../../charts/src/core/index.ts
9318
- var init_core4 = __esm({
9247
+ var init_core2 = __esm({
9319
9248
  "../../charts/src/core/index.ts"() {
9320
9249
  "use strict";
9321
9250
  init_cjs_shims();
@@ -13299,7 +13228,7 @@ var init_src2 = __esm({
13299
13228
  "../../charts/src/index.ts"() {
13300
13229
  "use strict";
13301
13230
  init_cjs_shims();
13302
- init_core4();
13231
+ init_core2();
13303
13232
  init_primitives();
13304
13233
  init_compiler();
13305
13234
  }
@@ -16375,7 +16304,7 @@ function toDisposable(fn) {
16375
16304
  return disposable;
16376
16305
  }
16377
16306
  var DisposableBase, DisposableStore, DisposableNone;
16378
- var init_disposable2 = __esm({
16307
+ var init_disposable = __esm({
16379
16308
  "../../spreadsheet-utils/src/disposable.ts"() {
16380
16309
  "use strict";
16381
16310
  init_cjs_shims();
@@ -16439,7 +16368,7 @@ function ok(value) {
16439
16368
  function err(error) {
16440
16369
  return { ok: false, error };
16441
16370
  }
16442
- var init_result2 = __esm({
16371
+ var init_result = __esm({
16443
16372
  "../../spreadsheet-utils/src/result.ts"() {
16444
16373
  "use strict";
16445
16374
  init_cjs_shims();
@@ -16452,7 +16381,7 @@ var init_subscribable = __esm({
16452
16381
  "../../kernel/src/services/primitives/subscribable.ts"() {
16453
16382
  "use strict";
16454
16383
  init_cjs_shims();
16455
- init_disposable2();
16384
+ init_disposable();
16456
16385
  Subscribable = class extends DisposableBase {
16457
16386
  constructor() {
16458
16387
  super(...arguments);
@@ -16512,7 +16441,7 @@ var init_event_emitter = __esm({
16512
16441
  "../../kernel/src/services/primitives/event-emitter.ts"() {
16513
16442
  "use strict";
16514
16443
  init_cjs_shims();
16515
- init_disposable2();
16444
+ init_disposable();
16516
16445
  TypedEventEmitter = class extends DisposableBase {
16517
16446
  constructor() {
16518
16447
  super(...arguments);
@@ -16577,8 +16506,8 @@ var init_primitives3 = __esm({
16577
16506
  "../../kernel/src/services/primitives/index.ts"() {
16578
16507
  "use strict";
16579
16508
  init_cjs_shims();
16580
- init_disposable2();
16581
- init_result2();
16509
+ init_disposable();
16510
+ init_result();
16582
16511
  init_subscribable();
16583
16512
  init_event_emitter();
16584
16513
  }
@@ -24628,37 +24557,10 @@ var init_equation_bridge = __esm({
24628
24557
  }
24629
24558
  });
24630
24559
 
24631
- // ../../contracts/src/bridges/ink-recognition-bridge.ts
24632
- var DEFAULT_RECOGNITION_THRESHOLDS;
24633
- var init_ink_recognition_bridge = __esm({
24634
- "../../contracts/src/bridges/ink-recognition-bridge.ts"() {
24635
- "use strict";
24636
- init_cjs_shims();
24637
- DEFAULT_RECOGNITION_THRESHOLDS = {
24638
- line: 0.7,
24639
- rectangle: 0.65,
24640
- ellipse: 0.7,
24641
- triangle: 0.6,
24642
- arrow: 0.6,
24643
- star: 0.65,
24644
- text: 0.5
24645
- };
24646
- }
24647
- });
24648
-
24649
- // ../../contracts/src/bridges/index.ts
24650
- var init_bridges = __esm({
24651
- "../../contracts/src/bridges/index.ts"() {
24652
- "use strict";
24653
- init_cjs_shims();
24654
- init_ink_recognition_bridge();
24655
- }
24656
- });
24657
-
24658
24560
  // ../../kernel/src/domain/drawing/ink-recognition-bridge.ts
24659
24561
  function createInkRecognitionBridge(initialThresholds) {
24660
24562
  let thresholds = {
24661
- ...DEFAULT_RECOGNITION_THRESHOLDS,
24563
+ ...import_bridges.DEFAULT_RECOGNITION_THRESHOLDS,
24662
24564
  ...initialThresholds
24663
24565
  };
24664
24566
  return {
@@ -25071,11 +24973,12 @@ async function recognizeWithBrowserAPI(strokes) {
25071
24973
  }
25072
24974
  return null;
25073
24975
  }
25074
- var init_ink_recognition_bridge2 = __esm({
24976
+ var import_bridges;
24977
+ var init_ink_recognition_bridge = __esm({
25075
24978
  "../../kernel/src/domain/drawing/ink-recognition-bridge.ts"() {
25076
24979
  "use strict";
25077
24980
  init_cjs_shims();
25078
- init_bridges();
24981
+ import_bridges = require("@mog-sdk/spreadsheet-contracts/bridges");
25079
24982
  }
25080
24983
  });
25081
24984
 
@@ -30088,7 +29991,7 @@ var init_arrows = __esm({
30088
29991
 
30089
29992
  // ../../canvas/drawing/shapes/src/presets/constants.ts
30090
29993
  var KAPPA;
30091
- var init_constants2 = __esm({
29994
+ var init_constants = __esm({
30092
29995
  "../../canvas/drawing/shapes/src/presets/constants.ts"() {
30093
29996
  "use strict";
30094
29997
  init_cjs_shims();
@@ -30112,7 +30015,7 @@ var init_primitives4 = __esm({
30112
30015
  "use strict";
30113
30016
  init_cjs_shims();
30114
30017
  init_src3();
30115
- init_constants2();
30018
+ init_constants();
30116
30019
  }
30117
30020
  });
30118
30021
 
@@ -30122,7 +30025,7 @@ var init_basic = __esm({
30122
30025
  "use strict";
30123
30026
  init_cjs_shims();
30124
30027
  init_src3();
30125
- init_constants2();
30028
+ init_constants();
30126
30029
  init_primitives4();
30127
30030
  init_registry3();
30128
30031
  init_primitives4();
@@ -70195,438 +70098,23 @@ var init_rules = __esm({
70195
70098
  }
70196
70099
  });
70197
70100
 
70198
- // ../../contracts/src/smartart/layouts.ts
70199
- var init_layouts2 = __esm({
70200
- "../../contracts/src/smartart/layouts.ts"() {
70201
- "use strict";
70202
- init_cjs_shims();
70203
- }
70204
- });
70205
-
70206
- // ../../contracts/src/smartart/ooxml-algorithm-types.ts
70207
- var ParameterId, VALID_PARAMS_BY_ALGORITHM;
70208
- var init_ooxml_algorithm_types = __esm({
70209
- "../../contracts/src/smartart/ooxml-algorithm-types.ts"() {
70210
- "use strict";
70211
- init_cjs_shims();
70212
- ParameterId = {
70213
- // ── Alignment Parameters ──────────────────────────────────────────────────
70214
- /** Horizontal alignment of children within the layout area. */
70215
- horzAlign: "horzAlign",
70216
- /** Vertical alignment of children within the layout area. */
70217
- vertAlign: "vertAlign",
70218
- /** Horizontal alignment for individual nodes (hierarchy algorithms). */
70219
- nodeHorzAlign: "nodeHorzAlign",
70220
- /** Vertical alignment for individual nodes (hierarchy algorithms). */
70221
- nodeVertAlign: "nodeVertAlign",
70222
- /** Hierarchy alignment (16 possible values for tree orientation). */
70223
- hierAlign: "hierAlign",
70224
- /** Text alignment (whether text should be aligned with shape). */
70225
- alignTx: "alignTx",
70226
- // ── Direction Parameters ──────────────────────────────────────────────────
70227
- /** Child direction (horizontal or vertical arrangement of children). */
70228
- chDir: "chDir",
70229
- /** Child alignment (how children align on the cross-axis). */
70230
- chAlign: "chAlign",
70231
- /** Secondary child alignment (for complex hierarchy layouts). */
70232
- secChAlign: "secChAlign",
70233
- /** Linear direction (which edge children flow from). */
70234
- linDir: "linDir",
70235
- /** Secondary linear direction (for complex hierarchy layouts). */
70236
- secLinDir: "secLinDir",
70237
- /** Text direction (horizontal or vertical text blocks). */
70238
- txDir: "txDir",
70239
- /** Text block direction (horizontal or vertical text flow). */
70240
- txBlDir: "txBlDir",
70241
- /** Growth direction (which corner the snake starts from). */
70242
- grDir: "grDir",
70243
- /** Flow direction (whether snake flows by row or column). */
70244
- flowDir: "flowDir",
70245
- /** Continue direction (same direction or reversed for each row). */
70246
- contDir: "contDir",
70247
- // ── Connector Parameters ──────────────────────────────────────────────────
70248
- /** Connector routing style (straight, bend, curve, long curve). */
70249
- connRout: "connRout",
70250
- /** Beginning/start arrowhead style for connectors. */
70251
- begSty: "begSty",
70252
- /** Ending arrowhead style for connectors. */
70253
- endSty: "endSty",
70254
- /** Connector dimension (1D, 2D, or custom). */
70255
- dim: "dim",
70256
- /** Source node name for connector routing. */
70257
- srcNode: "srcNode",
70258
- /** Destination node name for connector routing. */
70259
- dstNode: "dstNode",
70260
- /** Beginning connection points (which points on the source shape). */
70261
- begPts: "begPts",
70262
- /** Ending connection points (which points on the destination shape). */
70263
- endPts: "endPts",
70264
- /** Bend point position for right-angle connectors. */
70265
- bendPt: "bendPt",
70266
- // ── Cycle/Circular Parameters ─────────────────────────────────────────────
70267
- /** Start angle in degrees for cycle algorithm. */
70268
- stAng: "stAng",
70269
- /** Span angle in degrees for cycle algorithm. */
70270
- spanAng: "spanAng",
70271
- /** Rotation path (none or along the circular path). */
70272
- rotPath: "rotPath",
70273
- /** Center shape mapping (whether first node goes to center). */
70274
- ctrShpMap: "ctrShpMap",
70275
- // ── Snake Parameters ──────────────────────────────────────────────────────
70276
- /** Breakpoint logic for snake wrapping (end of canvas, balanced, fixed). */
70277
- bkpt: "bkpt",
70278
- /** Breakpoint fixed value (number of items per row when bkpt=fixed). */
70279
- bkPtFixedVal: "bkPtFixedVal",
70280
- /** Offset mode for staggered rows in snake layout. */
70281
- off: "off",
70282
- // ── Linear/Sequence Parameters ────────────────────────────────────────────
70283
- /** Starting element index (which node type starts the alternating sequence). */
70284
- stElem: "stElem",
70285
- /** Starting bullet level for text algorithm. */
70286
- stBulletLvl: "stBulletLvl",
70287
- // ── Pyramid Parameters ────────────────────────────────────────────────────
70288
- /** Pyramid accent position (before or after the level). */
70289
- pyraAcctPos: "pyraAcctPos",
70290
- /** Pyramid accent text margin (step or stack behavior). */
70291
- pyraAcctTxMar: "pyraAcctTxMar",
70292
- /** Pyramid level node name. */
70293
- pyraLvlNode: "pyraLvlNode",
70294
- /** Pyramid accent background node name. */
70295
- pyraAcctBkgdNode: "pyraAcctBkgdNode",
70296
- /** Pyramid accent text node name. */
70297
- pyraAcctTxNode: "pyraAcctTxNode",
70298
- // ── Text Parameters ───────────────────────────────────────────────────────
70299
- /** Parent text LTR alignment. */
70300
- parTxLTRAlign: "parTxLTRAlign",
70301
- /** Parent text RTL alignment. */
70302
- parTxRTLAlign: "parTxRTLAlign",
70303
- /** Shape text LTR alignment for children. */
70304
- shpTxLTRAlignCh: "shpTxLTRAlignCh",
70305
- /** Shape text RTL alignment for children. */
70306
- shpTxRTLAlignCh: "shpTxRTLAlignCh",
70307
- /** Text anchor horizontal position. */
70308
- txAnchorHorz: "txAnchorHorz",
70309
- /** Text anchor vertical position. */
70310
- txAnchorVert: "txAnchorVert",
70311
- /** Text anchor horizontal position for children. */
70312
- txAnchorHorzCh: "txAnchorHorzCh",
70313
- /** Text anchor vertical position for children. */
70314
- txAnchorVertCh: "txAnchorVertCh",
70315
- /** Auto text rotation mode (none, upright, gravity-based). */
70316
- autoTxRot: "autoTxRot",
70317
- // ── Spacing & Sizing Parameters ───────────────────────────────────────────
70318
- /** Aspect ratio value. */
70319
- ar: "ar",
70320
- /** Line spacing for parent text (percentage). */
70321
- lnSpPar: "lnSpPar",
70322
- /** Line spacing after parent paragraph (percentage). */
70323
- lnSpAfParP: "lnSpAfParP",
70324
- /** Line spacing for child text (percentage). */
70325
- lnSpCh: "lnSpCh",
70326
- /** Line spacing after child paragraph (percentage). */
70327
- lnSpAfChP: "lnSpAfChP",
70328
- // ── Hierarchy-Specific Parameters ─────────────────────────────────────────
70329
- /** Root short distance flag (hierarchy algorithms). */
70330
- rtShortDist: "rtShortDist",
70331
- // ── Fallback Parameter ────────────────────────────────────────────────────
70332
- /** Fallback dimension for the algorithm. */
70333
- fallback: "fallback"
70334
- };
70335
- VALID_PARAMS_BY_ALGORITHM = {
70336
- composite: [ParameterId.ar],
70337
- lin: [
70338
- ParameterId.linDir,
70339
- ParameterId.chDir,
70340
- ParameterId.chAlign,
70341
- ParameterId.horzAlign,
70342
- ParameterId.vertAlign,
70343
- ParameterId.stElem,
70344
- ParameterId.fallback,
70345
- ParameterId.nodeHorzAlign,
70346
- ParameterId.nodeVertAlign
70347
- ],
70348
- snake: [
70349
- ParameterId.grDir,
70350
- ParameterId.flowDir,
70351
- ParameterId.contDir,
70352
- ParameterId.bkpt,
70353
- ParameterId.bkPtFixedVal,
70354
- ParameterId.off
70355
- ],
70356
- cycle: [ParameterId.stAng, ParameterId.spanAng, ParameterId.rotPath, ParameterId.ctrShpMap],
70357
- hierRoot: [
70358
- ParameterId.hierAlign,
70359
- ParameterId.nodeHorzAlign,
70360
- ParameterId.nodeVertAlign,
70361
- ParameterId.rtShortDist
70362
- ],
70363
- hierChild: [
70364
- ParameterId.chAlign,
70365
- ParameterId.linDir,
70366
- ParameterId.secChAlign,
70367
- ParameterId.secLinDir
70368
- ],
70369
- pyra: [
70370
- ParameterId.linDir,
70371
- ParameterId.txDir,
70372
- ParameterId.pyraAcctPos,
70373
- ParameterId.pyraAcctTxMar,
70374
- ParameterId.pyraLvlNode,
70375
- ParameterId.pyraAcctBkgdNode,
70376
- ParameterId.pyraAcctTxNode
70377
- ],
70378
- conn: [
70379
- ParameterId.srcNode,
70380
- ParameterId.dstNode,
70381
- ParameterId.connRout,
70382
- ParameterId.begSty,
70383
- ParameterId.endSty,
70384
- ParameterId.dim,
70385
- ParameterId.bendPt,
70386
- ParameterId.begPts,
70387
- ParameterId.endPts
70388
- ],
70389
- tx: [
70390
- ParameterId.parTxLTRAlign,
70391
- ParameterId.parTxRTLAlign,
70392
- ParameterId.shpTxLTRAlignCh,
70393
- ParameterId.shpTxRTLAlignCh,
70394
- ParameterId.txAnchorVert,
70395
- ParameterId.txAnchorHorz,
70396
- ParameterId.txAnchorVertCh,
70397
- ParameterId.txAnchorHorzCh,
70398
- ParameterId.txBlDir,
70399
- ParameterId.autoTxRot,
70400
- ParameterId.stBulletLvl,
70401
- ParameterId.lnSpPar,
70402
- ParameterId.lnSpAfParP,
70403
- ParameterId.lnSpCh,
70404
- ParameterId.lnSpAfChP,
70405
- ParameterId.alignTx
70406
- ],
70407
- sp: []
70408
- };
70409
- }
70410
- });
70411
-
70412
- // ../../contracts/src/smartart/ooxml-data-model-types.ts
70413
- var init_ooxml_data_model_types = __esm({
70414
- "../../contracts/src/smartart/ooxml-data-model-types.ts"() {
70415
- "use strict";
70416
- init_cjs_shims();
70417
- }
70418
- });
70419
-
70420
- // ../../contracts/src/smartart/ooxml-drawing-types.ts
70421
- var init_ooxml_drawing_types = __esm({
70422
- "../../contracts/src/smartart/ooxml-drawing-types.ts"() {
70423
- "use strict";
70424
- init_cjs_shims();
70425
- }
70426
- });
70427
-
70428
- // ../../contracts/src/smartart/ooxml-engine-types.ts
70429
- 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;
70430
- var init_ooxml_engine_types = __esm({
70431
- "../../contracts/src/smartart/ooxml-engine-types.ts"() {
70432
- "use strict";
70433
- init_cjs_shims();
70434
- POSITIONAL_CONSTRAINT_TYPES = [
70435
- "l",
70436
- "t",
70437
- "r",
70438
- "b",
70439
- "lOff",
70440
- "tOff",
70441
- "rOff",
70442
- "bOff",
70443
- "ctrX",
70444
- "ctrY",
70445
- "ctrXOff",
70446
- "ctrYOff"
70447
- ];
70448
- DIMENSIONAL_CONSTRAINT_TYPES = [
70449
- "w",
70450
- "h",
70451
- "wOff",
70452
- "hOff"
70453
- ];
70454
- MARGIN_CONSTRAINT_TYPES = [
70455
- "lMarg",
70456
- "tMarg",
70457
- "rMarg",
70458
- "bMarg",
70459
- "begMarg",
70460
- "endMarg"
70461
- ];
70462
- FONT_CONSTRAINT_TYPES = [
70463
- "primFontSz",
70464
- "secFontSz"
70465
- ];
70466
- SPACING_CONSTRAINT_TYPES = [
70467
- "sp",
70468
- "sibSp",
70469
- "secSibSp"
70470
- ];
70471
- GEOMETRY_CONSTRAINT_TYPES = [
70472
- "connDist",
70473
- "diam",
70474
- "stemThick",
70475
- "begPad",
70476
- "endPad",
70477
- "wArH",
70478
- "hArH",
70479
- "bendDist"
70480
- ];
70481
- USER_DEFINED_CONSTRAINT_TYPES = [
70482
- "userA",
70483
- "userB",
70484
- "userC",
70485
- "userD",
70486
- "userE",
70487
- "userF",
70488
- "userG",
70489
- "userH",
70490
- "userI",
70491
- "userJ",
70492
- "userK",
70493
- "userL",
70494
- "userM",
70495
- "userN",
70496
- "userO",
70497
- "userP",
70498
- "userQ",
70499
- "userR",
70500
- "userS",
70501
- "userT",
70502
- "userU",
70503
- "userV",
70504
- "userW",
70505
- "userX",
70506
- "userY",
70507
- "userZ"
70508
- ];
70509
- ALL_CONSTRAINT_TYPES = [
70510
- ...POSITIONAL_CONSTRAINT_TYPES,
70511
- ...DIMENSIONAL_CONSTRAINT_TYPES,
70512
- ...MARGIN_CONSTRAINT_TYPES,
70513
- ...FONT_CONSTRAINT_TYPES,
70514
- ...SPACING_CONSTRAINT_TYPES,
70515
- ...GEOMETRY_CONSTRAINT_TYPES,
70516
- "pyraAcctRatio",
70517
- "alignOff",
70518
- ...USER_DEFINED_CONSTRAINT_TYPES,
70519
- "none"
70520
- ];
70521
- ALL_ELEMENT_TYPES = [
70522
- "all",
70523
- "doc",
70524
- "node",
70525
- "norm",
70526
- "nonNorm",
70527
- "asst",
70528
- "nonAsst",
70529
- "parTrans",
70530
- "pres",
70531
- "sibTrans"
70532
- ];
70533
- ALL_FUNCTION_TYPES = [
70534
- "cnt",
70535
- "pos",
70536
- "revPos",
70537
- "posEven",
70538
- "posOdd",
70539
- "var",
70540
- "depth",
70541
- "maxDepth"
70542
- ];
70543
- ALL_FUNCTION_OPERATORS = [
70544
- "equ",
70545
- "neq",
70546
- "gt",
70547
- "lt",
70548
- "gte",
70549
- "lte"
70550
- ];
70551
- ALL_FUNCTION_ARGUMENTS = [
70552
- "none",
70553
- "orgChart",
70554
- "chMax",
70555
- "chPref",
70556
- "bulEnabled",
70557
- "dir",
70558
- "hierBranch",
70559
- "animOne",
70560
- "animLvl",
70561
- "resizeHandles"
70562
- ];
70563
- }
70564
- });
70565
-
70566
- // ../../contracts/src/smartart/ooxml-layout-types.ts
70567
- var init_ooxml_layout_types = __esm({
70568
- "../../contracts/src/smartart/ooxml-layout-types.ts"() {
70569
- "use strict";
70570
- init_cjs_shims();
70571
- }
70572
- });
70573
-
70574
- // ../../contracts/src/smartart/ooxml-style-types.ts
70575
- var init_ooxml_style_types = __esm({
70576
- "../../contracts/src/smartart/ooxml-style-types.ts"() {
70577
- "use strict";
70578
- init_cjs_shims();
70579
- }
70580
- });
70581
-
70582
- // ../../contracts/src/smartart/styles.ts
70583
- var init_styles3 = __esm({
70584
- "../../contracts/src/smartart/styles.ts"() {
70585
- "use strict";
70586
- init_cjs_shims();
70587
- }
70588
- });
70589
-
70590
- // ../../contracts/src/smartart/types.ts
70591
- var init_types4 = __esm({
70592
- "../../contracts/src/smartart/types.ts"() {
70593
- "use strict";
70594
- init_cjs_shims();
70595
- }
70596
- });
70597
-
70598
- // ../../contracts/src/smartart/index.ts
70599
- var init_smartart = __esm({
70600
- "../../contracts/src/smartart/index.ts"() {
70601
- "use strict";
70602
- init_cjs_shims();
70603
- init_layouts2();
70604
- init_ooxml_algorithm_types();
70605
- init_ooxml_data_model_types();
70606
- init_ooxml_drawing_types();
70607
- init_ooxml_engine_types();
70608
- init_ooxml_layout_types();
70609
- init_ooxml_style_types();
70610
- init_styles3();
70611
- init_types4();
70612
- }
70613
- });
70614
-
70615
70101
  // ../../canvas/drawing/smartart/src/engine/algorithms/composite.ts
70102
+ var import_smartart2;
70616
70103
  var init_composite = __esm({
70617
70104
  "../../canvas/drawing/smartart/src/engine/algorithms/composite.ts"() {
70618
70105
  "use strict";
70619
70106
  init_cjs_shims();
70620
- init_smartart();
70107
+ import_smartart2 = require("@mog-sdk/spreadsheet-contracts/smartart");
70621
70108
  }
70622
70109
  });
70623
70110
 
70624
70111
  // ../../canvas/drawing/smartart/src/engine/algorithms/linear.ts
70112
+ var import_smartart3;
70625
70113
  var init_linear2 = __esm({
70626
70114
  "../../canvas/drawing/smartart/src/engine/algorithms/linear.ts"() {
70627
70115
  "use strict";
70628
70116
  init_cjs_shims();
70629
- init_smartart();
70117
+ import_smartart3 = require("@mog-sdk/spreadsheet-contracts/smartart");
70630
70118
  }
70631
70119
  });
70632
70120
 
@@ -70639,82 +70127,90 @@ var init_param_utils = __esm({
70639
70127
  });
70640
70128
 
70641
70129
  // ../../canvas/drawing/smartart/src/engine/algorithms/snake.ts
70130
+ var import_smartart4;
70642
70131
  var init_snake = __esm({
70643
70132
  "../../canvas/drawing/smartart/src/engine/algorithms/snake.ts"() {
70644
70133
  "use strict";
70645
70134
  init_cjs_shims();
70646
- init_smartart();
70135
+ import_smartart4 = require("@mog-sdk/spreadsheet-contracts/smartart");
70647
70136
  init_param_utils();
70648
70137
  }
70649
70138
  });
70650
70139
 
70651
70140
  // ../../canvas/drawing/smartart/src/engine/algorithms/cycle.ts
70141
+ var import_smartart5;
70652
70142
  var init_cycle2 = __esm({
70653
70143
  "../../canvas/drawing/smartart/src/engine/algorithms/cycle.ts"() {
70654
70144
  "use strict";
70655
70145
  init_cjs_shims();
70656
- init_smartart();
70146
+ import_smartart5 = require("@mog-sdk/spreadsheet-contracts/smartart");
70657
70147
  init_param_utils();
70658
70148
  }
70659
70149
  });
70660
70150
 
70661
70151
  // ../../canvas/drawing/smartart/src/engine/algorithms/hier-root.ts
70152
+ var import_smartart6;
70662
70153
  var init_hier_root = __esm({
70663
70154
  "../../canvas/drawing/smartart/src/engine/algorithms/hier-root.ts"() {
70664
70155
  "use strict";
70665
70156
  init_cjs_shims();
70666
- init_smartart();
70157
+ import_smartart6 = require("@mog-sdk/spreadsheet-contracts/smartart");
70667
70158
  init_param_utils();
70668
70159
  }
70669
70160
  });
70670
70161
 
70671
70162
  // ../../canvas/drawing/smartart/src/engine/algorithms/hier-child.ts
70163
+ var import_smartart7;
70672
70164
  var init_hier_child = __esm({
70673
70165
  "../../canvas/drawing/smartart/src/engine/algorithms/hier-child.ts"() {
70674
70166
  "use strict";
70675
70167
  init_cjs_shims();
70676
- init_smartart();
70168
+ import_smartart7 = require("@mog-sdk/spreadsheet-contracts/smartart");
70677
70169
  init_param_utils();
70678
70170
  }
70679
70171
  });
70680
70172
 
70681
70173
  // ../../canvas/drawing/smartart/src/engine/algorithms/pyramid.ts
70174
+ var import_smartart8;
70682
70175
  var init_pyramid2 = __esm({
70683
70176
  "../../canvas/drawing/smartart/src/engine/algorithms/pyramid.ts"() {
70684
70177
  "use strict";
70685
70178
  init_cjs_shims();
70686
- init_smartart();
70179
+ import_smartart8 = require("@mog-sdk/spreadsheet-contracts/smartart");
70687
70180
  init_param_utils();
70688
70181
  }
70689
70182
  });
70690
70183
 
70691
70184
  // ../../canvas/drawing/smartart/src/engine/algorithms/connector.ts
70185
+ var import_smartart9;
70692
70186
  var init_connector = __esm({
70693
70187
  "../../canvas/drawing/smartart/src/engine/algorithms/connector.ts"() {
70694
70188
  "use strict";
70695
70189
  init_cjs_shims();
70696
- init_smartart();
70190
+ import_smartart9 = require("@mog-sdk/spreadsheet-contracts/smartart");
70697
70191
  init_connector_routing();
70698
70192
  init_param_utils();
70699
70193
  }
70700
70194
  });
70701
70195
 
70702
70196
  // ../../canvas/drawing/smartart/src/engine/algorithms/text.ts
70197
+ var import_smartart10;
70703
70198
  var init_text3 = __esm({
70704
70199
  "../../canvas/drawing/smartart/src/engine/algorithms/text.ts"() {
70705
70200
  "use strict";
70706
70201
  init_cjs_shims();
70707
- init_smartart();
70202
+ import_smartart10 = require("@mog-sdk/spreadsheet-contracts/smartart");
70708
70203
  init_param_utils();
70709
70204
  }
70710
70205
  });
70711
70206
 
70712
70207
  // ../../canvas/drawing/smartart/src/engine/algorithms/space.ts
70208
+ var import_smartart11;
70713
70209
  var init_space = __esm({
70714
70210
  "../../canvas/drawing/smartart/src/engine/algorithms/space.ts"() {
70715
70211
  "use strict";
70716
70212
  init_cjs_shims();
70717
- init_smartart();
70213
+ import_smartart11 = require("@mog-sdk/spreadsheet-contracts/smartart");
70718
70214
  }
70719
70215
  });
70720
70216
 
@@ -70873,19 +70369,19 @@ var init_drawing_parser = __esm({
70873
70369
  });
70874
70370
 
70875
70371
  // ../../canvas/drawing/smartart/src/parser/layout-def-parser.ts
70876
- var VALID_ELEMENT_TYPES, VALID_FUNCTION_TYPES, VALID_FUNCTION_OPERATORS, VALID_FUNCTION_ARGUMENTS;
70372
+ var import_smartart12, VALID_ELEMENT_TYPES, VALID_FUNCTION_TYPES, VALID_FUNCTION_OPERATORS, VALID_FUNCTION_ARGUMENTS;
70877
70373
  var init_layout_def_parser = __esm({
70878
70374
  "../../canvas/drawing/smartart/src/parser/layout-def-parser.ts"() {
70879
70375
  "use strict";
70880
70376
  init_cjs_shims();
70881
- init_smartart();
70377
+ import_smartart12 = require("@mog-sdk/spreadsheet-contracts/smartart");
70882
70378
  init_data_model_parser();
70883
70379
  init_drawingml_helpers();
70884
70380
  init_xml_helpers();
70885
- VALID_ELEMENT_TYPES = new Set(ALL_ELEMENT_TYPES);
70886
- VALID_FUNCTION_TYPES = new Set(ALL_FUNCTION_TYPES);
70887
- VALID_FUNCTION_OPERATORS = new Set(ALL_FUNCTION_OPERATORS);
70888
- VALID_FUNCTION_ARGUMENTS = new Set(ALL_FUNCTION_ARGUMENTS);
70381
+ VALID_ELEMENT_TYPES = new Set(import_smartart12.ALL_ELEMENT_TYPES);
70382
+ VALID_FUNCTION_TYPES = new Set(import_smartart12.ALL_FUNCTION_TYPES);
70383
+ VALID_FUNCTION_OPERATORS = new Set(import_smartart12.ALL_FUNCTION_OPERATORS);
70384
+ VALID_FUNCTION_ARGUMENTS = new Set(import_smartart12.ALL_FUNCTION_ARGUMENTS);
70889
70385
  }
70890
70386
  });
70891
70387
 
@@ -74780,7 +74276,7 @@ var init_cell_anchor_resolver = __esm({
74780
74276
  });
74781
74277
 
74782
74278
  // ../../kernel/src/floating-objects/types.ts
74783
- var init_types5 = __esm({
74279
+ var init_types4 = __esm({
74784
74280
  "../../kernel/src/floating-objects/types.ts"() {
74785
74281
  "use strict";
74786
74282
  init_cjs_shims();
@@ -74879,7 +74375,7 @@ var init_picture_manager = __esm({
74879
74375
  "use strict";
74880
74376
  init_cjs_shims();
74881
74377
  init_document();
74882
- init_types5();
74378
+ init_types4();
74883
74379
  }
74884
74380
  });
74885
74381
 
@@ -74981,7 +74477,7 @@ var init_textbox_manager = __esm({
74981
74477
  "../../kernel/src/floating-objects/managers/textbox-manager.ts"() {
74982
74478
  "use strict";
74983
74479
  init_cjs_shims();
74984
- init_types5();
74480
+ init_types4();
74985
74481
  DEFAULT_TEXTBOX_FILL = { type: "solid", color: "#ffffff" };
74986
74482
  DEFAULT_TEXTBOX_BORDER = { style: "solid", color: "#000000", width: 1 };
74987
74483
  }
@@ -76162,7 +75658,7 @@ var init_kernel_context = __esm({
76162
75658
  init_cjs_shims();
76163
75659
  init_chart_bridge();
76164
75660
  init_equation_bridge();
76165
- init_ink_recognition_bridge2();
75661
+ init_ink_recognition_bridge();
76166
75662
  init_locale_bridge();
76167
75663
  init_pivot_bridge();
76168
75664
  init_schema_bridge();
@@ -77184,20 +76680,7 @@ var WorkbookHistoryImpl = class {
77184
76680
 
77185
76681
  // ../../kernel/src/api/workbook/names.ts
77186
76682
  init_cjs_shims();
77187
-
77188
- // ../../contracts/src/api/index.ts
77189
- init_cjs_shims();
77190
-
77191
- // ../../contracts/src/api/types.ts
77192
- init_cjs_shims();
77193
-
77194
- // ../../contracts/src/api/worksheet/index.ts
77195
- init_cjs_shims();
77196
-
77197
- // ../../contracts/src/api/worksheet/format-mappings.ts
77198
- init_cjs_shims();
77199
-
77200
- // ../../kernel/src/api/workbook/names.ts
76683
+ var import_api = require("@mog-sdk/spreadsheet-contracts/api");
77201
76684
  init_errors();
77202
76685
 
77203
76686
  // ../../kernel/src/domain/formulas/named-ranges.ts
@@ -77330,6 +76813,10 @@ async function getRefersToA1(ctx, name) {
77330
76813
  const a1 = await ctx.computeBridge.toA1Display(NIL_SHEET_ID, wire);
77331
76814
  return a1.startsWith("=") ? a1 : `=${a1}`;
77332
76815
  }
76816
+ async function getVisible(ctx) {
76817
+ const rustNames = await ctx.computeBridge.getVisibleNamedRanges();
76818
+ return rustNames.map(mapRustNamedRange);
76819
+ }
77333
76820
  async function create2(ctx, input, contextSheet, _origin = "user") {
77334
76821
  const formula = await ctx.computeBridge.toIdentityFormula(contextSheet, input.refersToA1);
77335
76822
  const rawFormula = formula;
@@ -77415,7 +76902,7 @@ async function update2(ctx, id, updates, contextSheet, _origin = "user") {
77415
76902
  }
77416
76903
  const newName = updates.name ?? existing.name;
77417
76904
  if (newName !== existing.name) {
77418
- void ctx.computeBridge.removeNamedRange(existing.name);
76905
+ void ctx.computeBridge.removeNamedRangeById(existing.id);
77419
76906
  }
77420
76907
  let refersToWire = identityFormulaToWire(existing.refersTo);
77421
76908
  if (updates.refersToA1) {
@@ -77502,7 +76989,7 @@ async function remove(ctx, id, _origin = "user") {
77502
76989
  if (!existing) {
77503
76990
  throw new KernelError("DOMAIN_DEFINED_NAME_NOT_FOUND", `Defined name with ID ${id} not found`);
77504
76991
  }
77505
- void ctx.computeBridge.removeNamedRange(existing.name);
76992
+ void ctx.computeBridge.removeNamedRangeById(existing.id);
77506
76993
  }
77507
76994
  async function exportNames(ctx) {
77508
76995
  const all = await getAll(ctx);
@@ -77527,7 +77014,7 @@ function sanitizeLabel(label) {
77527
77014
  }
77528
77015
  return name;
77529
77016
  }
77530
- function colToLetter(col) {
77017
+ function colToLetter2(col) {
77531
77018
  let result = "";
77532
77019
  let c = col;
77533
77020
  while (c >= 0) {
@@ -77601,7 +77088,7 @@ async function createFromSelection(ctx, sheetId, range2, options, _origin = "use
77601
77088
  result.skippedReasons.push({ label: name, reason: validation.message ?? "invalid name" });
77602
77089
  return;
77603
77090
  }
77604
- const refersToA1 = refStartRow === refEndRow && refStartCol === refEndCol ? `=$${colToLetter(refStartCol)}$${refStartRow + 1}` : `=$${colToLetter(refStartCol)}$${refStartRow + 1}:$${colToLetter(refEndCol)}$${refEndRow + 1}`;
77091
+ const refersToA1 = refStartRow === refEndRow && refStartCol === refEndCol ? `=$${colToLetter2(refStartCol)}$${refStartRow + 1}` : `=$${colToLetter2(refStartCol)}$${refStartRow + 1}:$${colToLetter2(refEndCol)}$${refEndRow + 1}`;
77605
77092
  try {
77606
77093
  await create2(ctx, { name: sanitized, refersToA1 }, sheetId);
77607
77094
  existingKeys.add(key);
@@ -77816,13 +77303,13 @@ var WorkbookNamesImpl = class {
77816
77303
  if (!values) return null;
77817
77304
  return values.map(
77818
77305
  (row) => row.map((cell) => {
77819
- if (cell === null || cell === void 0) return "Empty" /* Empty */;
77820
- if (typeof cell === "boolean") return "Boolean" /* Boolean */;
77821
- if (typeof cell === "number") return "Double" /* Double */;
77822
- if (typeof cell === "string") return "String" /* String */;
77306
+ if (cell === null || cell === void 0) return import_api.RangeValueType.Empty;
77307
+ if (typeof cell === "boolean") return import_api.RangeValueType.Boolean;
77308
+ if (typeof cell === "number") return import_api.RangeValueType.Double;
77309
+ if (typeof cell === "string") return import_api.RangeValueType.String;
77823
77310
  if (typeof cell === "object" && cell !== null && "type" in cell)
77824
- return "Error" /* Error */;
77825
- return "String" /* String */;
77311
+ return import_api.RangeValueType.Error;
77312
+ return import_api.RangeValueType.String;
77826
77313
  })
77827
77314
  );
77828
77315
  }
@@ -77914,7 +77401,7 @@ var BUILT_IN_LISTS = [
77914
77401
  ];
77915
77402
 
77916
77403
  // ../../kernel/src/domain/workbook/workbook.ts
77917
- init_protection();
77404
+ var import_protection2 = require("@mog-sdk/spreadsheet-contracts/protection");
77918
77405
 
77919
77406
  // ../../spreadsheet-utils/src/protection.ts
77920
77407
  init_cjs_shims();
@@ -77954,7 +77441,7 @@ async function setSelectedSheetIds(ctx, sheetIds, _origin = "user") {
77954
77441
  }
77955
77442
  async function protect(ctx, password, options, _origin = "user") {
77956
77443
  const fullOptions = {
77957
- ...DEFAULT_WORKBOOK_PROTECTION_OPTIONS,
77444
+ ...import_protection2.DEFAULT_WORKBOOK_PROTECTION_OPTIONS,
77958
77445
  ...options
77959
77446
  };
77960
77447
  const current = await getSettings(ctx);
@@ -78370,7 +77857,7 @@ init_sheet_meta();
78370
77857
 
78371
77858
  // ../../kernel/src/api/worksheet/worksheet-impl.ts
78372
77859
  init_cjs_shims();
78373
- init_core3();
77860
+ var import_core6 = require("@mog-sdk/spreadsheet-contracts/core");
78374
77861
  init_errors3();
78375
77862
  init_errors();
78376
77863
 
@@ -78873,6 +78360,7 @@ init_cell_properties();
78873
78360
  var MAX_RANGE_CELLS = 1e4;
78874
78361
  var MAX_RANGE_BOUNDING_BOX = 5e5;
78875
78362
  var MAX_DESCRIBE_OUTPUT_CHARS = 5e4;
78363
+ var MAX_SUMMARY_NAMED_RANGES = 20;
78876
78364
  async function getStyleHints(ctx, sheetId, row, col) {
78877
78365
  const format = await getFormat(ctx, sheetId, row, col);
78878
78366
  if (!format) return null;
@@ -78962,7 +78450,7 @@ function generateFormulaDocumentation(analysis) {
78962
78450
  const lines = [""];
78963
78451
  for (const info of significantPatterns) {
78964
78452
  const examples = info.cells.slice(0, 2).map((cell) => {
78965
- const addr = `${colToLetter2(cell.col)}${cell.row + 1}`;
78453
+ const addr = `${colToLetter3(cell.col)}${cell.row + 1}`;
78966
78454
  return `${addr}: =${cell.formula}`;
78967
78455
  });
78968
78456
  const exampleStr = examples.length > 0 ? ` (e.g. ${examples.join(", ")})` : "";
@@ -79021,7 +78509,7 @@ function buildLeftContext(leftCells, startRow, startCol, endRow) {
79021
78509
  found.sort((a, b) => a.col - b.col);
79022
78510
  const tokens = found.map((f) => {
79023
78511
  const prefix = "\u2192".repeat(Math.max(0, f.indent));
79024
- const addr = `${colToLetter2(f.col)}${row + 1}`;
78512
+ const addr = `${colToLetter3(f.col)}${row + 1}`;
79025
78513
  return `${prefix}${addr}:${f.text}`;
79026
78514
  });
79027
78515
  lines.push(tokens.join(" | "));
@@ -79093,7 +78581,7 @@ function buildAboveContext(aboveCells, startRow, startCol, endCol) {
79093
78581
  sawNumeric = true;
79094
78582
  continue;
79095
78583
  }
79096
- const addr = `${colToLetter2(c)}${bestRow + 1}`;
78584
+ const addr = `${colToLetter3(c)}${bestRow + 1}`;
79097
78585
  if (tokens.length > 0 && sawNumeric) tokens.push("...");
79098
78586
  tokens.push(`${addr}:${d}`);
79099
78587
  sawNumeric = false;
@@ -79151,8 +78639,8 @@ function consolidateRanges(cells) {
79151
78639
  covered.add(`${r},${c}`);
79152
78640
  }
79153
78641
  }
79154
- const start = `${colToLetter2(cell.col)}${cell.row + 1}`;
79155
- const end = `${colToLetter2(endCol)}${endRow + 1}`;
78642
+ const start = `${colToLetter3(cell.col)}${cell.row + 1}`;
78643
+ const end = `${colToLetter3(endCol)}${endRow + 1}`;
79156
78644
  ranges.push(start === end ? start : `${start}:${end}`);
79157
78645
  }
79158
78646
  return ranges;
@@ -79223,9 +78711,12 @@ async function getDisplayValue(ctx, sheetId, row, col) {
79223
78711
  async function getCell(ctx, sheetId, row, col) {
79224
78712
  const data = await getData(ctx, sheetId, row, col);
79225
78713
  if (!data) return void 0;
78714
+ const fmt = await getFormat(ctx, sheetId, row, col);
79226
78715
  return {
79227
78716
  value: (data.formula !== void 0 ? data.computed : rawToCellValue(data.raw)) ?? null,
79228
- formula: data.formula
78717
+ formula: data.formula,
78718
+ format: fmt ?? void 0,
78719
+ formatted: await getDisplayValue(ctx, sheetId, row, col) ?? void 0
79229
78720
  };
79230
78721
  }
79231
78722
  async function getDisplayValue2(ctx, sheetId, row, col) {
@@ -79246,10 +78737,11 @@ async function setCell(ctx, sheetId, row, col, value) {
79246
78737
  throw KernelError.from(null, "COMPUTE_ERROR", `Invalid cell address: row=${row}, col=${col}`);
79247
78738
  }
79248
78739
  const input = value === null || value === void 0 ? "" : value === "" ? "\0" : String(value);
79249
- const result = await ctx.computeBridge.setCellsByPosition(sheetId, [{ row, col, input }]);
78740
+ ctx.computeBridge.getMutationHandler()?.changeAccumulator.setDirectEdits([{ sheetId, row, col }]);
78741
+ await ctx.computeBridge.setCellsByPosition(sheetId, [{ row, col, input }]);
79250
78742
  }
79251
78743
  async function setCells(ctx, sheetId, cells) {
79252
- if (cells.length === 0) return { cellsWritten: 0 };
78744
+ if (cells.length === 0) return { cellsWritten: 0, errors: null };
79253
78745
  const edits = cells.map((cell) => {
79254
78746
  let row;
79255
78747
  let col;
@@ -79271,13 +78763,20 @@ async function setCells(ctx, sheetId, cells) {
79271
78763
  }
79272
78764
  const uniqueEdits = Array.from(deduped.values());
79273
78765
  const duplicatesRemoved = edits.length - uniqueEdits.length;
78766
+ ctx.computeBridge.getMutationHandler()?.changeAccumulator.setDirectEdits(
78767
+ uniqueEdits.map((e) => ({ sheetId, row: e.row, col: e.col }))
78768
+ );
79274
78769
  await ctx.computeBridge.setCellsByPosition(sheetId, uniqueEdits);
79275
- const result = { cellsWritten: uniqueEdits.length };
78770
+ const result = { cellsWritten: uniqueEdits.length, errors: null };
79276
78771
  if (duplicatesRemoved > 0) {
79277
78772
  result.warnings = [
79278
- createWarning("API_DUPLICATE_COORDINATES", `${duplicatesRemoved} duplicate coordinate(s) resolved by last-write-wins`, {
79279
- duplicatesRemoved
79280
- })
78773
+ createWarning(
78774
+ "API_DUPLICATE_COORDINATES",
78775
+ `${duplicatesRemoved} duplicate coordinate(s) resolved by last-write-wins`,
78776
+ {
78777
+ duplicatesRemoved
78778
+ }
78779
+ )
79281
78780
  ];
79282
78781
  }
79283
78782
  return result;
@@ -79378,7 +78877,7 @@ async function batchGetCellPositions(ctx, sheetId, cellIds) {
79378
78877
 
79379
78878
  // ../../kernel/src/api/worksheet/operations/dependency-operations.ts
79380
78879
  init_cjs_shims();
79381
- function colToLetter3(col) {
78880
+ function colToLetter4(col) {
79382
78881
  let result = "";
79383
78882
  let c = col;
79384
78883
  while (c >= 0) {
@@ -79389,11 +78888,11 @@ function colToLetter3(col) {
79389
78888
  }
79390
78889
  async function getDependents(ctx, sheetId, row, col) {
79391
78890
  const results = await ctx.computeBridge.getDependents(sheetId, row, col);
79392
- return results.map((r) => `${colToLetter3(r.col)}${r.row + 1}`);
78891
+ return results.map((r) => `${colToLetter4(r.col)}${r.row + 1}`);
79393
78892
  }
79394
78893
  async function getPrecedents(ctx, sheetId, row, col) {
79395
78894
  const results = await ctx.computeBridge.getPrecedents(sheetId, row, col);
79396
- return results.map((r) => `${colToLetter3(r.col)}${r.row + 1}`);
78895
+ return results.map((r) => `${colToLetter4(r.col)}${r.row + 1}`);
79397
78896
  }
79398
78897
 
79399
78898
  // ../../kernel/src/api/worksheet/operations/fill-operations.ts
@@ -79446,7 +78945,8 @@ async function autoFill(ctx, sheetId, sourceRange, targetRange, mode) {
79446
78945
  return {
79447
78946
  patternType: fillData?.patternType ?? "copy",
79448
78947
  filledCellCount: fillData?.filledCellCount ?? 0,
79449
- warnings: fillData?.warnings ?? []
78948
+ warnings: fillData?.warnings ?? [],
78949
+ changes: fillData?.changes ?? []
79450
78950
  };
79451
78951
  }
79452
78952
  function splitRangeForSeries(range2, direction) {
@@ -79770,14 +79270,14 @@ async function regexSearch(ctx, sheetId, patterns, options) {
79770
79270
  for (const { regex, source } of compiledPatterns) {
79771
79271
  regex.lastIndex = 0;
79772
79272
  if (regex.test(valueStr)) {
79773
- const address = `${colToLetter2(cell.col)}${cell.row + 1}`;
79273
+ const address = `${colToLetter3(cell.col)}${cell.row + 1}`;
79774
79274
  results.push({ address, value: valueStr, sheetName, matchedPattern: source });
79775
79275
  break;
79776
79276
  }
79777
79277
  if (options?.includeFormulas && cell.formula) {
79778
79278
  regex.lastIndex = 0;
79779
79279
  if (regex.test(cell.formula)) {
79780
- const address = `${colToLetter2(cell.col)}${cell.row + 1}`;
79280
+ const address = `${colToLetter3(cell.col)}${cell.row + 1}`;
79781
79281
  results.push({ address, value: valueStr, sheetName, matchedPattern: source });
79782
79282
  break;
79783
79283
  }
@@ -79933,7 +79433,7 @@ async function clearRange2(ctx, sheetId, range2) {
79933
79433
  }
79934
79434
  }
79935
79435
  }
79936
- return { success: true, data: void 0, affectedCells };
79436
+ return { success: true, data: { cellCount }, affectedCells };
79937
79437
  } catch (e) {
79938
79438
  return {
79939
79439
  success: false,
@@ -79944,6 +79444,7 @@ async function clearRange2(ctx, sheetId, range2) {
79944
79444
 
79945
79445
  // ../../kernel/src/api/worksheet/operations/range-query-operations.ts
79946
79446
  init_cjs_shims();
79447
+ var import_api3 = require("@mog-sdk/spreadsheet-contracts/api");
79947
79448
  init_a1();
79948
79449
  init_value_conversions();
79949
79450
  async function clearWithMode(ctx, sheetId, range2, applyTo = "all") {
@@ -79965,6 +79466,8 @@ async function clearWithMode(ctx, sheetId, range2, applyTo = "all") {
79965
79466
  promises.push(clearHyperlinksInRange(ctx, sheetId, n));
79966
79467
  }
79967
79468
  await Promise.all(promises);
79469
+ const cellCount = (n.endRow - n.startRow + 1) * (n.endCol - n.startCol + 1);
79470
+ return { cellCount };
79968
79471
  }
79969
79472
  async function clearHyperlinksInRange(ctx, sheetId, range2) {
79970
79473
  const rangeResult = await ctx.computeBridge.queryRange(
@@ -80043,7 +79546,7 @@ async function getValueTypes(ctx, sheetId, range2) {
80043
79546
  for (let col = n.startCol; col <= n.endCol; col++) {
80044
79547
  const cell = cellMap.get(`${row},${col}`);
80045
79548
  if (!cell) {
80046
- rowData.push("Empty" /* Empty */);
79549
+ rowData.push(import_api3.RangeValueType.Empty);
80047
79550
  } else {
80048
79551
  rowData.push(classifyValueType(viewportCellValueToCellValue(cell.value)));
80049
79552
  }
@@ -80053,12 +79556,12 @@ async function getValueTypes(ctx, sheetId, range2) {
80053
79556
  return result;
80054
79557
  }
80055
79558
  function classifyValueType(value) {
80056
- if (value === null || value === void 0) return "Empty" /* Empty */;
80057
- if (typeof value === "string") return value === "" ? "Empty" /* Empty */ : "String" /* String */;
80058
- if (typeof value === "number") return "Double" /* Double */;
80059
- if (typeof value === "boolean") return "Boolean" /* Boolean */;
80060
- if (typeof value === "object" && value !== null && "type" in value) return "Error" /* Error */;
80061
- return "String" /* String */;
79559
+ if (value === null || value === void 0) return import_api3.RangeValueType.Empty;
79560
+ if (typeof value === "string") return value === "" ? import_api3.RangeValueType.Empty : import_api3.RangeValueType.String;
79561
+ if (typeof value === "number") return import_api3.RangeValueType.Double;
79562
+ if (typeof value === "boolean") return import_api3.RangeValueType.Boolean;
79563
+ if (typeof value === "object" && value !== null && "type" in value) return import_api3.RangeValueType.Error;
79564
+ return import_api3.RangeValueType.String;
80062
79565
  }
80063
79566
  async function findInRange(ctx, sheetId, range2, text, options) {
80064
79567
  const n = normalizeRange(range2);
@@ -80083,7 +79586,7 @@ async function findInRange(ctx, sheetId, range2, text, options) {
80083
79586
  const valueStr = cell.formatted ?? viewportCellValueToString(cell.value);
80084
79587
  if (pattern.test(valueStr)) {
80085
79588
  return {
80086
- address: `${colToLetter2(cell.col)}${cell.row + 1}`,
79589
+ address: `${colToLetter3(cell.col)}${cell.row + 1}`,
80087
79590
  value: valueStr
80088
79591
  };
80089
79592
  }
@@ -80155,46 +79658,46 @@ async function getNumberFormatCategories(ctx, sheetId, range2) {
80155
79658
  }
80156
79659
  function detectFormatType(formatCode) {
80157
79660
  if (!formatCode || formatCode === "" || formatCode === "General") {
80158
- return "General" /* General */;
79661
+ return import_api3.NumberFormatCategory.General;
80159
79662
  }
80160
79663
  if (formatCode === "@") {
80161
- return "Text" /* Text */;
79664
+ return import_api3.NumberFormatCategory.Text;
80162
79665
  }
80163
79666
  const stripped = formatCode.replace(/\[[^\]]*\]/g, "").replace(/"[^"]*"/g, "");
80164
79667
  if (/[yYmMdD]/.test(stripped) && /[yYdD]/.test(stripped)) {
80165
- return "Date" /* Date */;
79668
+ return import_api3.NumberFormatCategory.Date;
80166
79669
  }
80167
79670
  if (/[hHsS]/.test(stripped)) {
80168
79671
  if (/[yYdD]/.test(stripped)) {
80169
- return "Date" /* Date */;
79672
+ return import_api3.NumberFormatCategory.Date;
80170
79673
  }
80171
- return "Time" /* Time */;
79674
+ return import_api3.NumberFormatCategory.Time;
80172
79675
  }
80173
79676
  if (/AM\/PM/i.test(stripped)) {
80174
- return "Time" /* Time */;
79677
+ return import_api3.NumberFormatCategory.Time;
80175
79678
  }
80176
79679
  if (stripped.includes("%")) {
80177
- return "Percentage" /* Percentage */;
79680
+ return import_api3.NumberFormatCategory.Percentage;
80178
79681
  }
80179
79682
  if (/[eE][+-]/.test(stripped)) {
80180
- return "Scientific" /* Scientific */;
79683
+ return import_api3.NumberFormatCategory.Scientific;
80181
79684
  }
80182
79685
  if (stripped.includes("/") && !/[yYmMdDhHsS]/.test(stripped)) {
80183
- return "Fraction" /* Fraction */;
79686
+ return import_api3.NumberFormatCategory.Fraction;
80184
79687
  }
80185
79688
  if (/[_*]/.test(stripped) && /[$(]/.test(stripped)) {
80186
- return "Accounting" /* Accounting */;
79689
+ return import_api3.NumberFormatCategory.Accounting;
80187
79690
  }
80188
79691
  if (/[$€£¥₹]/.test(formatCode)) {
80189
- return "Currency" /* Currency */;
79692
+ return import_api3.NumberFormatCategory.Currency;
80190
79693
  }
80191
79694
  if (/^0{5}/.test(stripped) || /^0{3}-0{2}-0{4}/.test(stripped)) {
80192
- return "Special" /* Special */;
79695
+ return import_api3.NumberFormatCategory.Special;
80193
79696
  }
80194
79697
  if (/[#0]/.test(stripped)) {
80195
- return "Number" /* Number */;
79698
+ return import_api3.NumberFormatCategory.Number;
80196
79699
  }
80197
- return "Custom" /* Custom */;
79700
+ return import_api3.NumberFormatCategory.Custom;
80198
79701
  }
80199
79702
 
80200
79703
  // ../../kernel/src/api/worksheet/operations/sort-operations.ts
@@ -80970,6 +80473,84 @@ var WorksheetBindingsImpl = class {
80970
80473
  }
80971
80474
  };
80972
80475
 
80476
+ // ../../kernel/src/api/worksheet/index.ts
80477
+ init_change_accumulator();
80478
+
80479
+ // ../../kernel/src/api/worksheet/changes.ts
80480
+ init_cjs_shims();
80481
+ function parseRangeScope(scope) {
80482
+ const match = scope.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/i);
80483
+ if (!match) return null;
80484
+ const startCol = letterToCol2(match[1].toUpperCase());
80485
+ const startRow = parseInt(match[2], 10) - 1;
80486
+ const endCol = letterToCol2(match[3].toUpperCase());
80487
+ const endRow = parseInt(match[4], 10) - 1;
80488
+ return { startRow, startCol, endRow, endCol };
80489
+ }
80490
+ function letterToCol2(letters) {
80491
+ let col = 0;
80492
+ for (let i = 0; i < letters.length; i++) {
80493
+ col = col * 26 + (letters.charCodeAt(i) - 64);
80494
+ }
80495
+ return col - 1;
80496
+ }
80497
+ var ChangeTrackerImpl = class {
80498
+ constructor(sheetId, options, unregister) {
80499
+ this._active = true;
80500
+ this.buffer = [];
80501
+ this.sheetId = sheetId;
80502
+ this.unregister = unregister;
80503
+ this.scopeBounds = options?.scope ? parseRangeScope(options.scope) : null;
80504
+ this.excludeOrigins = options?.excludeOrigins && options.excludeOrigins.length > 0 ? new Set(options.excludeOrigins) : null;
80505
+ }
80506
+ // --- TrackerHandle (called by ChangeAccumulator) ---
80507
+ _ingest(records) {
80508
+ if (!this._active) return;
80509
+ for (const record of records) {
80510
+ if (this.excludeOrigins?.has(record.origin)) continue;
80511
+ if (this.scopeBounds) {
80512
+ const { startRow, startCol, endRow, endCol } = this.scopeBounds;
80513
+ if (record.row < startRow || record.row > endRow || record.col < startCol || record.col > endCol) {
80514
+ continue;
80515
+ }
80516
+ }
80517
+ this.buffer.push(record);
80518
+ }
80519
+ }
80520
+ // --- ChangeTracker public API ---
80521
+ collect() {
80522
+ const result = this.buffer;
80523
+ this.buffer = [];
80524
+ return result;
80525
+ }
80526
+ close() {
80527
+ if (!this._active) return;
80528
+ this._active = false;
80529
+ this.buffer = [];
80530
+ this.unregister();
80531
+ }
80532
+ get active() {
80533
+ return this._active;
80534
+ }
80535
+ };
80536
+ var WorksheetChangesImpl = class {
80537
+ constructor(ctx, sheetId) {
80538
+ this.ctx = ctx;
80539
+ this.sheetId = sheetId;
80540
+ }
80541
+ track(options) {
80542
+ const accumulator = this.ctx.computeBridge.getMutationHandler()?.changeAccumulator;
80543
+ if (!accumulator) {
80544
+ throw new Error("Change tracking unavailable: MutationResultHandler not initialized");
80545
+ }
80546
+ const tracker = new ChangeTrackerImpl(this.sheetId, options, () => {
80547
+ accumulator.unregister(tracker);
80548
+ });
80549
+ accumulator.register(tracker);
80550
+ return tracker;
80551
+ }
80552
+ };
80553
+
80973
80554
  // ../../kernel/src/api/worksheet/charts.ts
80974
80555
  init_cjs_shims();
80975
80556
  function buildStatisticalExtra(config) {
@@ -81399,7 +80980,7 @@ function cellRefToA1(cellRef) {
81399
80980
  const col = parseInt(parts[0], 10);
81400
80981
  const row = parseInt(parts[1], 10);
81401
80982
  if (isNaN(col) || isNaN(row)) return cellRef;
81402
- return toA1(row, col);
80983
+ return toA12(row, col);
81403
80984
  }
81404
80985
  function toApiComment(c) {
81405
80986
  const text = c.content ?? c.runs.map((r) => r.text).join("");
@@ -81500,7 +81081,7 @@ var WorksheetCommentsImpl = class {
81500
81081
  return {
81501
81082
  content,
81502
81083
  author: first.author,
81503
- cellAddress: toA1(row, col)
81084
+ cellAddress: toA12(row, col)
81504
81085
  };
81505
81086
  }
81506
81087
  async removeNote(a, b) {
@@ -81843,7 +81424,7 @@ var WorksheetFiltersImpl = class {
81843
81424
  }
81844
81425
  }
81845
81426
  return {
81846
- range: `${toA1(filter.startRow ?? 0, filter.startCol ?? 0)}:${toA1(filter.endRow ?? 0, filter.endCol ?? 0)}`,
81427
+ range: `${toA12(filter.startRow ?? 0, filter.startCol ?? 0)}:${toA12(filter.endRow ?? 0, filter.endCol ?? 0)}`,
81847
81428
  columns
81848
81429
  };
81849
81430
  }
@@ -82218,7 +81799,12 @@ var WorksheetFormatsImpl = class {
82218
81799
  col = b;
82219
81800
  format = c;
82220
81801
  }
82221
- await this.ctx.computeBridge.setFormatForRanges(this.sheetId, [[row, col, row, col]], format);
81802
+ const result = await this.ctx.computeBridge.setFormatForRanges(
81803
+ this.sheetId,
81804
+ [[row, col, row, col]],
81805
+ format
81806
+ );
81807
+ return { cellCount: result.propertyChanges?.length ?? 0 };
82222
81808
  }
82223
81809
  async setRange(a, b) {
82224
81810
  let range2;
@@ -82230,11 +81816,12 @@ var WorksheetFormatsImpl = class {
82230
81816
  range2 = a;
82231
81817
  }
82232
81818
  const n = normalizeRange(range2);
82233
- await this.ctx.computeBridge.setFormatForRanges(
81819
+ const result = await this.ctx.computeBridge.setFormatForRanges(
82234
81820
  this.sheetId,
82235
81821
  [[n.startRow, n.startCol, n.endRow, n.endCol]],
82236
81822
  b
82237
81823
  );
81824
+ return { cellCount: result.propertyChanges?.length ?? 0 };
82238
81825
  }
82239
81826
  async setRanges(ranges, format) {
82240
81827
  const boundedRanges = [];
@@ -82265,9 +81852,11 @@ var WorksheetFormatsImpl = class {
82265
81852
  }
82266
81853
  async get(a, b) {
82267
81854
  const { row, col } = resolveCell(a, b);
82268
- const result = await this.ctx.computeBridge.queryRange(this.sheetId, row, col, row, col);
82269
- if (!result?.cells || result.cells.length === 0) return null;
82270
- return result.cells[0]?.format ?? null;
81855
+ return this.ctx.computeBridge.getResolvedFormat(
81856
+ this.sheetId,
81857
+ row,
81858
+ col
81859
+ );
82271
81860
  }
82272
81861
  async adjustIndent(a, b, c) {
82273
81862
  let row, col, amount;
@@ -82291,7 +81880,8 @@ var WorksheetFormatsImpl = class {
82291
81880
  async clearFill(a, b) {
82292
81881
  const { row, col } = resolveCell(a, b);
82293
81882
  const rangeTuple = [row, col, row, col];
82294
- const current = await this.get(row, col);
81883
+ const result = await this.ctx.computeBridge.queryRange(this.sheetId, row, col, row, col);
81884
+ const current = result?.cells?.[0]?.format ?? null;
82295
81885
  await this.ctx.computeBridge.clearFormatForRanges(this.sheetId, [rangeTuple]);
82296
81886
  if (current) {
82297
81887
  const { backgroundColor, patternType, patternForegroundColor, gradientFill, ...rest } = current;
@@ -83051,8 +82641,8 @@ init_cjs_shims();
83051
82641
  init_errors();
83052
82642
  function formatDataSource(sourceSheetName, sourceRange) {
83053
82643
  if (!sourceRange) return "";
83054
- const start = toA1(sourceRange.startRow, sourceRange.startCol);
83055
- const end = toA1(sourceRange.endRow, sourceRange.endCol);
82644
+ const start = toA12(sourceRange.startRow, sourceRange.startCol);
82645
+ const end = toA12(sourceRange.endRow, sourceRange.endCol);
83056
82646
  const sheetRef = sourceSheetName ?? "Unknown";
83057
82647
  const needsQuotes = /[^A-Za-z0-9_]/.test(sheetRef);
83058
82648
  const quotedSheet = needsQuotes ? `'${sheetRef}'` : sheetRef;
@@ -83144,7 +82734,7 @@ var WorksheetPivotsImpl = class _WorksheetPivotsImpl {
83144
82734
  }
83145
82735
  return pivots.map((p) => {
83146
82736
  const apiConfig = dataConfigToApiConfig(p, p.sourceSheetName);
83147
- const location = p.outputLocation ? toA1(p.outputLocation.row, p.outputLocation.col) : void 0;
82737
+ const location = p.outputLocation ? toA12(p.outputLocation.row, p.outputLocation.col) : void 0;
83148
82738
  return {
83149
82739
  name: p.name ?? p.id,
83150
82740
  dataSource: apiConfig.dataSource,
@@ -83665,7 +83255,7 @@ init_errors();
83665
83255
 
83666
83256
  // ../../kernel/src/api/worksheet/operations/sheet-management-operations.ts
83667
83257
  init_cjs_shims();
83668
- init_protection();
83258
+ var import_protection4 = require("@mog-sdk/spreadsheet-contracts/protection");
83669
83259
  function parseCellRef2(ref) {
83670
83260
  const match = ref.match(/^([A-Z]+)(\d+)$/i);
83671
83261
  if (!match) return null;
@@ -83677,7 +83267,7 @@ function parseCellRef2(ref) {
83677
83267
  }
83678
83268
  return { row: rowNum - 1, col: col - 1 };
83679
83269
  }
83680
- function colToLetter4(col) {
83270
+ function colToLetter5(col) {
83681
83271
  let result = "";
83682
83272
  let c = col;
83683
83273
  while (c >= 0) {
@@ -83687,8 +83277,8 @@ function colToLetter4(col) {
83687
83277
  return result;
83688
83278
  }
83689
83279
  function printRangeToA1(range2) {
83690
- const startRef = `${colToLetter4(range2.startCol)}${range2.startRow + 1}`;
83691
- const endRef = `${colToLetter4(range2.endCol)}${range2.endRow + 1}`;
83280
+ const startRef = `${colToLetter5(range2.startCol)}${range2.startRow + 1}`;
83281
+ const endRef = `${colToLetter5(range2.endCol)}${range2.endRow + 1}`;
83692
83282
  return `${startRef}:${endRef}`;
83693
83283
  }
83694
83284
  async function getPageBreaks(ctx, sheetId) {
@@ -84088,7 +83678,11 @@ var WorksheetSlicersImpl = class {
84088
83678
  this.sheetId = sheetId;
84089
83679
  }
84090
83680
  async add(config) {
84091
- const storedConfig = config;
83681
+ const caption = config.caption ?? config.name ?? "";
83682
+ const storedConfig = {
83683
+ ...config,
83684
+ caption
83685
+ };
84092
83686
  await this.ctx.computeBridge.createSlicer(this.sheetId, storedConfig);
84093
83687
  return storedConfig.id ?? "";
84094
83688
  }
@@ -84802,7 +84396,7 @@ var WorksheetStructureImpl = class {
84802
84396
  async getMergedRegions() {
84803
84397
  const regions = await getAll3(this.ctx, this.sheetId);
84804
84398
  return regions.map((r) => ({
84805
- range: `${toA1(r.startRow, r.startCol)}:${toA1(r.endRow, r.endCol)}`,
84399
+ range: `${toA12(r.startRow, r.startCol)}:${toA12(r.endRow, r.endCol)}`,
84806
84400
  startRow: r.startRow,
84807
84401
  startCol: r.startCol,
84808
84402
  endRow: r.endRow,
@@ -84865,8 +84459,8 @@ function parseA1Range(range2) {
84865
84459
  };
84866
84460
  }
84867
84461
  function bridgeTableToTableInfo(table) {
84868
- const startLetter = colToLetter2(table.range.startCol);
84869
- const endLetter = colToLetter2(table.range.endCol);
84462
+ const startLetter = colToLetter3(table.range.startCol);
84463
+ const endLetter = colToLetter3(table.range.endCol);
84870
84464
  const startRowA1 = table.range.startRow + 1;
84871
84465
  const endRowA1 = table.range.endRow + 1;
84872
84466
  const range2 = `${startLetter}${startRowA1}:${endLetter}${endRowA1}`;
@@ -84911,16 +84505,16 @@ function getDataBodyRangeFromInfo(table) {
84911
84505
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
84912
84506
  const dataEndRow = table.showTotals ? parsed.endRow - 1 : parsed.endRow;
84913
84507
  if (dataStartRow > dataEndRow) return null;
84914
- const startLetter = colToLetter2(parsed.startCol);
84915
- const endLetter = colToLetter2(parsed.endCol);
84508
+ const startLetter = colToLetter3(parsed.startCol);
84509
+ const endLetter = colToLetter3(parsed.endCol);
84916
84510
  return `${startLetter}${dataStartRow + 1}:${endLetter}${dataEndRow + 1}`;
84917
84511
  }
84918
84512
  function getHeaderRowRangeFromInfo(table) {
84919
84513
  if (!table.hasHeaders) return null;
84920
84514
  const parsed = parseA1Range(table.range);
84921
84515
  if (!parsed) return null;
84922
- const startLetter = colToLetter2(parsed.startCol);
84923
- const endLetter = colToLetter2(parsed.endCol);
84516
+ const startLetter = colToLetter3(parsed.startCol);
84517
+ const endLetter = colToLetter3(parsed.endCol);
84924
84518
  const headerRow = parsed.startRow + 1;
84925
84519
  return `${startLetter}${headerRow}:${endLetter}${headerRow}`;
84926
84520
  }
@@ -84928,8 +84522,8 @@ function getTotalRowRangeFromInfo(table) {
84928
84522
  if (!table.showTotals) return null;
84929
84523
  const parsed = parseA1Range(table.range);
84930
84524
  if (!parsed) return null;
84931
- const startLetter = colToLetter2(parsed.startCol);
84932
- const endLetter = colToLetter2(parsed.endCol);
84525
+ const startLetter = colToLetter3(parsed.startCol);
84526
+ const endLetter = colToLetter3(parsed.endCol);
84933
84527
  const totalRow = parsed.endRow + 1;
84934
84528
  return `${startLetter}${totalRow}:${endLetter}${totalRow}`;
84935
84529
  }
@@ -84972,9 +84566,9 @@ var WorksheetTablesImpl = class {
84972
84566
  if (!match) {
84973
84567
  throw new KernelError("COMPUTE_ERROR", `Invalid range: ${range2}`);
84974
84568
  }
84975
- const startCol = letterToCol2(match[1]);
84569
+ const startCol = letterToCol3(match[1]);
84976
84570
  const startRow = parseInt(match[2], 10) - 1;
84977
- const endCol = letterToCol2(match[3]);
84571
+ const endCol = letterToCol3(match[3]);
84978
84572
  const endRow = parseInt(match[4], 10) - 1;
84979
84573
  await this.ctx.computeBridge.createTable(
84980
84574
  this.sheetId,
@@ -85054,9 +84648,9 @@ var WorksheetTablesImpl = class {
85054
84648
  if (!parsed) {
85055
84649
  throw new KernelError("COMPUTE_ERROR", `Invalid table range: ${table.range}`);
85056
84650
  }
85057
- const startCol = letterToCol2(parsed[1]);
84651
+ const startCol = letterToCol3(parsed[1]);
85058
84652
  const startRow = parseInt(parsed[2], 10) - 1;
85059
- const endCol = letterToCol2(parsed[3]);
84653
+ const endCol = letterToCol3(parsed[3]);
85060
84654
  const endRow = parseInt(parsed[4], 10) - 1;
85061
84655
  const filter = await getFilterForRange(this.ctx, this.sheetId, {
85062
84656
  startRow,
@@ -85077,9 +84671,9 @@ var WorksheetTablesImpl = class {
85077
84671
  if (!match) {
85078
84672
  throw new KernelError("COMPUTE_ERROR", `Invalid range: ${newRange}`);
85079
84673
  }
85080
- const startCol = letterToCol2(match[1]);
84674
+ const startCol = letterToCol3(match[1]);
85081
84675
  const startRow = parseInt(match[2], 10) - 1;
85082
- const endCol = letterToCol2(match[3]);
84676
+ const endCol = letterToCol3(match[3]);
85083
84677
  const endRow = parseInt(match[4], 10) - 1;
85084
84678
  await this.ctx.computeBridge.resizeTable(name, startRow, startCol, endRow, endCol);
85085
84679
  }
@@ -85210,8 +84804,8 @@ var WorksheetTablesImpl = class {
85210
84804
  if (!parsed) throw new KernelError("COMPUTE_ERROR", `Invalid table range: ${table.range}`);
85211
84805
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
85212
84806
  const absRow = dataStartRow + index;
85213
- const startLetter = colToLetter2(parsed.startCol);
85214
- const endLetter = colToLetter2(parsed.endCol);
84807
+ const startLetter = colToLetter3(parsed.startCol);
84808
+ const endLetter = colToLetter3(parsed.endCol);
85215
84809
  return `${startLetter}${absRow + 1}:${endLetter}${absRow + 1}`;
85216
84810
  }
85217
84811
  async getRowValues(tableName, index) {
@@ -85250,7 +84844,7 @@ var WorksheetTablesImpl = class {
85250
84844
  const dataStartRow = table.hasHeaders ? parsed.startRow + 1 : parsed.startRow;
85251
84845
  const dataEndRow = table.showTotals ? parsed.endRow - 1 : parsed.endRow;
85252
84846
  if (dataStartRow > dataEndRow) return null;
85253
- const letter = colToLetter2(col);
84847
+ const letter = colToLetter3(col);
85254
84848
  return `${letter}${dataStartRow + 1}:${letter}${dataEndRow + 1}`;
85255
84849
  }
85256
84850
  async getColumnHeaderRange(tableName, columnIndex) {
@@ -85260,7 +84854,7 @@ var WorksheetTablesImpl = class {
85260
84854
  if (!parsed) return null;
85261
84855
  const col = parsed.startCol + columnIndex;
85262
84856
  if (col > parsed.endCol) return null;
85263
- const letter = colToLetter2(col);
84857
+ const letter = colToLetter3(col);
85264
84858
  const headerRow = parsed.startRow + 1;
85265
84859
  return `${letter}${headerRow}`;
85266
84860
  }
@@ -85271,7 +84865,7 @@ var WorksheetTablesImpl = class {
85271
84865
  if (!parsed) return null;
85272
84866
  const col = parsed.startCol + columnIndex;
85273
84867
  if (col > parsed.endCol) return null;
85274
- const letter = colToLetter2(col);
84868
+ const letter = colToLetter3(col);
85275
84869
  return `${letter}${parsed.startRow + 1}:${letter}${parsed.endRow + 1}`;
85276
84870
  }
85277
84871
  async getColumnTotalRange(tableName, columnIndex) {
@@ -85281,7 +84875,7 @@ var WorksheetTablesImpl = class {
85281
84875
  if (!parsed) return null;
85282
84876
  const col = parsed.startCol + columnIndex;
85283
84877
  if (col > parsed.endCol) return null;
85284
- const letter = colToLetter2(col);
84878
+ const letter = colToLetter3(col);
85285
84879
  const totalRow = parsed.endRow + 1;
85286
84880
  return `${letter}${totalRow}`;
85287
84881
  }
@@ -85380,7 +84974,7 @@ var WorksheetTablesImpl = class {
85380
84974
  async sortClear(_tableName) {
85381
84975
  }
85382
84976
  };
85383
- function letterToCol2(letters) {
84977
+ function letterToCol3(letters) {
85384
84978
  let col = 0;
85385
84979
  for (let i = 0; i < letters.length; i++) {
85386
84980
  col = col * 26 + (letters.toUpperCase().charCodeAt(i) - 64);
@@ -85391,9 +84985,9 @@ function parseA1Range2(range2) {
85391
84985
  const match = range2.match(/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/i);
85392
84986
  if (!match) return null;
85393
84987
  return {
85394
- startCol: letterToCol2(match[1]),
84988
+ startCol: letterToCol3(match[1]),
85395
84989
  startRow: parseInt(match[2], 10) - 1,
85396
- endCol: letterToCol2(match[3]),
84990
+ endCol: letterToCol3(match[3]),
85397
84991
  endRow: parseInt(match[4], 10) - 1
85398
84992
  };
85399
84993
  }
@@ -85582,8 +85176,8 @@ function rangeSchemaToValidationRule(schema) {
85582
85176
  const start = parseRefIdSimple(ref.startId);
85583
85177
  const end = parseRefIdSimple(ref.endId);
85584
85178
  if (start && end) {
85585
- const startA1 = toA1(start.row, start.col);
85586
- const endA1 = toA1(end.row, end.col);
85179
+ const startA1 = toA12(start.row, start.col);
85180
+ const endA1 = toA12(end.row, end.col);
85587
85181
  range2 = startA1 === endA1 ? startA1 : `${startA1}:${endA1}`;
85588
85182
  }
85589
85183
  }
@@ -85616,8 +85210,8 @@ function rangeSchemaToValidationRule(schema) {
85616
85210
  const srcStart = parseRefIdSimple(src.startId);
85617
85211
  const srcEnd = parseRefIdSimple(src.endId);
85618
85212
  if (srcStart && srcEnd) {
85619
- const srcStartA1 = toA1(srcStart.row, srcStart.col);
85620
- const srcEndA1 = toA1(srcEnd.row, srcEnd.col);
85213
+ const srcStartA1 = toA12(srcStart.row, srcStart.col);
85214
+ const srcEndA1 = toA12(srcEnd.row, srcEnd.col);
85621
85215
  rule.listSource = srcStartA1 === srcEndA1 ? `=${srcStartA1}` : `=${srcStartA1}:${srcEndA1}`;
85622
85216
  }
85623
85217
  }
@@ -87834,11 +87428,12 @@ var WorksheetImpl = class {
87834
87428
  if (!result.success) {
87835
87429
  throw result.error;
87836
87430
  }
87431
+ return result.data;
87837
87432
  }
87838
87433
  async clear(range2, applyTo) {
87839
87434
  const parsed = parseCellRange(range2);
87840
87435
  if (!parsed) throw new KernelError("COMPUTE_ERROR", `Invalid range: "${range2}"`);
87841
- await clearWithMode(
87436
+ return clearWithMode(
87842
87437
  this.ctx,
87843
87438
  this.sheetId,
87844
87439
  { sheetId: this.sheetId, ...parsed },
@@ -87886,7 +87481,7 @@ var WorksheetImpl = class {
87886
87481
  format: format ?? void 0,
87887
87482
  hyperlink: hyperlink ?? void 0,
87888
87483
  isMerged: mergeInfo !== void 0,
87889
- mergedRegion: mergeInfo ? `${toA1(mergeInfo.startRow, mergeInfo.startCol)}:${toA1(mergeInfo.endRow, mergeInfo.endCol)}` : void 0
87484
+ mergedRegion: mergeInfo ? `${toA12(mergeInfo.startRow, mergeInfo.startCol)}:${toA12(mergeInfo.endRow, mergeInfo.endCol)}` : void 0
87890
87485
  };
87891
87486
  }
87892
87487
  async getRawRangeData(range2, _includeFormula) {
@@ -87913,7 +87508,8 @@ var WorksheetImpl = class {
87913
87508
  } else {
87914
87509
  rowData.push({
87915
87510
  value: viewportCellValueToCellValue(vc.value) ?? null,
87916
- formula: vc.formula
87511
+ formula: vc.formula,
87512
+ format: vc.format ?? void 0
87917
87513
  });
87918
87514
  }
87919
87515
  }
@@ -87938,10 +87534,10 @@ var WorksheetImpl = class {
87938
87534
  const { row, col } = resolveCell(address);
87939
87535
  const data = await getCell(this.ctx, this.sheetId, row, col);
87940
87536
  if (!data) return "";
87941
- const rawValue = viewportCellValueToString(data.value);
87942
- let result = rawValue;
87537
+ const displayValue = await getDisplayValue2(this.ctx, this.sheetId, row, col);
87538
+ let result = displayValue;
87943
87539
  if (data.formula) {
87944
- result = rawValue !== "" ? `${rawValue}(${data.formula})` : `(${data.formula})`;
87540
+ result = displayValue !== "" ? `${displayValue}(${data.formula})` : `(${data.formula})`;
87945
87541
  }
87946
87542
  const styleHintsStr = await getStyleHints(this.ctx, this.sheetId, row, col);
87947
87543
  if (styleHintsStr) {
@@ -88000,17 +87596,15 @@ var WorksheetImpl = class {
88000
87596
  }
88001
87597
  for (let row = parsed.startRow; row <= parsed.endRow; row++) {
88002
87598
  const rowValues = [];
88003
- let hasContent = false;
88004
87599
  for (let col = parsed.startCol; col <= parsed.endCol; col++) {
88005
- const cellAddr = toA1(row, col);
87600
+ const cellAddr = toA12(row, col);
88006
87601
  const vc = cellMap.get(`${row},${col}`);
88007
87602
  if (!vc) {
88008
87603
  rowValues.push(`${cellAddr}:`);
88009
87604
  continue;
88010
87605
  }
88011
- const rawValue = viewportCellValueToString(vc.value);
88012
- let cellStr = rawValue;
88013
- hasContent = true;
87606
+ const displayValue = vc.formatted ?? viewportCellValueToString(vc.value);
87607
+ let cellStr = displayValue;
88014
87608
  if (vc.formula) {
88015
87609
  const abbreviation = formulaAnalysis.formulaToId.get(`${row},${col}`);
88016
87610
  if (abbreviation) {
@@ -88021,9 +87615,7 @@ var WorksheetImpl = class {
88021
87615
  }
88022
87616
  rowValues.push(`${cellAddr}:${cellStr}`);
88023
87617
  }
88024
- if (hasContent) {
88025
- outputParts.push(rowValues.join(" | "));
88026
- }
87618
+ outputParts.push(rowValues.join(" | "));
88027
87619
  }
88028
87620
  const formulaDocs = generateFormulaDocumentation(formulaAnalysis);
88029
87621
  if (formulaDocs.length > 0) {
@@ -88112,8 +87704,8 @@ var WorksheetImpl = class {
88112
87704
  lines.push(`Sheet: ${meta.name}`);
88113
87705
  const bounds = await this.ctx.computeBridge.getDataBounds(this.sheetId);
88114
87706
  if (bounds) {
88115
- const startAddr = toA1(bounds.minRow, bounds.minCol);
88116
- const endAddr = toA1(bounds.maxRow, bounds.maxCol);
87707
+ const startAddr = toA12(bounds.minRow, bounds.minCol);
87708
+ const endAddr = toA12(bounds.maxRow, bounds.maxCol);
88117
87709
  lines.push(`Used Range: ${startAddr}:${endAddr}`);
88118
87710
  lines.push(
88119
87711
  `Dimensions: ${bounds.maxRow - bounds.minRow + 1} rows x ${bounds.maxCol - bounds.minCol + 1} columns`
@@ -88133,20 +87725,31 @@ var WorksheetImpl = class {
88133
87725
  const tables = await getTablesInSheet(this.ctx, this.sheetId);
88134
87726
  if (tables.length > 0) {
88135
87727
  const tableDescs = tables.map((t) => {
88136
- const r = `${toA1(t.range.startRow, t.range.startCol)}:${toA1(t.range.endRow, t.range.endCol)}`;
87728
+ const r = `${toA12(t.range.startRow, t.range.startCol)}:${toA12(t.range.endRow, t.range.endCol)}`;
88137
87729
  return `${t.name} at ${r}`;
88138
87730
  });
88139
87731
  lines.push(`Tables: ${tables.length} (${tableDescs.join(", ")})`);
88140
87732
  }
88141
- const allNamedRanges = await getAll(this.ctx);
88142
- const sheetNamedRanges = allNamedRanges.filter((nr) => nr.scope === this.sheetId || !nr.scope);
88143
- if (sheetNamedRanges.length > 0) {
87733
+ const allVisible = await getVisible(this.ctx);
87734
+ const scoped = allVisible.filter((nr) => nr.scope === this.sheetId || !nr.scope);
87735
+ const valid = scoped.filter((nr) => !nr.refersTo.template.includes("#REF!"));
87736
+ const broken = scoped.length - valid.length;
87737
+ if (valid.length > 0 || broken > 0) {
87738
+ const toShow = valid.slice(0, MAX_SUMMARY_NAMED_RANGES);
88144
87739
  const nrDescs = [];
88145
- for (const nr of sheetNamedRanges) {
87740
+ for (const nr of toShow) {
88146
87741
  const a1 = await getRefersToA1(this.ctx, nr);
88147
87742
  nrDescs.push(`${nr.name}=${a1}`);
88148
87743
  }
88149
- lines.push(`Named Ranges: ${sheetNamedRanges.length} (${nrDescs.join(", ")})`);
87744
+ let label = `Named Ranges: ${valid.length}`;
87745
+ if (broken > 0) label += ` valid, ${broken} broken (#REF!) omitted`;
87746
+ if (nrDescs.length > 0) {
87747
+ const showing = valid.length > MAX_SUMMARY_NAMED_RANGES ? `showing ${MAX_SUMMARY_NAMED_RANGES}: ` : "";
87748
+ const more = valid.length > MAX_SUMMARY_NAMED_RANGES ? ` \u2014 ${valid.length - MAX_SUMMARY_NAMED_RANGES} more not shown` : "";
87749
+ lines.push(`${label} (${showing}${nrDescs.join(", ")})${more}`);
87750
+ } else {
87751
+ lines.push(label);
87752
+ }
88150
87753
  }
88151
87754
  const maxRows = options?.maxRows;
88152
87755
  const maxCols = options?.maxCols;
@@ -88176,9 +87779,7 @@ var WorksheetImpl = class {
88176
87779
  }
88177
87780
  const firstRowCells = (rowMap.get(finalRange.startRow) ?? []).slice().sort((a, b) => a.col - b.col);
88178
87781
  if (firstRowCells.length > 0) {
88179
- const allStrings = firstRowCells.every(
88180
- (vc) => typeof vc.value === "string" && !vc.formula
88181
- );
87782
+ const allStrings = firstRowCells.every((vc) => typeof vc.value === "string" && !vc.formula);
88182
87783
  if (allStrings) {
88183
87784
  const headers = firstRowCells.map((vc) => String(vc.value));
88184
87785
  lines.push(`Headers: ${headers.join(", ")}`);
@@ -88215,7 +87816,7 @@ var WorksheetImpl = class {
88215
87816
  const rowData = [];
88216
87817
  for (const vc of cells) {
88217
87818
  const rawValue = viewportCellValueToString(vc.value);
88218
- const addr = toA1(vc.row, vc.col);
87819
+ const addr = toA12(vc.row, vc.col);
88219
87820
  if (vc.formula) {
88220
87821
  rowData.push(`${addr}:${rawValue}(=${vc.formula})`);
88221
87822
  } else {
@@ -88239,7 +87840,7 @@ var WorksheetImpl = class {
88239
87840
  async getUsedRange() {
88240
87841
  const range2 = await getUsedRange2(this.ctx, this.sheetId);
88241
87842
  if (!range2) return null;
88242
- return `${toA1(range2.startRow, range2.startCol)}:${toA1(range2.endRow, range2.endCol)}`;
87843
+ return `${toA12(range2.startRow, range2.startCol)}:${toA12(range2.endRow, range2.endCol)}`;
88243
87844
  }
88244
87845
  async getCurrentRegion(row, col) {
88245
87846
  return getCurrentRegion(this.ctx, this.sheetId, row, col);
@@ -88249,15 +87850,15 @@ var WorksheetImpl = class {
88249
87850
  }
88250
87851
  async findCells(predicate) {
88251
87852
  const addresses = await findCells(this.ctx, this.sheetId, predicate);
88252
- return addresses.map((a) => toA1(a.row, a.col));
87853
+ return addresses.map((a) => toA12(a.row, a.col));
88253
87854
  }
88254
87855
  async findByValue(value) {
88255
87856
  const addresses = await findByValue(this.ctx, this.sheetId, value);
88256
- return addresses.map((a) => toA1(a.row, a.col));
87857
+ return addresses.map((a) => toA12(a.row, a.col));
88257
87858
  }
88258
87859
  async findByFormula(pattern) {
88259
87860
  const addresses = await findByFormula(this.ctx, this.sheetId, pattern);
88260
- return addresses.map((a) => toA1(a.row, a.col));
87861
+ return addresses.map((a) => toA12(a.row, a.col));
88261
87862
  }
88262
87863
  async regexSearch(patterns, options) {
88263
87864
  const results = await regexSearch(this.ctx, this.sheetId, patterns, {
@@ -88396,7 +87997,7 @@ var WorksheetImpl = class {
88396
87997
  await this.setRange(start.row, start.col, allRows);
88397
87998
  const endRow = start.row + allRows.length - 1;
88398
87999
  const endCol = start.col + headers.length - 1;
88399
- const rangeA1 = `${toA1(start.row, start.col)}:${toA1(endRow, endCol)}`;
88000
+ const rangeA1 = `${toA12(start.row, start.col)}:${toA12(endRow, endCol)}`;
88400
88001
  await this.tables.add(rangeA1, { name, hasHeaders: true });
88401
88002
  }
88402
88003
  // ===========================================================================
@@ -88639,7 +88240,7 @@ var WorksheetImpl = class {
88639
88240
  case 1:
88640
88241
  return accessor.numberValue;
88641
88242
  case 2:
88642
- return displayStringOrNull(accessor.displayText);
88243
+ return (0, import_core6.displayStringOrNull)(accessor.displayText);
88643
88244
  case 3:
88644
88245
  return accessor.numberValue !== 0;
88645
88246
  case 4: {
@@ -88789,6 +88390,9 @@ var WorksheetImpl = class {
88789
88390
  }
88790
88391
  return this._cellMetadata;
88791
88392
  }
88393
+ get changes() {
88394
+ return this._changes ??= new WorksheetChangesImpl(this.ctx, this.sheetId);
88395
+ }
88792
88396
  get formats() {
88793
88397
  return this._formats ??= new WorksheetFormatsImpl(this.ctx, this.sheetId);
88794
88398
  }
@@ -89260,7 +88864,7 @@ var WorkbookThemeImpl = class {
89260
88864
 
89261
88865
  // ../../kernel/src/api/workbook/workbook-impl.ts
89262
88866
  init_cjs_shims();
89263
- init_disposable2();
88867
+ init_disposable();
89264
88868
  init_errors();
89265
88869
 
89266
88870
  // ../../kernel/src/domain/form-controls/index.ts
@@ -89847,27 +89451,8 @@ var globalRegistry = new FunctionRegistry();
89847
89451
 
89848
89452
  // ../../spreadsheet-utils/src/function-catalog.ts
89849
89453
  init_cjs_shims();
89850
-
89851
- // ../../contracts/src/utils/function-registry.ts
89852
- init_cjs_shims();
89853
- var FunctionCategory = /* @__PURE__ */ ((FunctionCategory2) => {
89854
- FunctionCategory2["MATH"] = "Math";
89855
- FunctionCategory2["STATISTICAL"] = "Statistical";
89856
- FunctionCategory2["TEXT"] = "Text";
89857
- FunctionCategory2["LOGICAL"] = "Logical";
89858
- FunctionCategory2["DATE_TIME"] = "Date & Time";
89859
- FunctionCategory2["LOOKUP"] = "Lookup & Reference";
89860
- FunctionCategory2["FINANCIAL"] = "Financial";
89861
- FunctionCategory2["INFORMATION"] = "Information";
89862
- FunctionCategory2["DATABASE"] = "Database";
89863
- FunctionCategory2["ENGINEERING"] = "Engineering";
89864
- FunctionCategory2["WEB"] = "Web";
89865
- FunctionCategory2["TESTING"] = "Testing";
89866
- return FunctionCategory2;
89867
- })(FunctionCategory || {});
89868
-
89869
- // ../../spreadsheet-utils/src/function-catalog.ts
89870
- var C = FunctionCategory;
89454
+ var import_function_registry = require("@mog-sdk/spreadsheet-contracts/utils/function-registry");
89455
+ var C = import_function_registry.FunctionCategory;
89871
89456
  var INLINE_FUNCTIONS = [
89872
89457
  // Aggregates
89873
89458
  ["SUM", C.MATH, "Adds all numbers in a range of cells", 1, -1],
@@ -90733,7 +90318,7 @@ function convertToFunctionInfo(metadata) {
90733
90318
 
90734
90319
  // ../../kernel/src/api/workbook/viewport.ts
90735
90320
  init_cjs_shims();
90736
- init_disposable2();
90321
+ init_disposable();
90737
90322
  var regionCounter = 0;
90738
90323
  var ViewportRegionImpl = class extends DisposableBase {
90739
90324
  constructor(sheetId, bounds, computeBridge, viewportId) {
@@ -90787,7 +90372,7 @@ var WorkbookViewportImpl = class {
90787
90372
  };
90788
90373
 
90789
90374
  // ../../kernel/src/api/workbook/workbook-impl.ts
90790
- init_rendering();
90375
+ var import_rendering2 = require("@mog-sdk/spreadsheet-contracts/rendering");
90791
90376
  var API_EVENT_TO_INTERNAL = {
90792
90377
  cellChanged: "cell:changed",
90793
90378
  rangeChanged: "range:changed",
@@ -91122,6 +90707,34 @@ var WorkbookImpl = class {
91122
90707
  calculationSettings: calcSettings
91123
90708
  });
91124
90709
  }
90710
+ async getIterativeCalculation() {
90711
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90712
+ return settings.calculationSettings?.enableIterativeCalculation ?? false;
90713
+ }
90714
+ async setIterativeCalculation(enabled) {
90715
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90716
+ const calcSettings = {
90717
+ ...settings.calculationSettings ?? {},
90718
+ enableIterativeCalculation: enabled
90719
+ };
90720
+ await this.ctx.computeBridge.patchWorkbookSettings({
90721
+ calculationSettings: calcSettings
90722
+ });
90723
+ }
90724
+ async setMaxIterations(n) {
90725
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90726
+ const calcSettings = { ...settings.calculationSettings ?? {}, maxIterations: n };
90727
+ await this.ctx.computeBridge.patchWorkbookSettings({
90728
+ calculationSettings: calcSettings
90729
+ });
90730
+ }
90731
+ async setConvergenceThreshold(threshold) {
90732
+ const settings = await this.ctx.computeBridge.getWorkbookSettings();
90733
+ const calcSettings = { ...settings.calculationSettings ?? {}, maxChange: threshold };
90734
+ await this.ctx.computeBridge.patchWorkbookSettings({
90735
+ calculationSettings: calcSettings
90736
+ });
90737
+ }
91125
90738
  async getUsePrecisionAsDisplayed() {
91126
90739
  const settings = await this.ctx.computeBridge.getWorkbookSettings();
91127
90740
  return !(settings.calculationSettings?.fullPrecision ?? true);
@@ -91281,7 +90894,7 @@ var WorkbookImpl = class {
91281
90894
  // Utilities (sync)
91282
90895
  // ===========================================================================
91283
90896
  indexToAddress(row, col) {
91284
- return toA1(row, col);
90897
+ return toA12(row, col);
91285
90898
  }
91286
90899
  addressToIndex(address) {
91287
90900
  const parsed = parseCellAddress(address);
@@ -91443,7 +91056,7 @@ var WorkbookImpl = class {
91443
91056
  get theme() {
91444
91057
  return this._theme ??= new WorkbookThemeImpl(
91445
91058
  { ctx: this.ctx, eventBus: this.eventBus },
91446
- DEFAULT_CHROME_THEME
91059
+ import_rendering2.DEFAULT_CHROME_THEME
91447
91060
  );
91448
91061
  }
91449
91062
  get viewport() {
@@ -91533,6 +91146,7 @@ var api_spec_default = {
91533
91146
  },
91534
91147
  ws: {
91535
91148
  smartArt: "WorksheetSmartArt",
91149
+ changes: "WorksheetChanges",
91536
91150
  formats: "WorksheetFormats",
91537
91151
  layout: "WorksheetLayout",
91538
91152
  view: "WorksheetView",
@@ -91644,6 +91258,26 @@ var api_spec_default = {
91644
91258
  docstring: "Set the calculation mode.\nConvenience mutator \u2014 patches `calculationSettings.calcMode`.",
91645
91259
  usedTypes: []
91646
91260
  },
91261
+ getIterativeCalculation: {
91262
+ signature: "getIterativeCalculation(): Promise<boolean>;",
91263
+ docstring: "Get whether iterative calculation is enabled for circular references.\nConvenience accessor \u2014 equivalent to `(await getSettings()).calculationSettings.enableIterativeCalculation`.",
91264
+ usedTypes: []
91265
+ },
91266
+ setIterativeCalculation: {
91267
+ signature: "setIterativeCalculation(enabled: boolean): Promise<void>;",
91268
+ docstring: "Set whether iterative calculation is enabled for circular references.\nConvenience mutator \u2014 patches `calculationSettings.enableIterativeCalculation`.",
91269
+ usedTypes: []
91270
+ },
91271
+ setMaxIterations: {
91272
+ signature: "setMaxIterations(n: number): Promise<void>;",
91273
+ docstring: "Set the maximum number of iterations for iterative calculation.\nConvenience mutator \u2014 patches `calculationSettings.maxIterations`.",
91274
+ usedTypes: []
91275
+ },
91276
+ setConvergenceThreshold: {
91277
+ signature: "setConvergenceThreshold(threshold: number): Promise<void>;",
91278
+ docstring: "Set the convergence threshold (maximum change) for iterative calculation.\nConvenience mutator \u2014 patches `calculationSettings.maxChange`.",
91279
+ usedTypes: []
91280
+ },
91647
91281
  getUsePrecisionAsDisplayed: {
91648
91282
  signature: "getUsePrecisionAsDisplayed(): Promise<boolean>;",
91649
91283
  docstring: "Whether to use displayed precision instead of full (15-digit) precision.\nConvenience accessor \u2014 inverted from `calculationSettings.fullPrecision`.",
@@ -91855,18 +91489,21 @@ var api_spec_default = {
91855
91489
  usedTypes: []
91856
91490
  },
91857
91491
  clearData: {
91858
- signature: "clearData(range: string): Promise<void>;",
91492
+ signature: "clearData(range: string): Promise<ClearResult>;",
91859
91493
  docstring: 'Clear all cell data (values and formulas) in a range (A1 notation, e.g. "A1:C3").',
91860
- usedTypes: []
91494
+ usedTypes: [
91495
+ "ClearResult"
91496
+ ]
91861
91497
  },
91862
91498
  clear: {
91863
- signature: "clear(range: string, applyTo?: ClearApplyTo): Promise<void>;",
91499
+ signature: "clear(range: string, applyTo?: ClearApplyTo): Promise<ClearResult>;",
91864
91500
  docstring: `Unified clear with mode selection (OfficeJS Range.clear equivalent).
91865
91501
 
91866
91502
  @param range - A1 range string (e.g. "A1:C3")
91867
91503
  @param applyTo - What to clear: 'all' (default), 'contents', 'formats', 'hyperlinks'`,
91868
91504
  usedTypes: [
91869
- "ClearApplyTo"
91505
+ "ClearApplyTo",
91506
+ "ClearResult"
91870
91507
  ]
91871
91508
  },
91872
91509
  getValue: {
@@ -92745,21 +92382,36 @@ var api_spec_default = {
92745
92382
  }
92746
92383
  }
92747
92384
  },
92385
+ WorksheetChanges: {
92386
+ docstring: "Sub-API for opt-in change tracking on a worksheet.",
92387
+ functions: {
92388
+ track: {
92389
+ signature: "track(options?: ChangeTrackOptions): ChangeTracker;",
92390
+ 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",
92391
+ usedTypes: [
92392
+ "ChangeTrackOptions",
92393
+ "ChangeTracker"
92394
+ ]
92395
+ }
92396
+ }
92397
+ },
92748
92398
  WorksheetFormats: {
92749
92399
  docstring: "Sub-API for cell formatting operations on a worksheet.",
92750
92400
  functions: {
92751
92401
  set: {
92752
- signature: "set(address: string, format: CellFormat): Promise<void>;",
92402
+ signature: "set(address: string, format: CellFormat): Promise<FormatChangeResult>;",
92753
92403
  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',
92754
92404
  usedTypes: [
92755
- "CellFormat"
92405
+ "CellFormat",
92406
+ "FormatChangeResult"
92756
92407
  ]
92757
92408
  },
92758
92409
  setRange: {
92759
- signature: "setRange(range: string, format: CellFormat): Promise<void>;",
92410
+ signature: "setRange(range: string, format: CellFormat): Promise<FormatChangeResult>;",
92760
92411
  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',
92761
92412
  usedTypes: [
92762
- "CellFormat"
92413
+ "CellFormat",
92414
+ "FormatChangeResult"
92763
92415
  ]
92764
92416
  },
92765
92417
  setRanges: {
@@ -92776,10 +92428,10 @@ var api_spec_default = {
92776
92428
  usedTypes: []
92777
92429
  },
92778
92430
  get: {
92779
- signature: "get(address: string): Promise<CellFormat | null>;",
92780
- 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",
92431
+ signature: "get(address: string): Promise<ResolvedCellFormat>;",
92432
+ 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)",
92781
92433
  usedTypes: [
92782
- "CellFormat"
92434
+ "ResolvedCellFormat"
92783
92435
  ]
92784
92436
  },
92785
92437
  adjustIndent: {
@@ -93588,7 +93240,7 @@ var api_spec_default = {
93588
93240
  usedTypes: []
93589
93241
  },
93590
93242
  setCriteria: {
93591
- signature: "setCriteria(\n filterId: string,\n col: number,\n criteria: ColumnFilterCriteria,\n ): Promise<void>;",
93243
+ signature: "setCriteria(filterId: string, col: number, criteria: ColumnFilterCriteria): Promise<void>;",
93592
93244
  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",
93593
93245
  usedTypes: [
93594
93246
  "ColumnFilterCriteria"
@@ -94906,6 +94558,11 @@ var api_spec_default = {
94906
94558
  definition: "'standard' | 'stacked' | 'percentStacked'",
94907
94559
  docstring: ""
94908
94560
  },
94561
+ AutoFillChange: {
94562
+ name: "AutoFillChange",
94563
+ definition: "{\n row: number;\n col: number;\n type: 'value' | 'formula' | 'format' | 'clear';\n}",
94564
+ docstring: "A single cell change produced by the fill engine."
94565
+ },
94909
94566
  AutoFillMode: {
94910
94567
  name: "AutoFillMode",
94911
94568
  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'",
@@ -94913,7 +94570,7 @@ var api_spec_default = {
94913
94570
  },
94914
94571
  AutoFillResult: {
94915
94572
  name: "AutoFillResult",
94916
- 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}",
94573
+ 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}",
94917
94574
  docstring: "Result from autoFill() \u2014 summary of what the fill engine did."
94918
94575
  },
94919
94576
  AutoFillWarning: {
@@ -95260,6 +94917,37 @@ Example: { ignoreError: true } to suppress error indicators. */
95260
94917
  definition: "{\n /** If true, value is treated as a formula (prefixed with =) */\n asFormula?: boolean;\n}",
95261
94918
  docstring: "Options controlling how a cell value is interpreted when written."
95262
94919
  },
94920
+ ChangeOrigin: {
94921
+ name: "ChangeOrigin",
94922
+ definition: "'direct' | 'cascade' | 'remote'",
94923
+ docstring: "Origin of a change: direct write, formula recalculation, or remote collaborator."
94924
+ },
94925
+ ChangeRecord: {
94926
+ name: "ChangeRecord",
94927
+ definition: `{
94928
+ /** Cell address in A1 notation (e.g. "B1"). */
94929
+ address: string;
94930
+ /** 0-based row index. */
94931
+ row: number;
94932
+ /** 0-based column index. */
94933
+ col: number;
94934
+ /** What caused this change. */
94935
+ origin: ChangeOrigin;
94936
+ /** Type of change. */
94937
+ type: 'modified';
94938
+ }`,
94939
+ 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)"
94940
+ },
94941
+ ChangeTrackOptions: {
94942
+ name: "ChangeTrackOptions",
94943
+ 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}',
94944
+ docstring: "Options for creating a change tracker."
94945
+ },
94946
+ ChangeTracker: {
94947
+ name: "ChangeTracker",
94948
+ 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}",
94949
+ docstring: "A handle that accumulates change records across mutations."
94950
+ },
95263
94951
  Chart: {
95264
94952
  name: "Chart",
95265
94953
  definition: "{\n id: string;\n sheetId?: string;\n createdAt?: number;\n updatedAt?: number;\n}",
@@ -95394,6 +95082,11 @@ that are stored on the chart but not part of the core config schema. */
95394
95082
  definition: "'all' | 'contents' | 'formats' | 'hyperlinks'",
95395
95083
  docstring: "Determines which aspects of a range to clear.\nMatches OfficeJS Excel.ClearApplyTo enum."
95396
95084
  },
95085
+ ClearResult: {
95086
+ name: "ClearResult",
95087
+ definition: "{\n /** Number of cells in the cleared range. */\n cellCount: number;\n}",
95088
+ docstring: "Confirmation returned by clearData() and clear()."
95089
+ },
95397
95090
  CodeResult: {
95398
95091
  name: "CodeResult",
95399
95092
  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}",
@@ -95607,6 +95300,11 @@ Used in condition filters where users specify rules like
95607
95300
  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'",
95608
95301
  docstring: "Type discriminator for floating objects. Superset of Rust FloatingObjectKind (12 variants) + legacy TS-only 'wordart'."
95609
95302
  },
95303
+ FormatChangeResult: {
95304
+ name: "FormatChangeResult",
95305
+ definition: "{\n /** Number of cells whose formatting was changed */\n cellCount: number;\n}",
95306
+ docstring: "Result of a format set/setRange operation."
95307
+ },
95610
95308
  FormatEntry: {
95611
95309
  name: "FormatEntry",
95612
95310
  definition: '{\n /** Cell value descriptor */\n value: { type: string; value?: unknown };\n /** Number format code (e.g., "#,##0.00") */\n formatCode: string;\n}',
@@ -95975,6 +95673,11 @@ Used in condition filters where users specify rules like
95975
95673
  definition: "{\n /** Number of duplicate rows removed */\n removedCount: number;\n /** Number of unique rows remaining */\n remainingCount: number;\n}",
95976
95674
  docstring: "Result of a remove-duplicates operation."
95977
95675
  },
95676
+ ResolvedCellFormat: {
95677
+ name: "ResolvedCellFormat",
95678
+ definition: "{\n [K in keyof CellFormat]-?: CellFormat[K] | null;\n}",
95679
+ docstring: "Dense cell format where every property is explicitly present (null when unset). Returned by formats.get()."
95680
+ },
95978
95681
  RichTextSegment: {
95979
95682
  name: "RichTextSegment",
95980
95683
  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}",
@@ -96055,7 +95758,7 @@ Used in condition filters where users specify rules like
96055
95758
  },
96056
95759
  SetCellsResult: {
96057
95760
  name: "SetCellsResult",
96058
- 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}",
95761
+ 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}",
96059
95762
  docstring: "Result of a bulk setCells() operation."
96060
95763
  },
96061
95764
  ShadowAlignment: {
@@ -96459,8 +96162,7 @@ Used in condition filters where users specify rules like
96459
96162
  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}",
96460
96163
  docstring: "A summary snapshot of the entire workbook state."
96461
96164
  }
96462
- },
96463
- generated: "2026-04-02T22:03:24.772Z"
96165
+ }
96464
96166
  };
96465
96167
 
96466
96168
  // src/api-describe.ts