{
  "subApis": {
    "wb": {
      "sheets": "WorkbookSheets",
      "slicers": "WorkbookSlicers",
      "slicerStyles": "WorkbookSlicerStyles",
      "timelineStyles": "WorkbookTimelineStyles",
      "pivotTableStyles": "WorkbookPivotTableStyles",
      "functions": "WorkbookFunctions",
      "names": "WorkbookNames",
      "scenarios": "WorkbookScenarios",
      "history": "WorkbookHistory",
      "tableStyles": "WorkbookTableStyles",
      "cellStyles": "WorkbookCellStyles",
      "properties": "WorkbookProperties",
      "protection": "WorkbookProtection",
      "security": "WorkbookSecurity",
      "notifications": "WorkbookNotifications",
      "theme": "WorkbookTheme",
      "viewport": "WorkbookViewport",
      "changes": "WorkbookChanges",
      "links": "WorkbookLinks"
    },
    "ws": {
      "cells": "WorksheetCellsAccessor",
      "whatIf": "WorksheetWhatIf",
      "smartArt": "WorksheetSmartArt",
      "changes": "WorksheetChanges",
      "formats": "WorksheetFormats",
      "layout": "WorksheetLayout",
      "view": "WorksheetView",
      "structure": "WorksheetStructure",
      "charts": "WorksheetCharts",
      "objects": "WorksheetObjectCollection",
      "shapes": "WorksheetShapeCollection",
      "pictures": "WorksheetPictureCollection",
      "textBoxes": "WorksheetTextBoxCollection",
      "drawings": "WorksheetDrawingCollection",
      "equations": "WorksheetEquationCollection",
      "wordArt": "WorksheetWordArtCollection",
      "connectors": "WorksheetConnectorCollection",
      "filters": "WorksheetFilters",
      "formControls": "WorksheetFormControls",
      "conditionalFormats": "WorksheetConditionalFormatting",
      "validations": "WorksheetValidation",
      "tables": "WorksheetTables",
      "pivots": "WorksheetPivots",
      "slicers": "WorksheetSlicers",
      "sparklines": "WorksheetSparklines",
      "comments": "WorksheetComments",
      "customProperties": "WorksheetCustomProperties",
      "hyperlinks": "WorksheetHyperlinks",
      "outline": "WorksheetOutline",
      "protection": "WorksheetProtection",
      "print": "WorksheetPrint",
      "settings": "WorksheetSettings",
      "bindings": "WorksheetBindings",
      "names": "WorksheetNames",
      "styles": "WorksheetStyles"
    }
  },
  "interfaces": {
    "Workbook": {
      "docstring": "",
      "functions": {
        "markClean": {
          "signature": "markClean(): void;",
          "docstring": "Reset the dirty flag (call after a successful save).",
          "usedTypes": []
        },
        "getSheet": {
          "signature": "getSheet(name: string): Promise<Worksheet>;",
          "docstring": "Get a sheet by name (case-insensitive). ASYNC — resolves name via Rust.\n\nThis is the primary sheet accessor for agents, LLMs, and app code.\nFor internal code that already has a SheetId, use `getSheetById()`.",
          "usedTypes": []
        },
        "getSheetById": {
          "signature": "getSheetById(sheetId: SheetId): Worksheet;",
          "docstring": "Get a sheet by internal SheetId. SYNC — no IPC needed. Throws KernelError if not found.",
          "usedTypes": [
            "SheetId"
          ]
        },
        "findSheet": {
          "signature": "findSheet(name: string): Promise<Worksheet | null>;",
          "docstring": "Find a worksheet by name (case-insensitive), returning null if not found.\nNon-throwing alternative to {@link getSheet}.\n\n@param name - Sheet name (case-insensitive)\n@returns The worksheet, or null if no sheet with that name exists",
          "usedTypes": []
        },
        "getSheetByIndex": {
          "signature": "getSheetByIndex(index: number): Promise<Worksheet>;",
          "docstring": "Get a sheet by 0-based index. ASYNC — resolves index via Rust.",
          "usedTypes": []
        },
        "getOrCreateSheet": {
          "signature": "getOrCreateSheet(name: string): Promise<{\n        sheet: Worksheet;\n        created: boolean;\n    }>;",
          "docstring": "Get a sheet by name, creating it if it doesn't exist.\n\n@param name - Sheet name (case-insensitive lookup)\n@returns The sheet and whether it was newly created",
          "usedTypes": []
        },
        "getSheets": {
          "signature": "getSheets(): Promise<Worksheet[]>;",
          "docstring": "Get all worksheets in display order. ASYNC — resolves each sheet by name.",
          "usedTypes": []
        },
        "getSheetCount": {
          "signature": "getSheetCount(): Promise<number>;",
          "docstring": "Get the count of sheets. Convenience wrapper around sheetCount property.",
          "usedTypes": []
        },
        "getSheetNames": {
          "signature": "getSheetNames(): Promise<string[]>;",
          "docstring": "Get all sheet names in display order. Convenience wrapper around sheetNames property.",
          "usedTypes": []
        },
        "undoGroup": {
          "signature": "undoGroup<T = void>(fn: (wb: Workbook) => Promise<T>): Promise<T>;",
          "docstring": "Execute a group of operations as a single undo step.\n\nNOT transactional: if an operation throws, prior writes in the group remain committed.\nEach mutation within the group still triggers its own recalc pass.",
          "usedTypes": []
        },
        "batch": {
          "signature": "batch<T = void>(label: string, fn: (wb: Workbook) => Promise<T>): Promise<T>;",
          "docstring": "Execute a group of operations as a single undo step with a label.\n\nLike `undoGroup`, but attaches a human-readable label to the undo entry\n(e.g. \"Import data\"). NOT transactional: partial writes remain committed\nif fn throws. Each mutation still triggers its own recalc pass.",
          "usedTypes": []
        },
        "createCheckpoint": {
          "signature": "createCheckpoint(label?: string): string;",
          "docstring": "Create a named checkpoint (version snapshot). Returns the checkpoint ID.",
          "usedTypes": []
        },
        "restoreCheckpoint": {
          "signature": "restoreCheckpoint(id: string): Promise<void>;",
          "docstring": "Restore the workbook to a previously saved checkpoint.",
          "usedTypes": []
        },
        "listCheckpoints": {
          "signature": "listCheckpoints(): CheckpointInfo[];",
          "docstring": "List all saved checkpoints.",
          "usedTypes": [
            "CheckpointInfo"
          ]
        },
        "calculate": {
          "signature": "calculate(options?: CalculateOptions): Promise<CalculateResult>;",
          "docstring": "Trigger recalculation of formulas.\n\nFor circular references (common in financial models — debt schedules, tax shields),\nenable iterative calculation:\n\n  await wb.calculate({ iterative: { maxIterations: 100, maxChange: 0.001 } });\n\nReturns convergence metadata (hasCircularRefs, converged, iterations, maxDelta)\nplus `recomputedCount` — the number of formula cells recomputed during this call.\n\n@param options - Calculation options.",
          "usedTypes": [
            "CalculateOptions",
            "CalculateResult"
          ]
        },
        "getCalculationMode": {
          "signature": "getCalculationMode(): Promise<'auto' | 'autoNoTable' | 'manual'>;",
          "docstring": "Get the current calculation mode (auto/manual/autoNoTable).\nConvenience accessor — equivalent to `(await getSettings()).calculationSettings.calcMode`.",
          "usedTypes": []
        },
        "setCalculationMode": {
          "signature": "setCalculationMode(mode: 'auto' | 'autoNoTable' | 'manual'): Promise<void>;",
          "docstring": "Set the calculation mode.\nConvenience mutator — patches `calculationSettings.calcMode`.",
          "usedTypes": []
        },
        "getIterativeCalculation": {
          "signature": "getIterativeCalculation(): Promise<boolean>;",
          "docstring": "Get whether iterative calculation is enabled for circular references.\nConvenience accessor — equivalent to `(await getSettings()).calculationSettings.enableIterativeCalculation`.",
          "usedTypes": []
        },
        "getUsePrecisionAsDisplayed": {
          "signature": "getUsePrecisionAsDisplayed(): Promise<boolean>;",
          "docstring": "Whether to use displayed precision instead of full (15-digit) precision.\nConvenience accessor — inverted from `calculationSettings.fullPrecision`.",
          "usedTypes": []
        },
        "setUsePrecisionAsDisplayed": {
          "signature": "setUsePrecisionAsDisplayed(value: boolean): Promise<void>;",
          "docstring": "Set whether to use displayed precision.\nConvenience mutator — inverts and patches `calculationSettings.fullPrecision`.",
          "usedTypes": []
        },
        "on": {
          "signature": "on(event: string, handler: (event: unknown) => void): CallableDisposable;",
          "docstring": "Subscribe to an arbitrary event string. Handler receives unknown payload.",
          "usedTypes": [
            "CallableDisposable"
          ]
        },
        "executeCode": {
          "signature": "executeCode(code: string, options?: ExecuteOptions): Promise<CodeResult>;",
          "docstring": "Execute TypeScript/JavaScript code in the spreadsheet sandbox.",
          "usedTypes": [
            "ExecuteOptions",
            "CodeResult"
          ]
        },
        "getWorkbookSnapshot": {
          "signature": "getWorkbookSnapshot(): Promise<WorkbookSnapshot>;",
          "docstring": "Get a summary snapshot of the entire workbook.",
          "usedTypes": [
            "WorkbookSnapshot"
          ]
        },
        "getFunctionCatalog": {
          "signature": "getFunctionCatalog(): FunctionInfo[];",
          "docstring": "Get the catalog of all available spreadsheet functions.",
          "usedTypes": [
            "FunctionInfo"
          ]
        },
        "getFunctionInfo": {
          "signature": "getFunctionInfo(name: string): FunctionInfo | null;",
          "docstring": "Get detailed info about a specific function.",
          "usedTypes": [
            "FunctionInfo"
          ]
        },
        "describeRanges": {
          "signature": "describeRanges(requests: SheetRangeRequest[], includeStyle?: boolean): Promise<SheetRangeDescribeResult[]>;",
          "docstring": "Describe multiple ranges across multiple sheets in a single IPC call.\nEach entry returns the same LLM-formatted output as ws.describeRange().",
          "usedTypes": [
            "SheetRangeRequest",
            "SheetRangeDescribeResult"
          ]
        },
        "toXlsx": {
          "signature": "toXlsx(): Promise<Uint8Array>;",
          "docstring": "Export the workbook as XLSX binary data.",
          "usedTypes": []
        },
        "insertWorksheets": {
          "signature": "insertWorksheets(data: string | Uint8Array, options?: InsertWorksheetOptions): Promise<string[]>;",
          "docstring": "Import sheets from XLSX data.\nAccepts base64-encoded string or raw Uint8Array.\nReturns the names of the inserted sheets (may be deduped if names collide).",
          "usedTypes": [
            "InsertWorksheetOptions"
          ]
        },
        "save": {
          "signature": "save(path: string): Promise<Uint8Array>;",
          "docstring": "Save the workbook to a file path or buffer. Marks the workbook as clean.",
          "usedTypes": []
        },
        "captureScreenshot": {
          "signature": "captureScreenshot(sheet: Worksheet | string, range: string, options?: ScreenshotOptions): Promise<Uint8Array>;",
          "docstring": "Capture a PNG screenshot of a cell range.\n\n@param sheet - Sheet name (e.g. \"Sheet1\") or Worksheet instance\n@param range - A1-notation cell range (e.g. \"A1:G10\")\n@param options - Rendering options (DPR, headers, gridlines, max dimensions)\n@returns PNG image as a Buffer",
          "usedTypes": [
            "ScreenshotOptions"
          ]
        },
        "copyRangeFrom": {
          "signature": "copyRangeFrom(source: Workbook, fromRange: string, toRange: string, options?: {\n        fromSheet?: string | Worksheet;\n        toSheet?: string | Worksheet;\n    }): Promise<void>;",
          "docstring": "Copy a range from another workbook into this workbook.",
          "usedTypes": []
        },
        "indexToAddress": {
          "signature": "indexToAddress(row: number, col: number): string;",
          "docstring": "Convert row/col to A1 address: (0, 0) -> \"A1\"",
          "usedTypes": []
        },
        "addressToIndex": {
          "signature": "addressToIndex(address: string): {\n        row: number;\n        col: number;\n    };",
          "docstring": "Convert A1 address to row/col: \"A1\" -> { row: 0, col: 0 }",
          "usedTypes": []
        },
        "union": {
          "signature": "union(...ranges: string[]): string;",
          "docstring": "Combine multiple range addresses into a single comma-separated address.\nEquivalent to spreadsheet special-cell typeApplication.union().",
          "usedTypes": []
        },
        "getCultureInfo": {
          "signature": "getCultureInfo(): Promise<CultureInfo>;",
          "docstring": "Get full CultureInfo for the workbook's current culture setting.\nResolves the `culture` IETF tag (e.g. 'de-DE') into a complete CultureInfo\nwith number/date/currency formatting details.",
          "usedTypes": [
            "CultureInfo"
          ]
        },
        "getDecimalSeparator": {
          "signature": "getDecimalSeparator(): Promise<string>;",
          "docstring": "Get the decimal separator for the current culture (e.g. '.' or ',').",
          "usedTypes": []
        },
        "getThousandsSeparator": {
          "signature": "getThousandsSeparator(): Promise<string>;",
          "docstring": "Get the thousands separator for the current culture (e.g. ',' or '.').",
          "usedTypes": []
        },
        "searchAllSheets": {
          "signature": "searchAllSheets(patterns: string[], options?: SearchOptions): Promise<Array<SearchResult & {\n        sheetName: string;\n    }>>;",
          "docstring": "Search all sheets for cells matching regex patterns (single IPC call).",
          "usedTypes": [
            "SearchOptions",
            "SearchResult"
          ]
        },
        "getChartDataPointTrack": {
          "signature": "getChartDataPointTrack(): Promise<boolean>;",
          "docstring": "Get whether chart data points track cell movement. Workbook chart data point tracking..",
          "usedTypes": []
        },
        "setChartDataPointTrack": {
          "signature": "setChartDataPointTrack(value: boolean): Promise<void>;",
          "docstring": "Set whether chart data points track cell movement.",
          "usedTypes": []
        },
        "getSettings": {
          "signature": "getSettings(): Promise<WorkbookSettings>;",
          "docstring": "Get workbook-level settings.",
          "usedTypes": [
            "WorkbookSettings"
          ]
        },
        "setSettings": {
          "signature": "setSettings(updates: Partial<WorkbookSettings>): Promise<void>;",
          "docstring": "Update workbook-level settings.",
          "usedTypes": [
            "WorkbookSettings"
          ]
        },
        "getCustomLists": {
          "signature": "getCustomLists(): Promise<readonly CustomList[]>;",
          "docstring": "Get workbook-level custom fill/sort lists.\n\nReturns the complete catalog: immutable built-in lists followed by\nworkbook-scoped user-defined lists.",
          "usedTypes": [
            "CustomList"
          ]
        },
        "addCustomList": {
          "signature": "addCustomList(input: WorkbookCustomListInput): Promise<CustomList>;",
          "docstring": "Add a user-defined custom fill/sort list.",
          "usedTypes": [
            "WorkbookCustomListInput",
            "CustomList"
          ]
        },
        "updateCustomList": {
          "signature": "updateCustomList(id: string, updates: WorkbookCustomListUpdate): Promise<boolean>;",
          "docstring": "Update a user-defined custom fill/sort list.\n\nReturns false when the list does not exist or is built-in.",
          "usedTypes": [
            "WorkbookCustomListUpdate"
          ]
        },
        "deleteCustomList": {
          "signature": "deleteCustomList(id: string): Promise<boolean>;",
          "docstring": "Delete a user-defined custom fill/sort list.\n\nReturns false when the list does not exist or is built-in.",
          "usedTypes": []
        },
        "setCustomLists": {
          "signature": "setCustomLists(lists: readonly WorkbookCustomListInput[]): Promise<void>;",
          "docstring": "Replace all user-defined custom fill/sort lists.\n\nBuilt-in lists are code-owned and are never persisted through this method.",
          "usedTypes": [
            "WorkbookCustomListInput"
          ]
        },
        "getCustomSetting": {
          "signature": "getCustomSetting(key: string): Promise<string | null>;",
          "docstring": "Get a custom setting value by key. Returns null if not found.",
          "usedTypes": []
        },
        "setCustomSetting": {
          "signature": "setCustomSetting(key: string, value: string): Promise<void>;",
          "docstring": "Set a custom setting value.",
          "usedTypes": []
        },
        "deleteCustomSetting": {
          "signature": "deleteCustomSetting(key: string): Promise<void>;",
          "docstring": "Delete a custom setting by key.",
          "usedTypes": []
        },
        "listCustomSettings": {
          "signature": "listCustomSettings(): Promise<Array<{\n        key: string;\n        value: string;\n    }>>;",
          "docstring": "List all custom settings as key-value pairs.",
          "usedTypes": []
        },
        "getCustomSettingCount": {
          "signature": "getCustomSettingCount(): Promise<number>;",
          "docstring": "Get the number of custom settings.",
          "usedTypes": []
        },
        "close": {
          "signature": "close(closeBehavior?: 'save' | 'skipSave'): Promise<void>;",
          "docstring": "Close the workbook with optional save behavior.\n@param closeBehavior - 'save' exports snapshot before disposing, 'skipSave' disposes immediately (default: 'skipSave')",
          "usedTypes": []
        },
        "dispose": {
          "signature": "dispose(): void;",
          "docstring": "Dispose of the workbook and release resources.\nIf this workbook was created via `DocumentHandle.workbook()`, disposing also\ncleans up the underlying DocumentHandle (and vice versa).",
          "usedTypes": []
        },
        "[Symbol.asyncDispose]": {
          "signature": "[Symbol.asyncDispose](): Promise<void>;",
          "docstring": "Async dispose for TC39 Explicit Resource Management.\n\n@example\n```typescript\nawait using wb = await createWorkbook();\n```",
          "usedTypes": []
        },
        "getActiveCell": {
          "signature": "getActiveCell(): {\n        sheetId: string;\n        row: number;\n        col: number;\n        address: string;\n    } | null;",
          "docstring": "Active cell. Returns null in headless/no-UI contexts.",
          "usedTypes": []
        },
        "getSelectedRanges": {
          "signature": "getSelectedRanges(): string[];",
          "docstring": "Currently selected range(s) as A1 address strings. Returns [] in headless.",
          "usedTypes": []
        },
        "getSelectedRange": {
          "signature": "getSelectedRange(): string | null;",
          "docstring": "Primary selected range. Returns null in headless.",
          "usedTypes": []
        },
        "getActiveChart": {
          "signature": "getActiveChart(): string | null;",
          "docstring": "Active chart object ID, or null.",
          "usedTypes": []
        },
        "getActiveShape": {
          "signature": "getActiveShape(): string | null;",
          "docstring": "Active shape object ID, or null.",
          "usedTypes": []
        },
        "getActiveSlicer": {
          "signature": "getActiveSlicer(): string | null;",
          "docstring": "Active slicer object ID, or null.",
          "usedTypes": []
        },
        "setActivePrincipal": {
          "signature": "setActivePrincipal(principal: string[] | AccessPrincipal | null): Promise<void>;",
          "docstring": "Set the active principal for this session. Pass `null` (or an empty\ntag list) to clear.\n\nSemantics tied to document state, not session state: when the\ndocument has no policies, this is effectively a no-op for access\ndecisions (the gated delegate's fast path skips the principal\nentirely). Once any policy exists, `null` means anonymous — a\ncaller that never set a principal is denied, not owner.\n\nAccepts either a flat tag list or an `AccessPrincipal` envelope for\nsymmetry with `explainAccess` / `getEffectiveAccess`.",
          "usedTypes": [
            "AccessPrincipal"
          ]
        },
        "activePrincipal": {
          "signature": "activePrincipal(): Promise<AccessPrincipal | null>;",
          "docstring": "Current active principal, or `null` if none is set.",
          "usedTypes": [
            "AccessPrincipal"
          ]
        },
        "securityActive": {
          "signature": "securityActive(): Promise<boolean>;",
          "docstring": "Whether access-control enforcement is currently active on this\ndocument. `false` when the policy set is empty. SDKs use this to\nwarn users who set a principal on a doc that has no policies (\"you\nset a principal but nothing will be enforced\").",
          "usedTypes": []
        },
        "makePrincipal": {
          "signature": "makePrincipal(tags: string[]): Promise<AccessPrincipal>;",
          "docstring": "Canonicalize a tag list through the engine's intern pool and return\nthe canonical (sorted + deduped) form. Primary purpose is to\npre-warm the pool so the next `setActivePrincipal` with the same\ntag set hits an existing slab — matrix-cache pointer identity stays\nsound on the first call post-swap.",
          "usedTypes": [
            "AccessPrincipal"
          ]
        }
      }
    },
    "Worksheet": {
      "docstring": "",
      "functions": {
        "getName": {
          "signature": "getName(): Promise<string>;",
          "docstring": "Get the sheet name. Async — reads from Rust via IPC (cached after first call).",
          "usedTypes": []
        },
        "setName": {
          "signature": "setName(name: string): Promise<void>;",
          "docstring": "Set the sheet name.",
          "usedTypes": []
        },
        "getIndex": {
          "signature": "getIndex(): number;",
          "docstring": "Get the 0-based sheet index.",
          "usedTypes": []
        },
        "getSheetId": {
          "signature": "getSheetId(): SheetId;",
          "docstring": "Get the internal sheet ID.\n@deprecated Use the `sheetId` property instead.",
          "usedTypes": [
            "SheetId"
          ]
        },
        "setCell": {
          "signature": "setCell(address: string, value: CellValuePrimitive | Date, options?: CellWriteOptions): Promise<void>;",
          "docstring": "Set a cell value by A1 address.\nString values starting with \"=\" are treated as formulas (e.g. \"=SUM(B1:B10)\").\nUse `options.asFormula` to force formula interpretation without the \"=\" prefix.\nUse `options.literal` to store strings starting with \"=\" as literal text.\nDate values are automatically converted via setDateValue().",
          "usedTypes": [
            "CellValuePrimitive",
            "CellWriteOptions"
          ]
        },
        "setDateValue": {
          "signature": "setDateValue(row: number, col: number, year: number, month: number, day: number): Promise<void>;",
          "docstring": "Set a calendar date in a cell, automatically applying a date format.\n\nFour input forms (in order of preference for unambiguous semantics):\n\n1. **Calendar parts** — `setDateValue(row, col, year, month, day)` /\n   `setDateValue(addr, year, month, day)`. No `Date`, no timezone — the\n   calendar value is the input.\n2. **ISO calendar string** — `setDateValue(row, col, '2026-03-01')` /\n   `setDateValue(addr, '2026-03-01')`. No `Date`, no timezone.\n3. **`Date` instant** — `setDateValue(row, col, date)` /\n   `setDateValue(addr, date)`. Resolved against the session's\n   `userTimezone` (set when the workbook was created).\n4. **`Date` instant with explicit override** —\n   `setDateValue(row, col, date, { tz })` / `setDateValue(addr, date, { tz })`.\n   Use when a `Date` should be interpreted in a frame other than the\n   session default.\n\n@see plans/active/ux/datetime/round-1/session-user-timezone.md",
          "usedTypes": []
        },
        "setTimeValue": {
          "signature": "setTimeValue(row: number, col: number, hours: number, minutes: number, seconds: number): Promise<void>;",
          "docstring": "Set a time-of-day in a cell, automatically applying a time format.\n\nThree input forms:\n\n1. **Time parts** — `setTimeValue(row, col, hours, minutes, seconds)` /\n   `setTimeValue(addr, hours, minutes, seconds)`.\n2. **`Date` instant** — `setTimeValue(row, col, date)` /\n   `setTimeValue(addr, date)`. Resolved against the session's\n   `userTimezone`.\n3. **`Date` instant with explicit override** — `setTimeValue(row, col, date, { tz })`.",
          "usedTypes": []
        },
        "getCell": {
          "signature": "getCell(address: string): Promise<CellData>;",
          "docstring": "Get cell data by A1 address.",
          "usedTypes": [
            "CellData"
          ]
        },
        "getRange": {
          "signature": "getRange(range: string): Promise<CellData[][]>;",
          "docstring": "Get a 2D array of cell data for a range (A1 notation).",
          "usedTypes": [
            "CellData"
          ]
        },
        "getRanges": {
          "signature": "getRanges(addresses: string): Promise<CellData[][][]>;",
          "docstring": "Get cell data for multiple ranges at once (spreadsheet special-cell typeWorksheet.getRanges equivalent).\n\n@param addresses - Comma-separated A1-style range addresses (e.g. \"A1:B5,D1:E5,G1\")\n@returns Array of 2D cell data arrays, one per address",
          "usedTypes": [
            "CellData"
          ]
        },
        "setRange": {
          "signature": "setRange(range: string, values: (CellValuePrimitive | Date)[][]): Promise<void>;",
          "docstring": "Set a 2D array of values into a range (A1 notation).\nString values starting with \"=\" are treated as formulas.",
          "usedTypes": [
            "CellValuePrimitive"
          ]
        },
        "setArrayFormula": {
          "signature": "setArrayFormula(range: CellRange, formula: string): Promise<void>;",
          "docstring": "Enter a CSE (`Ctrl+Shift+Enter`) array formula on the given range.\n\nThe formula is stored only on the top-left anchor; covered cells\nare projections of the array result and read-only. Editing any\ncovered cell via `setCell` is rejected by Rust compute-core with\n`ComputeError::PartialArrayWrite`. Tearing down the array formula\nis `clear` / `setCell(anchor, null)` on the anchor.\n\nDistinct from a regular `setCell` of an array-returning formula:\ndynamic-array spills allow blocker-literal writes into spill\nmembers (raise `#SPILL!`), CSE rejects all partial writes.",
          "usedTypes": [
            "CellRange"
          ]
        },
        "clearData": {
          "signature": "clearData(range: string): Promise<ClearResult>;",
          "docstring": "Clear all cell data (values and formulas) in a range (A1 notation, e.g. \"A1:C3\").",
          "usedTypes": [
            "ClearResult"
          ]
        },
        "clear": {
          "signature": "clear(range: string, applyTo?: ClearApplyTo): Promise<ClearResult>;",
          "docstring": "Unified clear with mode selection (spreadsheet special-cell typeRange.clear equivalent).\n\n@param range - A1 range string (e.g. \"A1:C3\")\n@param applyTo - What to clear: 'all' (default), 'contents', 'formats', 'hyperlinks'",
          "usedTypes": [
            "ClearApplyTo",
            "ClearResult"
          ]
        },
        "clearOrResetContents": {
          "signature": "clearOrResetContents(range: string): Promise<void>;",
          "docstring": "Clear cell contents with form control awareness (spreadsheet special-cell typeclearOrResetContents equivalent).\n\nFor cells linked to form controls: resets the control to its default value\n(checkbox -> unchecked/false, comboBox -> first item/empty).\nFor all other cells: clears contents normally (same as clear(range, 'contents')).\n\n@param range - A1 range string (e.g. \"A1:C3\")",
          "usedTypes": []
        },
        "getControl": {
          "signature": "getControl(address: string): Promise<CellControl | undefined>;",
          "docstring": "Get the cell control (e.g., checkbox) for a cell by A1 address.\nReturns undefined if the cell does not contain a control.",
          "usedTypes": [
            "CellControl"
          ]
        },
        "setControl": {
          "signature": "setControl(address: string, control: CellControl | undefined): Promise<void>;",
          "docstring": "Set or clear a cell control by A1 address.\nPass undefined to remove the control and revert to a plain cell.",
          "usedTypes": [
            "CellControl"
          ]
        },
        "getValue": {
          "signature": "getValue(address: string): Promise<CellValuePrimitive>;",
          "docstring": "Get the computed value of a cell by A1 address. Returns null for empty cells. Error cells are returned as display strings (e.g. \"#DIV/0!\").",
          "usedTypes": [
            "CellValuePrimitive"
          ]
        },
        "getData": {
          "signature": "getData(): Promise<CellValue[][]>;",
          "docstring": "Get all cell values in the used range as a 2D array. Returns [] if sheet is empty.",
          "usedTypes": [
            "CellValue"
          ]
        },
        "getValues": {
          "signature": "getValues(range: string): Promise<CellValue[][]>;",
          "docstring": "Get cell values for a range as a 2D array. Returns primitive values only\n(no formatting, formulas, or metadata). Empty cells are null.\n\nThis is the most common read pattern for SDK/LLM consumers.\n\n@param range - A1-style range string (e.g. \"A1:C10\")\n@returns 2D array of cell values",
          "usedTypes": [
            "CellValue"
          ]
        },
        "evaluate": {
          "signature": "evaluate(expression: string): Promise<CellValue>;",
          "docstring": "Evaluate a formula expression in the context of this sheet without writing\nit to any cell. The expression should not include the leading `=`.\n\n@example\n  const total = await ws.evaluate(\"SUM(A1:A10)\");\n\n@param expression - Formula expression string (e.g. \"SUM(A1:A10)\")\n@returns The computed result value",
          "usedTypes": [
            "CellValue"
          ]
        },
        "validateFormulaSyntax": {
          "signature": "validateFormulaSyntax(formula: string): Promise<FormulaSyntaxValidationError | null>;",
          "docstring": "Validate a formula expression in the context of this sheet without writing\nit to any cell. Returns `null` when the formula is syntactically valid.\n\nUnlike {@link evaluate}, this is a raw commit-time syntax check: it does\nnot normalize or auto-correct incomplete input before parsing.",
          "usedTypes": [
            "FormulaSyntaxValidationError"
          ]
        },
        "getFormula": {
          "signature": "getFormula(address: string): Promise<string | null>;",
          "docstring": "Get the formula of a cell by A1 address (null if not a formula cell).",
          "usedTypes": []
        },
        "getFormulas": {
          "signature": "getFormulas(range: string): Promise<(string | null)[][]>;",
          "docstring": "Get formulas for a range. Returns 2D array: formula string or null per cell.",
          "usedTypes": []
        },
        "getFormulasR1C1": {
          "signature": "getFormulasR1C1(range: string): Promise<(string | null)[][]>;",
          "docstring": "Get formulas for a range in R1C1 notation. Returns 2D array: R1C1 formula string or null per cell.\n\nReferences are converted relative to each cell's position:\n- `$A$1` (absolute) becomes `R1C1`\n- `A1` relative to cell B2 becomes `R[-1]C[-1]`\n- `$A1` relative to cell B2 becomes `R[-1]C1` (mixed)\n\n@param range - A1-style range string (e.g. \"A1:C10\")",
          "usedTypes": []
        },
        "getFormulaArray": {
          "signature": "getFormulaArray(address: string): Promise<string | null>;",
          "docstring": "Get the array formula for a cell that is part of a dynamic array spill.\n\nIf the cell is the source of a dynamic array (e.g., =SEQUENCE(5)), returns\nthe formula. If the cell is a spill member (projected from a source), returns\nthe source cell's formula. Returns null if the cell is not part of an array.\n\n@param address - A1-style cell address\n@returns The array formula string, or null if not an array cell",
          "usedTypes": []
        },
        "getRawCellData": {
          "signature": "getRawCellData(address: string, includeFormula?: boolean): Promise<RawCellData>;",
          "docstring": "Get raw cell data (value, formula, format, borders, etc.) by A1 address.",
          "usedTypes": [
            "RawCellData"
          ]
        },
        "getRawRangeData": {
          "signature": "getRawRangeData(range: string | CellRange, options?: {\n        includeFormula?: boolean;\n    }): Promise<RawCellData[][]>;",
          "docstring": "Get raw data for a range as a 2D array (A1 notation or CellRange).",
          "usedTypes": [
            "CellRange",
            "RawCellData"
          ]
        },
        "getRangeWithIdentity": {
          "signature": "getRangeWithIdentity(range: string | CellRange): Promise<IdentifiedCellData[]>;",
          "docstring": "Get all non-empty cells in a range with stable CellId identity.\n\nReturns a flat array of cells (not a 2D grid) — only cells with data\nare included. Each cell includes its CellId, position, computed value,\nformula text (if formula cell), and pre-formatted display string.\n\nUsed by operations that need identity-aware cell data (find-replace,\nclipboard, cell relocation).",
          "usedTypes": [
            "CellRange",
            "IdentifiedCellData"
          ]
        },
        "describe": {
          "signature": "describe(address?: string): Promise<string>;",
          "docstring": "Get a human-readable description of a cell or the entire used range.\n With address: returns compact cell string — \"Revenue | =SUM(B2:B10) | [bold]\"\n Without address: returns describeRange() over the used range (or empty string if sheet is empty)",
          "usedTypes": []
        },
        "describeRange": {
          "signature": "describeRange(range: string | CellRange, includeStyle?: boolean): Promise<string>;",
          "docstring": "Get a tabular description of a range with formula abbreviation.",
          "usedTypes": [
            "CellRange"
          ]
        },
        "summarize": {
          "signature": "summarize(options?: SummaryOptions): Promise<string>;",
          "docstring": "Get a sheet overview summary for agent context.",
          "usedTypes": [
            "SummaryOptions"
          ]
        },
        "getUsedRange": {
          "signature": "getUsedRange(): Promise<CellRange | null>;",
          "docstring": "Get the used range, or null if the sheet is empty.",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getCurrentRegion": {
          "signature": "getCurrentRegion(row: number, col: number): Promise<CellRange>;",
          "docstring": "Get the contiguous data region around a cell (Excel's Ctrl+Shift+* / CurrentRegion).",
          "usedTypes": [
            "CellRange"
          ]
        },
        "findDataEdge": {
          "signature": "findDataEdge(row: number, col: number, direction: 'up' | 'down' | 'left' | 'right'): Promise<{\n        row: number;\n        col: number;\n    }>;",
          "docstring": "Find the data edge in a direction (Excel's Ctrl+Arrow). Single bridge call to Rust.",
          "usedTypes": []
        },
        "findLastRow": {
          "signature": "findLastRow(col: number): Promise<{\n        lastDataRow: number | null;\n        lastFormatRow: number | null;\n    }>;",
          "docstring": "Find the last populated row in a column. Returns data and formatting edges.",
          "usedTypes": []
        },
        "findLastColumn": {
          "signature": "findLastColumn(row: number): Promise<{\n        lastDataCol: number | null;\n        lastFormatCol: number | null;\n    }>;",
          "docstring": "Find the last populated column in a row. Returns data and formatting edges.",
          "usedTypes": []
        },
        "findCells": {
          "signature": "findCells(predicate: (cell: CellData) => boolean, range?: string): Promise<string[]>;",
          "docstring": "Find all cells matching a predicate. Returns A1 addresses. Searches entire sheet or optionally within a range.",
          "usedTypes": [
            "CellData"
          ]
        },
        "findByValue": {
          "signature": "findByValue(value: CellValue, range?: string): Promise<string[]>;",
          "docstring": "Find all cells with a specific value. Returns A1 addresses. Searches entire sheet or optionally within a range.",
          "usedTypes": [
            "CellValue"
          ]
        },
        "findByFormula": {
          "signature": "findByFormula(pattern: RegExp, range?: string): Promise<string[]>;",
          "docstring": "Find all cells whose formula matches a regex pattern. Returns A1 addresses. Searches entire sheet or optionally within a range.",
          "usedTypes": []
        },
        "regexSearch": {
          "signature": "regexSearch(patterns: string[], options?: SearchOptions): Promise<SearchResult[]>;",
          "docstring": "Search cells using regex patterns.",
          "usedTypes": [
            "SearchOptions",
            "SearchResult"
          ]
        },
        "signCheck": {
          "signature": "signCheck(range?: string, options?: SignCheckOptions): Promise<SignCheckResult>;",
          "docstring": "Detect cells whose numeric sign disagrees with their neighbors.\nReturns anomalies sorted by severity — the agent decides which are real errors.",
          "usedTypes": [
            "SignCheckOptions",
            "SignCheckResult"
          ]
        },
        "findInRange": {
          "signature": "findInRange(range: string, text: string, options?: FindInRangeOptions): Promise<SearchResult | null>;",
          "docstring": "Find the first cell matching text within a range (spreadsheet special-cell typeRange.find equivalent).\n\n@param range - A1 range string to search within\n@param text - Text or regex pattern to search for\n@param options - Search options (matchCase, entireCell)\n@returns The first matching SearchResult, or null if no match found",
          "usedTypes": [
            "FindInRangeOptions",
            "SearchResult"
          ]
        },
        "replaceAll": {
          "signature": "replaceAll(range: string, text: string, replacement: string, options?: FindInRangeOptions): Promise<number>;",
          "docstring": "Find and replace all occurrences within a range (spreadsheet special-cell typeRange.replaceAll equivalent).\n\n@param range - A1 range string to search within\n@param text - Text to find\n@param replacement - Replacement text\n@param options - Search options (matchCase, entireCell)\n@returns Number of replacements made",
          "usedTypes": [
            "FindInRangeOptions"
          ]
        },
        "getExtendedRange": {
          "signature": "getExtendedRange(range: string, direction: 'up' | 'down' | 'left' | 'right', activeCell?: {\n        row: number;\n        col: number;\n    }): Promise<CellRange>;",
          "docstring": "Get the extended range in a direction (spreadsheet special-cell typeRange.getExtendedRange / Ctrl+Shift+Arrow).\n\nFrom the active cell (default: top-left of range), finds the data edge in the given\ndirection and returns a range extending from the original range to that edge.\n\n@param range - A1 range string (current selection)\n@param direction - Direction to extend\n@param activeCell - Optional active cell override (default: top-left of range)\n@returns Extended range as CellRange",
          "usedTypes": [
            "CellRange"
          ]
        },
        "isEntireColumn": {
          "signature": "isEntireColumn(range: string | CellRange): boolean;",
          "docstring": "Check if a range represents entire column(s) (e.g., \"A:C\").\n\n@param range - A1 range string or CellRange object\n@returns True if the range represents entire column(s)",
          "usedTypes": [
            "CellRange"
          ]
        },
        "isEntireRow": {
          "signature": "isEntireRow(range: string | CellRange): boolean;",
          "docstring": "Check if a range represents entire row(s) (e.g., \"1:5\").\n\n@param range - A1 range string or CellRange object\n@returns True if the range represents entire row(s)",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getVisibleView": {
          "signature": "getVisibleView(range: string): Promise<VisibleRangeView>;",
          "docstring": "Get only the visible (non-hidden) rows from a range (visible range-view equivalent).\n\nFilters out rows hidden by AutoFilter or manual hide operations.\nReturns cell values for visible rows only, along with the absolute row indices.\n\n@param range - A1 range string (e.g., \"A1:Z100\")\n@returns Visible rows' values and their indices",
          "usedTypes": [
            "VisibleRangeView"
          ]
        },
        "getSpecialCells": {
          "signature": "getSpecialCells(cellType: CellType, valueType?: CellValueType): Promise<string[]>;",
          "docstring": "Find cells matching a special cell type (spreadsheet special-cell typeRange.getSpecialCells equivalent).\n\nReturns addresses of cells matching the specified type within the used range.\nOptionally filter by value type when cellType is `Constants` or `Formulas`.\n\n@param cellType - The type of cells to find\n@param valueType - Optional value type filter (only for Constants/Formulas)\n@returns Array of matching cell addresses",
          "usedTypes": [
            "CellType",
            "CellValueType"
          ]
        },
        "getValueForEditing": {
          "signature": "getValueForEditing(row: number, col: number, editText?: string): Promise<string>;",
          "docstring": "Get the edit-mode string representation of a cell value.\nUsed by formula bar and in-cell editing.\n\nFor formula cells, returns the formula string (e.g. \"=SUM(A1:A10)\").\nFor date/time cells, returns pre-computed edit text if available.\nFor value cells, returns the raw value as a string.\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@param editText - Optional pre-computed edit text (for date/time cells)\n@returns The string to display in edit mode",
          "usedTypes": []
        },
        "getDisplayValue": {
          "signature": "getDisplayValue(address: string): Promise<string>;",
          "docstring": "Get the display value (formatted string) for a cell by A1 address.",
          "usedTypes": []
        },
        "getDisplayValues": {
          "signature": "getDisplayValues(range: string): Promise<string[][]>;",
          "docstring": "Get the formatted display values for a range as a 2D array.\n\nReturns the same formatted strings shown in each cell (number formats applied,\ndates formatted, etc.). This is the range counterpart to `getDisplayValue()`.\n\n@param range - A1-style range string (e.g. \"A1:C10\")\n@returns 2D array of formatted display strings",
          "usedTypes": []
        },
        "getValueTypes": {
          "signature": "getValueTypes(range: string | CellRange): Promise<RangeValueType[][]>;",
          "docstring": "Get per-cell value type classification for a range (spreadsheet special-cell typeRange.valueTypes equivalent).\n\n@param range - A1 range string or CellRange object\n@returns 2D array of RangeValueType enums",
          "usedTypes": [
            "CellRange",
            "RangeValueType"
          ]
        },
        "getNumberFormatCategories": {
          "signature": "getNumberFormatCategories(range: string | CellRange): Promise<NumberFormatCategory[][]>;",
          "docstring": "Get per-cell number format category for a range (spreadsheet special-cell typeRange.numberFormatCategories equivalent).\n\n@param range - A1 range string or CellRange object\n@returns 2D array of NumberFormatCategory enums",
          "usedTypes": [
            "CellRange",
            "NumberFormatCategory"
          ]
        },
        "sortRange": {
          "signature": "sortRange(range: string, options: SortOptions): Promise<void>;",
          "docstring": "Sort a range by the specified options (A1 notation).",
          "usedTypes": [
            "SortOptions"
          ]
        },
        "sortByColor": {
          "signature": "sortByColor(range: string | CellRange, opts: SortByColorOptions): Promise<void>;",
          "docstring": "Sort a range by cell or font color, putting matched-color rows on top or bottom.\n\nConvenience wrapper over {@link sortRange} with a single color-keyed criterion.\nExcel/ECMA-376 vocabulary: `'fill'` is the cell background fill, `'font'` is\nthe cell font color. Compares the resolved per-cell effective format.\n\n@param range - A1-style range string or CellRange object\n@param opts - Color sort options (column, color type, target color, top/bottom position)",
          "usedTypes": [
            "CellRange",
            "SortByColorOptions"
          ]
        },
        "autoFill": {
          "signature": "autoFill(sourceRange: string, targetRange: string, fillMode?: AutoFillMode): Promise<AutoFillResult>;",
          "docstring": "Autofill from source range into target range.\n\n@param sourceRange - Source range in A1 notation (e.g., \"A1:A3\")\n@param targetRange - Target range to fill into (e.g., \"A4:A10\")\n@param fillMode - Fill behavior. Default: 'auto' (detect pattern).",
          "usedTypes": [
            "AutoFillMode",
            "AutoFillResult"
          ]
        },
        "fillSeries": {
          "signature": "fillSeries(range: string, options: FillSeriesOptions): Promise<void>;",
          "docstring": "Fill a range with a series (Edit > Fill > Series dialog equivalent).\nMore explicit than autoFill — caller specifies exact series parameters.\n\nThe range contains BOTH source cells (first row/col) and target cells (rest).\nThe kernel splits them based on direction.\n\n@param range - Range in A1 notation containing source + target cells\n@param options - Series parameters (type, step, stop, direction, etc.)",
          "usedTypes": [
            "FillSeriesOptions"
          ]
        },
        "moveTo": {
          "signature": "moveTo(sourceRange: string, targetRow: number, targetCol: number): Promise<void>;",
          "docstring": "Move (relocate) cells from a source range to a target position.\n\nMoves cell values, formulas, and formatting. Formula references within the\nmoved range are adjusted to the new position. The source range is cleared\nafter the move.\n\n@param sourceRange - Source range in A1 notation (e.g., \"A1:B10\")\n@param targetRow - Destination top-left row (0-based)\n@param targetCol - Destination top-left column (0-based)",
          "usedTypes": []
        },
        "copyFrom": {
          "signature": "copyFrom(sourceRange: string, targetRange: string, options?: CopyFromOptions): Promise<void>;",
          "docstring": "Copy cells from a source range to a target range with optional paste-special behavior.\n\nSupports selective copy (values only, formulas only, formats only, or all),\nskip-blanks, and transpose. Maps to spreadsheet special-cell typeRange.copyFrom().\n\n@param sourceRange - Source range in A1 notation (e.g., \"A1:B10\")\n@param targetRange - Target range in A1 notation (e.g., \"D1:E10\")\n@param options - Optional paste-special behavior (copyType, skipBlanks, transpose)",
          "usedTypes": [
            "CopyFromOptions"
          ]
        },
        "setCells": {
          "signature": "setCells(cells: Array<{\n        addr: string;\n        value: CellValuePrimitive | Date;\n    }>): Promise<SetCellsResult>;",
          "docstring": "Bulk-write scattered cell values and/or formulas in a single IPC call.\nValues starting with \"=\" are treated as formulas.\n\nSupports both A1 addressing and numeric (row, col) addressing.",
          "usedTypes": [
            "CellValuePrimitive",
            "SetCellsResult"
          ]
        },
        "toCSV": {
          "signature": "toCSV(options?: {\n        separator?: string;\n        range?: string;\n    }): Promise<string>;",
          "docstring": "Export the used range as a CSV string (RFC 4180 compliant).\n\nFields containing commas, quotes, or newlines are quoted.\nDouble-quotes inside fields are escaped as \"\".\nFormula injection is prevented by prefixing `=`, `+`, `-`, `@` with a tab character.\n\n@param options - Optional separator (default \",\")",
          "usedTypes": []
        },
        "toJSON": {
          "signature": "toJSON(options?: {\n        headerRow?: number | 'none';\n        range?: string;\n    }): Promise<Record<string, CellValue>[]>;",
          "docstring": "Export the used range as an array of row objects.\n\nBy default, the first row is used as header keys.\nPass `headerRow: 'none'` to use column letters (A, B, C, ...) as keys.\nPass `headerRow: N` to use a specific 0-based row as headers.\n\n@param options - Optional header row configuration and range",
          "usedTypes": [
            "CellValue"
          ]
        },
        "getDependents": {
          "signature": "getDependents(address: string): Promise<string[]>;",
          "docstring": "Get cells that depend on this cell by A1 address.",
          "usedTypes": []
        },
        "getPrecedents": {
          "signature": "getPrecedents(address: string): Promise<string[]>;",
          "docstring": "Get cells that this cell depends on by A1 address.",
          "usedTypes": []
        },
        "enableCalculation": {
          "signature": "enableCalculation: boolean;",
          "docstring": "Per-sheet toggle that controls whether formulas on this sheet are\nrecalculated. When `false`, formulas retain their last computed value but\ndo not recalculate when dependencies change.\n\nDefaults to `true`.",
          "usedTypes": []
        },
        "calculate": {
          "signature": "calculate(markAllDirty?: boolean): Promise<void>;",
          "docstring": "Force recalculation of this sheet.\n\n@param markAllDirty - If `true`, marks all formula cells on this sheet as\n  dirty before recalculating (equivalent to a full sheet recalc). Defaults\n  to `false`, which recalculates only cells already marked dirty.",
          "usedTypes": []
        },
        "getSelectionAggregates": {
          "signature": "getSelectionAggregates(ranges: CellRange[]): Promise<AggregateResult>;",
          "docstring": "Get aggregates (SUM, COUNT, AVG, MIN, MAX) for selected ranges.",
          "usedTypes": [
            "CellRange",
            "AggregateResult"
          ]
        },
        "formatValues": {
          "signature": "formatValues(entries: FormatEntry[]): Promise<string[]>;",
          "docstring": "Batch-format values using number format codes. Returns formatted strings.",
          "usedTypes": [
            "FormatEntry"
          ]
        },
        "getVisibility": {
          "signature": "getVisibility(): Promise<'visible' | 'hidden' | 'veryHidden'>;",
          "docstring": "Get the visibility state of the sheet ('visible', 'hidden', or 'veryHidden').",
          "usedTypes": []
        },
        "setVisibility": {
          "signature": "setVisibility(state: 'visible' | 'hidden' | 'veryHidden'): Promise<void>;",
          "docstring": "Set the visibility state of the sheet.",
          "usedTypes": []
        },
        "getNext": {
          "signature": "getNext(visibleOnly?: boolean): Promise<Worksheet>;",
          "docstring": "Returns the next worksheet. If `visibleOnly` is true, skips hidden sheets. Throws if no next sheet exists.",
          "usedTypes": []
        },
        "getNextOrNull": {
          "signature": "getNextOrNull(visibleOnly?: boolean): Promise<Worksheet | null>;",
          "docstring": "Returns the next worksheet, or null if none exists. If `visibleOnly` is true, skips hidden sheets.",
          "usedTypes": []
        },
        "getPrevious": {
          "signature": "getPrevious(visibleOnly?: boolean): Promise<Worksheet>;",
          "docstring": "Returns the previous worksheet. If `visibleOnly` is true, skips hidden sheets. Throws if no previous sheet exists.",
          "usedTypes": []
        },
        "getPreviousOrNull": {
          "signature": "getPreviousOrNull(visibleOnly?: boolean): Promise<Worksheet | null>;",
          "docstring": "Returns the previous worksheet, or null if none exists. If `visibleOnly` is true, skips hidden sheets.",
          "usedTypes": []
        },
        "on": {
          "signature": "on(event: string, handler: (event: unknown) => void): CallableDisposable;",
          "docstring": "",
          "usedTypes": [
            "CallableDisposable"
          ]
        },
        "refreshActiveCellData": {
          "signature": "refreshActiveCellData(row: number, col: number): Promise<void>;",
          "docstring": "Refresh the active-cell metadata cache (Stream C fix).\n\nCall this when the active cell changes (selection move) so the viewport\nreader's `getActiveCellData()` returns up-to-date metadata — including\n`isCseAnchor` — and the formula bar can immediately display `{=…}` braces\nfor CSE array formula cells.\n\nLooks up the cellId at the given position and calls the compute bridge's\n`refreshActiveCell`. Safe to call speculatively; no-ops if the cell has\nno id (empty cell).",
          "usedTypes": []
        },
        "refreshActiveCellEditSource": {
          "signature": "refreshActiveCellEditSource(row: number, col: number): Promise<void>;",
          "docstring": "Refresh the active-cell edit-source read model for the given cell.\n\nThis is infrastructure for edit-entry hot paths. It is intentionally scoped\nto the active cell rather than exposing arbitrary synchronous cell reads.",
          "usedTypes": []
        },
        "getActiveCellEditSource": {
          "signature": "getActiveCellEditSource(row: number, col: number): ActiveCellEditSource | null;",
          "docstring": "Synchronously read the active-cell edit-source cache when it matches the\nrequested cell and is fresh. Returns null for stale/missing/different-cell\ndata so callers can fall back to one Rust-owned edit-source query.",
          "usedTypes": [
            "ActiveCellEditSource"
          ]
        },
        "setBoundsReader": {
          "signature": "setBoundsReader(reader: IObjectBoundsReader): void;",
          "docstring": "Inject the bounds reader (from the renderer's SceneGraphBoundsReader) so that\nfloating-object handles can resolve pixel bounds via `handle.getBounds()`.\n\nCalling this invalidates cached typed collections so they pick up the new reader\non their next access.",
          "usedTypes": [
            "IObjectBoundsReader"
          ]
        }
      }
    },
    "WorkbookSheets": {
      "docstring": "",
      "functions": {
        "add": {
          "signature": "add(name?: string, index?: number): Promise<Worksheet>;",
          "docstring": "Add a new sheet to the workbook.\n@param name - Optional sheet name. Defaults to \"SheetN\".\n@param index - Optional 0-based position to insert the sheet.\n@returns The created Worksheet.",
          "usedTypes": []
        },
        "remove": {
          "signature": "remove(target: number | string): Promise<SheetRemoveReceipt>;",
          "docstring": "Remove a sheet by index or name.\nThrows if attempting to remove the last sheet.\n@param target - 0-based index or sheet name.",
          "usedTypes": [
            "SheetRemoveReceipt"
          ]
        },
        "move": {
          "signature": "move(target: number | string, toIndex: number): Promise<SheetMoveReceipt>;",
          "docstring": "Move a sheet to a new position.\n@param target - 0-based index or sheet name to move.\n@param toIndex - Target 0-based index.",
          "usedTypes": [
            "SheetMoveReceipt"
          ]
        },
        "rename": {
          "signature": "rename(target: number | string, newName: string): Promise<SheetRenameReceipt>;",
          "docstring": "Rename a sheet.\n@param target - 0-based index or current sheet name.\n@param newName - The new name for the sheet.",
          "usedTypes": [
            "SheetRenameReceipt"
          ]
        },
        "setActive": {
          "signature": "setActive(target: number | string): void | Promise<void>;",
          "docstring": "Set the active sheet.\n@param target - 0-based index or sheet name.",
          "usedTypes": []
        },
        "copy": {
          "signature": "copy(source: number | string, newName?: string, index?: number): Promise<Worksheet>;",
          "docstring": "Copy a sheet within the workbook.\n@param source - 0-based index or name of the sheet to copy.\n@param newName - Optional name for the copy. Defaults to \"SheetName (Copy)\".\n@param index - Optional 0-based position for the copy.\n@returns The newly created Worksheet.",
          "usedTypes": []
        },
        "hide": {
          "signature": "hide(target: number | string): Promise<SheetHideReceipt>;",
          "docstring": "Hide a sheet.\nThrows if attempting to hide the last visible sheet.\n@param target - 0-based index or sheet name.",
          "usedTypes": [
            "SheetHideReceipt"
          ]
        },
        "show": {
          "signature": "show(target: number | string): Promise<SheetShowReceipt>;",
          "docstring": "Show (unhide) a sheet.\n@param target - 0-based index or sheet name.",
          "usedTypes": [
            "SheetShowReceipt"
          ]
        },
        "setSelectedIds": {
          "signature": "setSelectedIds(sheetIds: string[]): Promise<void>;",
          "docstring": "Set which sheets are selected (multi-sheet selection for collaboration).\n@param sheetIds - Array of sheet IDs to mark as selected.",
          "usedTypes": []
        },
        "on": {
          "signature": "on(event: string, handler: (event: unknown) => void): CallableDisposable;",
          "docstring": "",
          "usedTypes": [
            "CallableDisposable"
          ]
        }
      }
    },
    "WorkbookSlicers": {
      "docstring": "Sub-API for workbook-scoped slicer operations.",
      "functions": {
        "list": {
          "signature": "list(): Promise<SlicerInfo[]>;",
          "docstring": "List all slicers across all sheets in the workbook.\n\n@returns Array of slicer summary information",
          "usedTypes": [
            "SlicerInfo"
          ]
        },
        "get": {
          "signature": "get(slicerId: string): Promise<Slicer | null>;",
          "docstring": "Get a slicer by ID from any sheet.\n\n@param slicerId - ID of the slicer\n@returns Full slicer state, or null if not found",
          "usedTypes": [
            "Slicer"
          ]
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<SlicerInfo | null>;",
          "docstring": "Get a slicer by its zero-based index in the list.\n\n@param index - Zero-based index of the slicer\n@returns Slicer summary information, or null if index is out of range",
          "usedTypes": [
            "SlicerInfo"
          ]
        },
        "getItems": {
          "signature": "getItems(slicerId: string): Promise<SlicerItem[]>;",
          "docstring": "Get the items (values) available in a slicer by ID.\n\n@param slicerId - ID of the slicer\n@returns Array of slicer items with selection state",
          "usedTypes": [
            "SlicerItem"
          ]
        },
        "getItem": {
          "signature": "getItem(slicerId: string, key: CellValue): Promise<SlicerItem>;",
          "docstring": "Get a slicer item by its string key.\n\n@param slicerId - ID of the slicer\n@param key - The value to look up (matched via string coercion)\n@returns The matching slicer item\n@throws KernelError if no item matches the key",
          "usedTypes": [
            "CellValue",
            "SlicerItem"
          ]
        },
        "getItemOrNullObject": {
          "signature": "getItemOrNullObject(slicerId: string, key: CellValue): Promise<SlicerItem | null>;",
          "docstring": "Get a slicer item by its string key, or null if not found.\n\n@param slicerId - ID of the slicer\n@param key - The value to look up (matched via string coercion)\n@returns The matching slicer item, or null if not found",
          "usedTypes": [
            "CellValue",
            "SlicerItem"
          ]
        },
        "remove": {
          "signature": "remove(slicerId: string): Promise<void>;",
          "docstring": "Remove a slicer by ID from any sheet.\n\n@param slicerId - ID of the slicer to remove",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total count of slicers across all sheets.\n\n@returns Number of slicers in the workbook",
          "usedTypes": []
        }
      }
    },
    "WorkbookSlicerStyles": {
      "docstring": "",
      "functions": {
        "getDefault": {
          "signature": "getDefault(): Promise<string>;",
          "docstring": "Get the workbook's default slicer style preset. Returns 'light1' if not explicitly set.",
          "usedTypes": []
        },
        "setDefault": {
          "signature": "setDefault(style: string | null): Promise<void>;",
          "docstring": "Set the workbook's default slicer style preset. Pass null to reset to 'light1'.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the number of built-in slicer styles.",
          "usedTypes": []
        },
        "getItem": {
          "signature": "getItem(name: string): Promise<SlicerStyleInfo | null>;",
          "docstring": "Get a specific slicer style by name. Returns null if not found.",
          "usedTypes": [
            "SlicerStyleInfo"
          ]
        },
        "list": {
          "signature": "list(): Promise<SlicerStyleInfo[]>;",
          "docstring": "List all built-in slicer styles.",
          "usedTypes": [
            "SlicerStyleInfo"
          ]
        },
        "add": {
          "signature": "add(name: string, style: SlicerCustomStyle, makeUniqueName?: boolean): Promise<string>;",
          "docstring": "Add a new custom named slicer style.\n@param name - Desired style name.\n@param style - Custom style definition.\n@param makeUniqueName - When true, auto-appends a suffix if the name collides. Default: false.\n@returns The final name assigned to the style (may differ from `name` when `makeUniqueName` is true).",
          "usedTypes": [
            "SlicerCustomStyle"
          ]
        },
        "get": {
          "signature": "get(name: string): Promise<NamedSlicerStyle | null>;",
          "docstring": "Get a custom named slicer style by name, or null if not found.",
          "usedTypes": [
            "NamedSlicerStyle"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a custom named slicer style.\n@param name - The name of the style to remove.",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(name: string): Promise<string>;",
          "docstring": "Duplicate an existing named slicer style.\n@param name - The name of the style to duplicate.\n@returns The name of the newly created copy.",
          "usedTypes": []
        }
      }
    },
    "WorkbookTimelineStyles": {
      "docstring": "",
      "functions": {
        "getDefault": {
          "signature": "getDefault(): Promise<string>;",
          "docstring": "Get the workbook's default timeline style preset. Returns 'light1' if not explicitly set.",
          "usedTypes": []
        },
        "setDefault": {
          "signature": "setDefault(style: string | null): Promise<void>;",
          "docstring": "Set the workbook's default timeline style preset. Pass null to reset to 'light1'.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the number of built-in timeline styles.",
          "usedTypes": []
        },
        "getItem": {
          "signature": "getItem(name: string): Promise<TimelineStyleInfo | null>;",
          "docstring": "Get a specific timeline style by name. Returns null if not found.",
          "usedTypes": [
            "TimelineStyleInfo"
          ]
        },
        "list": {
          "signature": "list(): Promise<TimelineStyleInfo[]>;",
          "docstring": "List all built-in timeline styles.",
          "usedTypes": [
            "TimelineStyleInfo"
          ]
        },
        "add": {
          "signature": "add(name: string, style: SlicerCustomStyle, makeUniqueName?: boolean): Promise<string>;",
          "docstring": "Add a new custom named timeline style.\n@param name - Desired style name.\n@param style - Custom style definition.\n@param makeUniqueName - When true, auto-appends a suffix if the name collides. Default: false.\n@returns The final name assigned to the style (may differ from `name` when `makeUniqueName` is true).",
          "usedTypes": [
            "SlicerCustomStyle"
          ]
        },
        "get": {
          "signature": "get(name: string): Promise<NamedTimelineStyle | null>;",
          "docstring": "Get a custom named timeline style by name, or null if not found.",
          "usedTypes": [
            "NamedTimelineStyle"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a custom named timeline style.\n@param name - The name of the style to remove.",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(name: string): Promise<string>;",
          "docstring": "Duplicate an existing named timeline style.\n@param name - The name of the style to duplicate.\n@returns The name of the newly created copy.",
          "usedTypes": []
        }
      }
    },
    "WorkbookPivotTableStyles": {
      "docstring": "",
      "functions": {
        "getDefault": {
          "signature": "getDefault(): Promise<string>;",
          "docstring": "Get the workbook's default pivot table style preset. Returns 'PivotStyleLight16' if not explicitly set.",
          "usedTypes": []
        },
        "setDefault": {
          "signature": "setDefault(style: string | null): Promise<void>;",
          "docstring": "Set the workbook's default pivot table style preset. Pass null to reset to 'PivotStyleLight16'.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the count of built-in pivot table styles.",
          "usedTypes": []
        },
        "getItem": {
          "signature": "getItem(name: string): Promise<PivotTableStyleInfo | null>;",
          "docstring": "Get a pivot table style by name, or null if not found.",
          "usedTypes": [
            "PivotTableStyleInfo"
          ]
        },
        "list": {
          "signature": "list(): Promise<PivotTableStyleInfo[]>;",
          "docstring": "List all built-in pivot table styles.",
          "usedTypes": [
            "PivotTableStyleInfo"
          ]
        }
      }
    },
    "WorkbookFunctions": {
      "docstring": "",
      "functions": {
        "invoke": {
          "signature": "invoke(functionName: string, ...args: unknown[]): Promise<CellValue>;",
          "docstring": "Invoke any spreadsheet function by name with arbitrary arguments.\n@param functionName - The function name (e.g. 'VLOOKUP', 'SUM').\n@param args - Arguments: cell/range refs as strings, literals as values.\n@returns The evaluated result.",
          "usedTypes": [
            "CellValue"
          ]
        },
        "vlookup": {
          "signature": "vlookup(\n    lookupValue: CellValue,\n    tableArray: string,\n    colIndex: number,\n    rangeLookup?: boolean,\n  ): Promise<CellValue>;",
          "docstring": "VLOOKUP function.\n@param lookupValue - The value to search for.\n@param tableArray - The range reference (e.g. \"A1:C10\").\n@param colIndex - Column index (1-based) to return.\n@param rangeLookup - Whether to use approximate match (default: false).",
          "usedTypes": [
            "CellValue"
          ]
        },
        "sum": {
          "signature": "sum(...ranges: string[]): Promise<number>;",
          "docstring": "SUM function.",
          "usedTypes": []
        },
        "average": {
          "signature": "average(...ranges: string[]): Promise<number>;",
          "docstring": "AVERAGE function.",
          "usedTypes": []
        },
        "count": {
          "signature": "count(...ranges: string[]): Promise<number>;",
          "docstring": "COUNT function.",
          "usedTypes": []
        },
        "max": {
          "signature": "max(...ranges: string[]): Promise<number>;",
          "docstring": "MAX function.",
          "usedTypes": []
        },
        "min": {
          "signature": "min(...ranges: string[]): Promise<number>;",
          "docstring": "MIN function.",
          "usedTypes": []
        },
        "concatenate": {
          "signature": "concatenate(...values: CellValue[]): Promise<string>;",
          "docstring": "CONCATENATE function.",
          "usedTypes": [
            "CellValue"
          ]
        }
      }
    },
    "WorkbookNames": {
      "docstring": "",
      "functions": {
        "add": {
          "signature": "add(name: string, reference: string, comment?: string): Promise<NameAddReceipt>;",
          "docstring": "Define a new named range.\n@param name - The name to define.\n@param reference - A1-style reference (e.g. \"Sheet1!$A$1:$B$10\"). May omit leading \"=\".\n@param comment - Optional descriptive comment.",
          "usedTypes": [
            "NameAddReceipt"
          ]
        },
        "has": {
          "signature": "has(name: string, scope?: string): Promise<boolean>;",
          "docstring": "Check if a named range exists.\n@param name - The name to check.\n@param scope - Optional sheet name scope. Omit for workbook-scoped names.\n@returns True if the named range exists.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of named ranges in the workbook.\n@returns The count of named ranges.",
          "usedTypes": []
        },
        "get": {
          "signature": "get(name: string, scope?: string): Promise<NamedRangeInfo | null>;",
          "docstring": "Get a named range by name.\n@param name - The name to look up.\n@param scope - Optional sheet name scope. Omit for workbook-scoped names.\n@returns The named range info, or null if not found.",
          "usedTypes": [
            "NamedRangeInfo"
          ]
        },
        "getRange": {
          "signature": "getRange(name: string, scope?: string): Promise<NamedRangeReference | null>;",
          "docstring": "Get the parsed sheet reference for a named range.\nReturns the sheet name and range portion for names that refer to a simple\nsheet!range reference. Returns null if the name is not found or if the\nreference is not a simple sheet!range format (e.g., a formula).\n@param name - The name to look up.\n@param scope - Optional sheet name scope. Omit for workbook-scoped names.\n@returns The parsed reference, or null if not found or not a simple range.",
          "usedTypes": [
            "NamedRangeReference"
          ]
        },
        "remove": {
          "signature": "remove(name: string, scope?: string): Promise<NameRemoveReceipt>;",
          "docstring": "Remove a named range.\n@param name - The name to remove.\n@param scope - Optional sheet name scope. Omit for workbook-scoped names.",
          "usedTypes": [
            "NameRemoveReceipt"
          ]
        },
        "update": {
          "signature": "update(name: string, updates: NamedRangeUpdateOptions): Promise<void>;",
          "docstring": "Update an existing named range.\n@param name - The current name to update.\n@param updates - Fields to change (name, reference, comment).",
          "usedTypes": [
            "NamedRangeUpdateOptions"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all named ranges from the workbook.",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<NamedRangeInfo[]>;",
          "docstring": "List all named ranges in the workbook.\n@returns Array of named range info objects.",
          "usedTypes": [
            "NamedRangeInfo"
          ]
        },
        "createFromSelection": {
          "signature": "createFromSelection(\n    sheet: string | SheetId,\n    range: CellRange,\n    options: CreateNamesFromSelectionOptions,\n  ): Promise<CreateNamesResult>;",
          "docstring": "Create named ranges from row/column labels in a selection.\nScans edges of the selection for label text and creates names referring to\nthe corresponding data cells.\n@param sheet - Sheet containing the selection (name or SheetId).\n@param range - The cell range to scan for labels.\n@param options - Which edges to scan (top, left, bottom, right).\n@returns Counts of successfully created and skipped names.",
          "usedTypes": [
            "SheetId",
            "CellRange",
            "CreateNamesFromSelectionOptions",
            "CreateNamesResult"
          ]
        },
        "getValue": {
          "signature": "getValue(name: string, scope?: string): Promise<string | null>;",
          "docstring": "Get the computed value of a named item as a display-formatted string.\nFor single-cell references, returns the formatted cell value.\nFor range references, returns the raw A1 reference string.\n@param name - The named item to evaluate.\n@param scope - Optional sheet name scope for resolution precedence.\n@returns The display value, or null if the name doesn't exist.",
          "usedTypes": []
        },
        "getType": {
          "signature": "getType(name: string, scope?: string): Promise<NamedItemType | null>;",
          "docstring": "Get the API type of a named item's resolved value.\n@param name - The named item to inspect.\n@param scope - Optional sheet name scope for resolution precedence.\n@returns The type string, or null if the name doesn't exist.",
          "usedTypes": [
            "NamedItemType"
          ]
        },
        "getArrayValues": {
          "signature": "getArrayValues(name: string, scope?: string): Promise<CellValue[][] | null>;",
          "docstring": "Get the 2D array of resolved values for a named range.\nFor single-cell references, returns a 1×1 array.\nFor multi-cell ranges, returns the full grid.\n@param name - The named item to evaluate.\n@param scope - Optional sheet name scope for resolution precedence.\n@returns The 2D value array, or null if the name doesn't exist or isn't a range.",
          "usedTypes": [
            "CellValue"
          ]
        },
        "getArrayTypes": {
          "signature": "getArrayTypes(name: string, scope?: string): Promise<RangeValueType[][] | null>;",
          "docstring": "Get the 2D array of type classifications for each cell in a named range.\n@param name - The named item to evaluate.\n@param scope - Optional sheet name scope for resolution precedence.\n@returns The 2D type array, or null if the name doesn't exist or isn't a range.",
          "usedTypes": [
            "RangeValueType"
          ]
        },
        "getValueAsJson": {
          "signature": "getValueAsJson(name: string, scope?: string): Promise<CellValue | null>;",
          "docstring": "Get the raw typed value of a named item as a JSON-compatible value.\nFor single-cell references, returns the cell's typed value (string, number, boolean, null, or error).\nFor range references, returns the first cell's value.\nFor constants, returns the constant as a string.\n@param name - The named item to evaluate.\n@param scope - Optional sheet name scope for resolution precedence.\n@returns The typed value, or null if the name doesn't exist.",
          "usedTypes": [
            "CellValue"
          ]
        },
        "recalculateDependents": {
          "signature": "recalculateDependents(name: string, sheetId: SheetId, origin?: string): void;",
          "docstring": "Recalculate all formulas that depend on a given named range.\nCalled after a name is created, updated, or deleted so that\ndependent cells reflect the new definition (or show #NAME? errors).\n@param name - The name that changed (case-insensitive).\n@param sheetId - Current active sheet for relative reference resolution.\n@param origin - Transaction origin (default: 'user').",
          "usedTypes": [
            "SheetId"
          ]
        }
      }
    },
    "WorkbookScenarios": {
      "docstring": "",
      "functions": {
        "add": {
          "signature": "add(config: ScenarioConfig): Promise<string>;",
          "docstring": "Add a what-if scenario.\n@param config - Scenario configuration (name, changing cells, values).\n@returns The newly created scenario's ID.",
          "usedTypes": [
            "ScenarioConfig"
          ]
        },
        "list": {
          "signature": "list(): Promise<Scenario[]>;",
          "docstring": "List all scenarios in the workbook.\n@returns Array of all saved scenarios.",
          "usedTypes": [
            "Scenario"
          ]
        },
        "getActiveScenarioId": {
          "signature": "getActiveScenarioId(): Promise<string | null>;",
          "docstring": "Return the session-scoped active scenario id, if a scenario is currently applied.",
          "usedTypes": []
        },
        "getActiveScenarioState": {
          "signature": "getActiveScenarioState(): Promise<ActiveScenarioState | null>;",
          "docstring": "Return session-scoped active scenario state. This is not persisted in workbook storage.",
          "usedTypes": [
            "ActiveScenarioState"
          ]
        },
        "apply": {
          "signature": "apply(id: string): Promise<ApplyScenarioResult>;",
          "docstring": "Apply a scenario's values to the worksheet.\n@param id - The scenario ID to apply.\n@returns Result including cells updated count and original values for restore.",
          "usedTypes": [
            "ApplyScenarioResult"
          ]
        },
        "restore": {
          "signature": "restore(baselineIdOrOriginals: string | OriginalCellValue[]): Promise<void>;",
          "docstring": "Restore original values from a prior apply() call and deactivate the scenario.\n@param baselineIdOrOriginals - The Rust session baseline ID returned by apply().\nLegacy original-value arrays are accepted by the current kernel wrapper but\nare ignored; restore is owned by the Rust session baseline.",
          "usedTypes": [
            "OriginalCellValue"
          ]
        },
        "update": {
          "signature": "update(scenarioId: string, config: Partial<ScenarioConfig>): Promise<void>;",
          "docstring": "Update an existing scenario's configuration.\n@param scenarioId - The scenario ID to update.\n@param config - Partial configuration with fields to change.",
          "usedTypes": [
            "ScenarioConfig"
          ]
        },
        "remove": {
          "signature": "remove(id: string): Promise<void>;",
          "docstring": "Remove a scenario.\n@param id - The scenario ID to remove.",
          "usedTypes": []
        }
      }
    },
    "WorkbookHistory": {
      "docstring": "",
      "functions": {
        "undo": {
          "signature": "undo(): Promise<UndoReceipt>;",
          "docstring": "Undo the last operation.",
          "usedTypes": [
            "UndoReceipt"
          ]
        },
        "redo": {
          "signature": "redo(): Promise<RedoReceipt>;",
          "docstring": "Redo the last undone operation.",
          "usedTypes": [
            "RedoReceipt"
          ]
        },
        "canUndo": {
          "signature": "canUndo(): boolean;",
          "docstring": "Check if undo is available. Synchronous (uses cached state).",
          "usedTypes": []
        },
        "canRedo": {
          "signature": "canRedo(): boolean;",
          "docstring": "Check if redo is available. Synchronous (uses cached state).",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): UndoHistoryEntry[];",
          "docstring": "Get the undo history entries. Synchronous.",
          "usedTypes": [
            "UndoHistoryEntry"
          ]
        },
        "goToIndex": {
          "signature": "goToIndex(index: number): Promise<void>;",
          "docstring": "Undo to a specific index in the history.\nPerforms multiple undo operations to reach the target state.\n@param index - Index in the history (0 = most recent operation)",
          "usedTypes": []
        },
        "getState": {
          "signature": "getState(): Promise<UndoState>;",
          "docstring": "Get the full undo/redo state from the compute engine.\nReturns depth counts used by CheckpointManager to track checkpoint state.",
          "usedTypes": [
            "UndoState"
          ]
        },
        "subscribe": {
          "signature": "subscribe(listener: (event: UndoStateChangeEvent) => void): CallableDisposable;",
          "docstring": "Subscribe to undo/redo state changes.\nCalled whenever the undo stack changes (push, undo, redo, clear).\n@returns Unsubscribe function",
          "usedTypes": [
            "UndoStateChangeEvent",
            "CallableDisposable"
          ]
        },
        "setNextDescription": {
          "signature": "setNextDescription(description: string): void;",
          "docstring": "Set the description for the next undo step.\nCall immediately before a mutation to label the undo entry.",
          "usedTypes": []
        }
      }
    },
    "WorkbookTableStyles": {
      "docstring": "",
      "functions": {
        "list": {
          "signature": "list(): Promise<TableStyleInfoWithReadOnly[]>;",
          "docstring": "Get all table styles (built-in + custom) with a `readOnly` flag.",
          "usedTypes": [
            "TableStyleInfoWithReadOnly"
          ]
        },
        "add": {
          "signature": "add(name: string, style: TableStyleConfig): Promise<string>;",
          "docstring": "Create a custom table style. Returns the style name/ID.",
          "usedTypes": [
            "TableStyleConfig"
          ]
        },
        "update": {
          "signature": "update(name: string, style: Partial<TableStyleConfig>): Promise<void>;",
          "docstring": "Update a custom table style.",
          "usedTypes": [
            "TableStyleConfig"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a custom table style.",
          "usedTypes": []
        },
        "getDefault": {
          "signature": "getDefault(): Promise<string | undefined>;",
          "docstring": "Get the default table style ID applied to new tables.",
          "usedTypes": []
        },
        "setDefault": {
          "signature": "setDefault(name: string | undefined): Promise<void>;",
          "docstring": "Set the default table style ID for new tables. Pass undefined to reset.",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(name: string, newName: string): Promise<TableStyleInfo>;",
          "docstring": "Duplicate an existing table style. Returns the new style info.",
          "usedTypes": [
            "TableStyleInfo"
          ]
        }
      }
    },
    "WorkbookCellStyles": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(styleId: string): Promise<CellFormat | null>;",
          "docstring": "Get a cell format (style) by its style ID. Returns the format, or null if not found.",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "getStyle": {
          "signature": "getStyle(styleId: string): Promise<CellStyle | null>;",
          "docstring": "Get a full cell style by ID. Returns null if not found.",
          "usedTypes": [
            "CellStyle"
          ]
        },
        "list": {
          "signature": "list(options?: CellStyleListOptions): Promise<CellStyle[]>;",
          "docstring": "List cell styles. Defaults to built-in + custom styles.",
          "usedTypes": [
            "CellStyleListOptions",
            "CellStyle"
          ]
        },
        "getCatalog": {
          "signature": "getCatalog(options?: Pick<CellStyleListOptions, 'source'>): Promise<CellStyleCatalog>;",
          "docstring": "Get ordered style catalog data for gallery-style consumers.",
          "usedTypes": [
            "CellStyleListOptions",
            "CellStyleCatalog"
          ]
        },
        "add": {
          "signature": "add(name: string, format: CellFormat): Promise<CellStyle>;",
          "docstring": "Create a new custom cell style.",
          "usedTypes": [
            "CellFormat",
            "CellStyle"
          ]
        },
        "update": {
          "signature": "update(\n    styleId: string,\n    updates: Partial<Omit<CellStyle, 'id' | 'builtIn'>>,\n  ): Promise<CellStyle | null>;",
          "docstring": "Update a custom cell style. Returns the updated style, or null if not found.",
          "usedTypes": [
            "CellStyle"
          ]
        },
        "remove": {
          "signature": "remove(styleId: string): Promise<boolean>;",
          "docstring": "Delete a custom cell style. Returns true if deleted.",
          "usedTypes": []
        }
      }
    },
    "WorkbookProperties": {
      "docstring": "WorkbookProperties -- Document properties sub-API interface.\n\nProvides methods to read and write document metadata (title, author,\nkeywords, etc.) and custom document properties.",
      "functions": {
        "getDocumentProperties": {
          "signature": "getDocumentProperties(): Promise<DocumentProperties>;",
          "docstring": "Get all document properties (author, title, keywords, etc.).",
          "usedTypes": [
            "DocumentProperties"
          ]
        },
        "setDocumentProperties": {
          "signature": "setDocumentProperties(props: Partial<DocumentProperties>): Promise<void>;",
          "docstring": "Update document properties (partial merge).",
          "usedTypes": [
            "DocumentProperties"
          ]
        },
        "getCustomProperty": {
          "signature": "getCustomProperty(key: string): Promise<string | undefined>;",
          "docstring": "Get a custom document property by key.",
          "usedTypes": []
        },
        "setCustomProperty": {
          "signature": "setCustomProperty(key: string, value: string): Promise<void>;",
          "docstring": "Set a custom document property.",
          "usedTypes": []
        },
        "removeCustomProperty": {
          "signature": "removeCustomProperty(key: string): Promise<void>;",
          "docstring": "Remove a custom document property.",
          "usedTypes": []
        },
        "listCustomProperties": {
          "signature": "listCustomProperties(): Promise<Array<{ key: string; value: string }>>;",
          "docstring": "List all custom document properties.",
          "usedTypes": []
        }
      }
    },
    "WorkbookProtection": {
      "docstring": "",
      "functions": {
        "isProtected": {
          "signature": "isProtected(): Promise<boolean>;",
          "docstring": "Check if the workbook structure is currently protected.",
          "usedTypes": []
        },
        "getOptions": {
          "signature": "getOptions(): Promise<WorkbookProtectionOptions | null>;",
          "docstring": "Get the current protection options, or null if the workbook is not protected.",
          "usedTypes": [
            "WorkbookProtectionOptions"
          ]
        },
        "protect": {
          "signature": "protect(password?: string, options?: Partial<WorkbookProtectionOptions>): Promise<void>;",
          "docstring": "Protect workbook structure with optional password and options.",
          "usedTypes": [
            "WorkbookProtectionOptions"
          ]
        },
        "unprotect": {
          "signature": "unprotect(password?: string): Promise<boolean>;",
          "docstring": "Unprotect the workbook. Returns true if successful (password matches).",
          "usedTypes": []
        }
      }
    },
    "WorkbookSecurity": {
      "docstring": "",
      "functions": {
        "addPolicy": {
          "signature": "addPolicy(policy: Omit<AccessPolicy, 'id'>): Promise<PolicyId>;",
          "docstring": "Add a new access policy. Rust enforces capability attenuation: the\ncaller's effective workbook level must be >= the granted level.\n\n@returns The assigned PolicyId",
          "usedTypes": [
            "AccessPolicy",
            "PolicyId"
          ]
        },
        "removePolicy": {
          "signature": "removePolicy(id: PolicyId): Promise<void>;",
          "docstring": "Remove a policy by ID. Idempotent at the store layer.",
          "usedTypes": [
            "PolicyId"
          ]
        },
        "updatePolicy": {
          "signature": "updatePolicy(id: PolicyId, updates: Partial<Omit<AccessPolicy, 'id'>>): Promise<void>;",
          "docstring": "Update fields on an existing policy. Attenuation re-runs when `level`\nis patched.",
          "usedTypes": [
            "PolicyId",
            "AccessPolicy"
          ]
        },
        "getPolicies": {
          "signature": "getPolicies(): Promise<AccessPolicy[]>;",
          "docstring": "Get all policies currently on the document, in stable id-sorted order.",
          "usedTypes": [
            "AccessPolicy"
          ]
        },
        "getEffectiveAccess": {
          "signature": "getEffectiveAccess(principal: AccessPrincipal, target: AccessTarget): Promise<AccessLevel>;",
          "docstring": "Get the effective access level for a principal at a target.",
          "usedTypes": [
            "AccessPrincipal",
            "AccessTarget",
            "AccessLevel"
          ]
        },
        "explainAccess": {
          "signature": "explainAccess(principal: AccessPrincipal, target: AccessTarget): Promise<AccessExplanation>;",
          "docstring": "Explain why a principal has a given access level at a target.\nReturns the winning policy, reason, candidates, and any warnings.",
          "usedTypes": [
            "AccessPrincipal",
            "AccessTarget",
            "AccessExplanation"
          ]
        },
        "applyTemplate": {
          "signature": "applyTemplate(templateId: string, options: Record<string, unknown>): Promise<PolicyId[]>;",
          "docstring": "Apply a named template, generating policies. The `templateId` is the\nRust tagged-enum variant name (e.g. `protect_workbook`, `protect_sheet`,\n`agent_structure`); `options` merges into the wire payload under the\nsame keys the Rust `Template` variant expects.\n\n@returns The PolicyIds of the generated policies.",
          "usedTypes": [
            "PolicyId"
          ]
        },
        "removeTemplate": {
          "signature": "removeTemplate(templateId: string): Promise<void>;",
          "docstring": "Remove all policies generated by a template.",
          "usedTypes": []
        }
      }
    },
    "WorkbookNotifications": {
      "docstring": "Workbook-level notifications sub-API.\n\nProvides toast/notification operations without requiring apps to import\nfrom `@mog-sdk/kernel/services/notifications`.",
      "functions": {
        "getAll": {
          "signature": "getAll(): Notification[];",
          "docstring": "Get all active notifications",
          "usedTypes": [
            "Notification"
          ]
        },
        "subscribe": {
          "signature": "subscribe(listener: (notifications: Notification[]) => void): CallableDisposable;",
          "docstring": "Subscribe to notification changes. Returns CallableDisposable — call directly or .dispose() to unsubscribe.",
          "usedTypes": [
            "Notification",
            "CallableDisposable"
          ]
        },
        "notify": {
          "signature": "notify(message: string, options?: NotificationOptions): NotificationId;",
          "docstring": "Show a notification. Returns the notification ID.",
          "usedTypes": [
            "NotificationOptions",
            "NotificationId"
          ]
        },
        "info": {
          "signature": "info(message: string, options?: Omit<NotificationOptions, 'type'>): NotificationId;",
          "docstring": "Show an info notification. Returns the notification ID.",
          "usedTypes": [
            "NotificationOptions",
            "NotificationId"
          ]
        },
        "success": {
          "signature": "success(message: string, options?: Omit<NotificationOptions, 'type'>): NotificationId;",
          "docstring": "Show a success notification. Returns the notification ID.",
          "usedTypes": [
            "NotificationOptions",
            "NotificationId"
          ]
        },
        "warning": {
          "signature": "warning(message: string, options?: Omit<NotificationOptions, 'type'>): NotificationId;",
          "docstring": "Show a warning notification. Returns the notification ID.",
          "usedTypes": [
            "NotificationOptions",
            "NotificationId"
          ]
        },
        "error": {
          "signature": "error(message: string, options?: Omit<NotificationOptions, 'type'>): NotificationId;",
          "docstring": "Show an error notification. Returns the notification ID.",
          "usedTypes": [
            "NotificationOptions",
            "NotificationId"
          ]
        },
        "dismiss": {
          "signature": "dismiss(id: NotificationId): void;",
          "docstring": "Dismiss a notification by ID",
          "usedTypes": [
            "NotificationId"
          ]
        },
        "dismissAll": {
          "signature": "dismissAll(): void;",
          "docstring": "Dismiss all notifications",
          "usedTypes": []
        }
      }
    },
    "WorkbookTheme": {
      "docstring": "",
      "functions": {
        "getWorkbookTheme": {
          "signature": "getWorkbookTheme(): Promise<ThemeDefinition>;",
          "docstring": "Get the workbook's OOXML theme definition (color palette + fonts).\nReads from Rust via bridge — async.",
          "usedTypes": [
            "ThemeDefinition"
          ]
        },
        "setWorkbookTheme": {
          "signature": "setWorkbookTheme(theme: ThemeDefinition): Promise<void>;",
          "docstring": "Set the workbook's OOXML theme definition.\nWrites to Rust via bridge — async. Triggers viewport palette invalidation\nso subsequent renders pick up the new theme colors.",
          "usedTypes": [
            "ThemeDefinition"
          ]
        },
        "getChromeTheme": {
          "signature": "getChromeTheme(): ChromeTheme;",
          "docstring": "Get the current chrome theme (canvas UI shell colors).\nSynchronous — TS-only, no Rust involvement.",
          "usedTypes": [
            "ChromeTheme"
          ]
        },
        "setChromeTheme": {
          "signature": "setChromeTheme(theme: Partial<ChromeTheme>): void;",
          "docstring": "Set chrome theme with partial merge semantics.\nMerges the partial input with the **current** theme (not defaults).\nTriggers canvas layer re-render and CSS variable update.\n\nTo reset to defaults, pass `DEFAULT_CHROME_THEME` explicitly.",
          "usedTypes": [
            "ChromeTheme"
          ]
        }
      }
    },
    "WorkbookViewport": {
      "docstring": "Viewport management sub-API on the Workbook.\n\nConsumer-scoped: createRegion() returns a handle with per-viewport\nrefresh, prefetch, and lifecycle management.",
      "functions": {
        "createRegion": {
          "signature": "createRegion(sheetId: string, bounds: ViewportBounds, viewportId?: string): ViewportRegion;",
          "docstring": "Create a tracked viewport region. Returns a handle — dispose when done.",
          "usedTypes": [
            "ViewportBounds",
            "ViewportRegion"
          ]
        },
        "resetSheetRegions": {
          "signature": "resetSheetRegions(sheetId: string): void;",
          "docstring": "Reset all regions for a sheet (e.g., on sheet switch).",
          "usedTypes": []
        },
        "setRenderScheduler": {
          "signature": "setRenderScheduler(scheduler: RenderScheduler | null): void;",
          "docstring": "Inject (or clear) the render scheduler for \"Write = Invalidate\" integration.\nWhen set, mutation patches applied to viewport buffers automatically\ntrigger a render frame via the scheduler.",
          "usedTypes": [
            "RenderScheduler"
          ]
        },
        "subscribe": {
          "signature": "subscribe(cb: (event: ViewportChangeEvent) => void): () => void;",
          "docstring": "Subscribe to viewport state change events from all viewport coordinators.\nEvents are emitted synchronously after each state change.\nReturns an unsubscribe function.",
          "usedTypes": [
            "ViewportChangeEvent"
          ]
        },
        "setShowFormulas": {
          "signature": "setShowFormulas(value: boolean): void;",
          "docstring": "Set the show-formulas mode. When true, Rust substitutes formula strings\ninto the display text field of viewport cells that have formulas.\nInvalidates all prefetch bounds so the next viewport refresh fetches\nfresh data with the correct display mode.",
          "usedTypes": []
        }
      }
    },
    "WorkbookChanges": {
      "docstring": "Sub-API for opt-in workbook-level change tracking.",
      "functions": {
        "track": {
          "signature": "track(options?: WorkbookTrackOptions): WorkbookChangeTracker;",
          "docstring": "Create a change tracker that accumulates cell-level change records\nacross all sheets from this point forward.\n\n@param options - Optional origin filters and limit\n@returns A WorkbookChangeTracker handle — call collect() to drain, close() when done",
          "usedTypes": [
            "WorkbookTrackOptions",
            "WorkbookChangeTracker"
          ]
        }
      }
    },
    "WorkbookLinks": {
      "docstring": "",
      "functions": {
        "list": {
          "signature": "list(): readonly PersistedWorkbookLinkRecord[];",
          "docstring": "",
          "usedTypes": [
            "PersistedWorkbookLinkRecord"
          ]
        },
        "get": {
          "signature": "get(linkId: LinkId): PersistedWorkbookLinkRecord | null;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "PersistedWorkbookLinkRecord"
          ]
        },
        "add": {
          "signature": "add(input: CreateWorkbookLinkInput): PersistedWorkbookLinkRecord;",
          "docstring": "",
          "usedTypes": [
            "CreateWorkbookLinkInput",
            "PersistedWorkbookLinkRecord"
          ]
        },
        "create": {
          "signature": "create(input: CreateWorkbookLinkInput): PersistedWorkbookLinkRecord;",
          "docstring": "",
          "usedTypes": [
            "CreateWorkbookLinkInput",
            "PersistedWorkbookLinkRecord"
          ]
        },
        "retarget": {
          "signature": "retarget(linkId: LinkId, input: RetargetWorkbookLinkInput): PersistedWorkbookLinkRecord;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "RetargetWorkbookLinkInput",
            "PersistedWorkbookLinkRecord"
          ]
        },
        "update": {
          "signature": "update(linkId: LinkId, input: UpdateWorkbookLinkInput): PersistedWorkbookLinkRecord;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "UpdateWorkbookLinkInput",
            "PersistedWorkbookLinkRecord"
          ]
        },
        "break": {
          "signature": "break(linkId: LinkId, options?: BreakWorkbookLinkOptions): boolean;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "BreakWorkbookLinkOptions"
          ]
        },
        "delete": {
          "signature": "delete(linkId: LinkId): boolean;",
          "docstring": "",
          "usedTypes": [
            "LinkId"
          ]
        },
        "getStatus": {
          "signature": "getStatus(linkId: LinkId): LinkStatusView;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "LinkStatusView"
          ]
        },
        "refresh": {
          "signature": "refresh(linkId: LinkId): Promise<LinkStatusView>;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "LinkStatusView"
          ]
        },
        "watchStatus": {
          "signature": "watchStatus(linkId: LinkId, handler: (status: LinkStatusView) => void): () => void;",
          "docstring": "",
          "usedTypes": [
            "LinkId",
            "LinkStatusView"
          ]
        }
      }
    },
    "WorksheetCellsAccessor": {
      "docstring": "Sub-API for typed per-cell readback by A1 address.\n\nSurfaced on {@link Worksheet.cells}.",
      "functions": {
        "get": {
          "signature": "get(addr: string): Promise<CellRecord | undefined>;",
          "docstring": "Read a typed cell record by A1 address (e.g. `\"B2\"`).\n\n**Async.** Backed by the kernel's domain-layer `CellReads.getData`,\nwhich goes through the compute bridge (CellId lookup + `getActiveCell`,\nwith spill-member and materialized-cell fallbacks). A sync read off the\nviewport buffer was considered and rejected: the viewport only covers\nthe rendered window, so a sync `get` would silently return `undefined`\nfor off-screen cells and surprise callers.\n\nReturns `undefined` when the cell is outside the sheet bounds. Empty\nin-bounds cells return a record with `value === null` and\n`valueType === RangeValueType.Empty` — deliberately divergent from\n`getCell`'s `{value: null}` shape so the discriminant tag is always\npresent (callers don't need a separate \"is this in-bounds\" check).",
          "usedTypes": [
            "CellRecord"
          ]
        }
      }
    },
    "WorksheetWhatIf": {
      "docstring": "Sub-API for What-If analysis operations.",
      "functions": {
        "goalSeek": {
          "signature": "goalSeek(targetCell: string, targetValue: number, changingCell: string): Promise<GoalSeekResult>;",
          "docstring": "Find the input value that makes a formula produce a target result\n(Excel's \"Goal Seek\" equivalent).\n\nUse this to back-solve for an unknown assumption — e.g., find the\ndiscount rate that produces a specific NPV, or the growth rate\nneeded to hit a revenue target.\n\nExample — find WACC that yields NPV = 0:\n```\n// B1 = WACC assumption, B5 = =NPV(B1, C10:C20)\nconst result = await ws.whatIf.goalSeek('B5', 0, 'B1');\nif (result.found) {\n  await ws.cells.setCellValue('B1', result.solutionValue);\n}\n```\n\nThe method is read-only — the changing cell is restored after evaluation.\nCall setCellValue() yourself to apply the solution.\n\n@param targetCell - A1 address of the cell containing the formula to evaluate\n@param targetValue - The desired result value\n@param changingCell - A1 address of the input cell to vary\n@returns GoalSeekResult with solutionValue if found",
          "usedTypes": [
            "GoalSeekResult"
          ]
        },
        "dataTable": {
          "signature": "dataTable(\n    formulaCell: string,\n    options: {\n      rowInputCell?: string | null;\n      colInputCell?: string | null;\n      rowValues: (string | number | boolean | null)[];\n      colValues: (string | number | boolean | null)[];\n    },\n  ): Promise<DataTableResult>;",
          "docstring": "Compute a sensitivity/scenario table by evaluating a formula with\ndifferent input values (Excel's \"What-If Data Table\" equivalent).\n\nUse this for DCF sensitivity tables, LBO return grids, or any\ntwo-dimensional parameter sweep.\n\nOne-variable table: provide either `rowInputCell` or `colInputCell`.\nTwo-variable table: provide both.\n\nExample — 2D sensitivity grid (WACC x Terminal Growth Rate):\n```\n// B1 = WACC assumption (e.g. 0.10)\n// B2 = Terminal growth rate (e.g. 0.025)\n// B3 = =NPV(B1, C10:C20) + terminal_value  (the formula to sweep)\nconst result = await ws.whatIf.dataTable('B3', {\n  rowInputCell: 'B1',\n  colInputCell: 'B2',\n  rowValues: [0.08, 0.09, 0.10, 0.11, 0.12],\n  colValues: [0.015, 0.020, 0.025, 0.030, 0.035],\n});\n// result.results is a 5x5 grid of NPV values\n// Write to sheet: iterate result.results and call setCells()\n```\n\nInput cells must already contain a value before calling this method.\nThe method is read-only — input cells are restored after evaluation.\n\n@param formulaCell - A1 address of the cell containing the formula to evaluate\n@param options - Input cells and substitution values\n@returns 2D grid of computed results (DataTableResult)",
          "usedTypes": [
            "DataTableResult"
          ]
        },
        "createDataTable": {
          "signature": "createDataTable(options: CreateDataTableOptions): Promise<CreateDataTableResult>;",
          "docstring": "Create a persistent two-variable Data Table over the selected table range.\n\nUnlike `dataTable()`, this is a write operation. It stores the Data Table\nregion as workbook metadata so recalculation, readback, and future XLSX\nexport use the same compute-owned authority.",
          "usedTypes": [
            "CreateDataTableOptions",
            "CreateDataTableResult"
          ]
        }
      }
    },
    "WorksheetSmartArt": {
      "docstring": "",
      "functions": {
        "add": {
          "signature": "add(config: SmartArtConfig): Promise<SmartArtObject>;",
          "docstring": "Add a diagram to the sheet. Returns the created floating object.",
          "usedTypes": [
            "SmartArtConfig",
            "SmartArtObject"
          ]
        },
        "get": {
          "signature": "get(objectId: string): Promise<SmartArtDiagram | null>;",
          "docstring": "Get a diagram by object ID, or null if not found.",
          "usedTypes": [
            "SmartArtDiagram"
          ]
        },
        "has": {
          "signature": "has(objectId: string): Promise<boolean>;",
          "docstring": "Check if a diagram exists by object ID.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of diagrams on this sheet.",
          "usedTypes": []
        },
        "remove": {
          "signature": "remove(objectId: string): Promise<void>;",
          "docstring": "Remove a diagram by object ID.",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<SmartArtDiagram[]>;",
          "docstring": "List all diagrams on the sheet.",
          "usedTypes": [
            "SmartArtDiagram"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all diagrams from the sheet.",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(objectId: string): Promise<string>;",
          "docstring": "Duplicate a diagram. Returns the new object ID.",
          "usedTypes": []
        },
        "addNode": {
          "signature": "addNode(\n    objectId: string,\n    text: string,\n    position: NodePosition,\n    referenceNodeId: NodeId | null,\n  ): Promise<NodeId>;",
          "docstring": "Add a node to a diagram. Returns the new node ID.",
          "usedTypes": [
            "NodePosition",
            "NodeId"
          ]
        },
        "removeNode": {
          "signature": "removeNode(objectId: string, nodeId: NodeId): Promise<void>;",
          "docstring": "Remove a node from a diagram.",
          "usedTypes": [
            "NodeId"
          ]
        },
        "updateNode": {
          "signature": "updateNode(\n    objectId: string,\n    nodeId: NodeId,\n    updates: Partial<SmartArtNode>,\n  ): Promise<void>;",
          "docstring": "Update a node's properties.",
          "usedTypes": [
            "NodeId",
            "SmartArtNode"
          ]
        },
        "moveNode": {
          "signature": "moveNode(objectId: string, nodeId: NodeId, direction: NodeMoveDirection): Promise<void>;",
          "docstring": "Move a node in the hierarchy.",
          "usedTypes": [
            "NodeId",
            "NodeMoveDirection"
          ]
        },
        "getNode": {
          "signature": "getNode(\n    objectId: string,\n    nodeId: NodeId,\n  ): Promise<SmartArtNode | undefined>;",
          "docstring": "Get a node by ID.",
          "usedTypes": [
            "NodeId",
            "SmartArtNode"
          ]
        },
        "getDiagram": {
          "signature": "getDiagram(objectId: string): Promise<SmartArtDiagram | null>;",
          "docstring": "@deprecated Use `get(objectId)` instead. Will be removed in a future release.",
          "usedTypes": [
            "SmartArtDiagram"
          ]
        },
        "getDiagramsOnSheet": {
          "signature": "getDiagramsOnSheet(): Promise<SmartArtDiagram[]>;",
          "docstring": "@deprecated Use `list()` instead. Will be removed in a future release.",
          "usedTypes": [
            "SmartArtDiagram"
          ]
        },
        "changeLayout": {
          "signature": "changeLayout(objectId: string, newLayoutId: string): Promise<void>;",
          "docstring": "Change the diagram layout.",
          "usedTypes": []
        },
        "changeQuickStyle": {
          "signature": "changeQuickStyle(objectId: string, quickStyleId: string): Promise<void>;",
          "docstring": "Change the quick style.",
          "usedTypes": []
        },
        "changeColorTheme": {
          "signature": "changeColorTheme(objectId: string, colorThemeId: string): Promise<void>;",
          "docstring": "Change the color theme.",
          "usedTypes": []
        },
        "getComputedLayout": {
          "signature": "getComputedLayout(\n    objectId: string,\n  ): Promise<ComputedLayout | undefined>;",
          "docstring": "Get the computed layout for a diagram. Returns cached result if valid.",
          "usedTypes": [
            "ComputedLayout"
          ]
        },
        "invalidateLayout": {
          "signature": "invalidateLayout(objectId: string): void;",
          "docstring": "Invalidate the cached layout for a diagram.",
          "usedTypes": []
        },
        "invalidateAllLayouts": {
          "signature": "invalidateAllLayouts(): void;",
          "docstring": "Invalidate all cached layouts.",
          "usedTypes": []
        }
      }
    },
    "WorksheetChanges": {
      "docstring": "Sub-API for opt-in change tracking on a worksheet.",
      "functions": {
        "track": {
          "signature": "track(options?: ChangeTrackOptions): ChangeTracker;",
          "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 — call collect() to drain, close() when done",
          "usedTypes": [
            "ChangeTrackOptions",
            "ChangeTracker"
          ]
        }
      }
    },
    "WorksheetFormats": {
      "docstring": "Sub-API for cell formatting operations on a worksheet.",
      "functions": {
        "set": {
          "signature": "set(address: string, format: CellFormat): Promise<FormatChangeResult>;",
          "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\n\n@example\n// Bold red currency\nawait ws.formats.set('A1', { bold: true, fontColor: '#ff0000', numberFormat: '$#,##0.00' });\n// Date format\nawait ws.formats.set('B1', { numberFormat: 'YYYY-MM-DD' });\n// Header style\nawait ws.formats.set('A1', { bold: true, fontSize: 14, backgroundColor: '#4472c4', fontColor: '#ffffff' });",
          "usedTypes": [
            "CellFormat",
            "FormatChangeResult"
          ]
        },
        "setRange": {
          "signature": "setRange(range: string, format: CellFormat): Promise<FormatChangeResult>;",
          "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\n\n@example\n// Currency column\nawait ws.formats.setRange('B2:B100', { numberFormat: '$#,##0.00' });\n// Header row with borders\nawait ws.formats.setRange('A1:F1', {\n  bold: true,\n  backgroundColor: '#4472c4',\n  fontColor: '#ffffff',\n  borders: { bottom: { style: 'medium', color: '#2f5496' } }\n});",
          "usedTypes": [
            "CellFormat",
            "FormatChangeResult"
          ]
        },
        "setRanges": {
          "signature": "setRanges(ranges: CellRange[], format: CellFormat): Promise<void>;",
          "docstring": "Set format for multiple ranges, with full row/column optimization.\n\n@param ranges - Array of range objects\n@param format - Format properties to apply",
          "usedTypes": [
            "CellRange",
            "CellFormat"
          ]
        },
        "hasExplicit": {
          "signature": "hasExplicit(address: string): Promise<boolean>;",
          "docstring": "Check if a cell has explicit formatting applied (not just inherited from row/column/sheet).\n\nReturns true if the cell has any non-default explicit format properties set directly\non it. Returns false if the cell only inherits formatting from the row, column,\nor sheet cascade.\n\n@param address - A1-style cell address\n@returns True if the cell has explicit formatting",
          "usedTypes": []
        },
        "clearCell": {
          "signature": "clearCell(address: string): Promise<void>;",
          "docstring": "Clear format from a single cell, resetting it to default.\n\n@param address - A1-style cell address",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Clear all cell formats in the worksheet, resetting to defaults.",
          "usedTypes": []
        },
        "clearRange": {
          "signature": "clearRange(range: string): Promise<void>;",
          "docstring": "Clear all format properties from cells in a contiguous range.\n\nUnlike `setRange(range, {})` which merges (and leaves existing properties untouched),\nthis removes all explicit formatting, resetting cells to the inherited cascade.\n\n@param range - A1-style range string (e.g. \"A1:B2\")",
          "usedTypes": []
        },
        "clearRanges": {
          "signature": "clearRanges(ranges: CellRange[]): Promise<void>;",
          "docstring": "Clear all format properties from cells in multiple ranges.\n\n@param ranges - Array of range objects",
          "usedTypes": [
            "CellRange"
          ]
        },
        "get": {
          "signature": "get(address: string): Promise<ResolvedCellFormat>;",
          "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 → col → row → table → cell → 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)",
          "usedTypes": [
            "ResolvedCellFormat"
          ]
        },
        "getDisplayedCellProperties": {
          "signature": "getDisplayedCellProperties(address: string): Promise<CellFormat>;",
          "docstring": "Get the fully-resolved displayed format of a single cell.\n\nIncludes the full 6-layer cascade (default → col → row → table → cell → CF)\nwith theme colors resolved to hex. Unlike `get()`, this includes the\nconditional formatting overlay.\n\n@param address - A1-style cell address\n@returns The displayed cell format with CF applied",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "getDisplayedRangeProperties": {
          "signature": "getDisplayedRangeProperties(range: string | CellRange): Promise<CellFormat[][]>;",
          "docstring": "Get displayed formats for a rectangular range.\n\nEach element includes the full 6-layer cascade with CF overlay.\nMaximum 10,000 cells per call.\n\n@param range - A1-style range string (e.g. \"A1:C3\")\n@returns 2D array of displayed cell formats",
          "usedTypes": [
            "CellRange",
            "CellFormat"
          ]
        },
        "adjustIndent": {
          "signature": "adjustIndent(address: string, amount: number): Promise<void>;",
          "docstring": "Adjust the indent level of a cell by a relative amount.\n\n@param address - A1-style cell address\n@param amount - Relative indent change (positive to increase, negative to decrease)",
          "usedTypes": []
        },
        "clearFill": {
          "signature": "clearFill(address: string): Promise<void>;",
          "docstring": "Clear only fill properties of a cell (backgroundColor, patternType, patternForegroundColor, gradientFill).\nUnlike `clearCell()`, this preserves font, alignment, borders, and other formatting.\n\n@param address - A1-style cell address",
          "usedTypes": []
        },
        "clearFillForRanges": {
          "signature": "clearFillForRanges(ranges: CellRange[]): Promise<void>;",
          "docstring": "Clear only fill properties for multiple ranges.\nPreserves font, alignment, borders, and other formatting via read-modify-write.",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getNumberFormatCategory": {
          "signature": "getNumberFormatCategory(address: string): Promise<NumberFormatType>;",
          "docstring": "Get the auto-derived number format category for a cell based on its format code.\n\n@param address - A1-style cell address\n@returns The detected NumberFormatType category",
          "usedTypes": [
            "NumberFormatType"
          ]
        },
        "getNumberFormatLocal": {
          "signature": "getNumberFormatLocal(address: string): Promise<string>;",
          "docstring": "Get the locale-aware number format for a cell (spreadsheet special-cell typeRange.numberFormatLocal equivalent).\n\nResolves the `[$-LCID]` token in the stored format code and transforms\nseparators to match the locale's conventions. For example, a cell with\nformat `[$-407]#,##0.00` returns `#.##0,00` (German conventions).\n\nIf no LCID token is present, returns the raw format code unchanged.\n\n@param address - A1-style cell address\n@returns The locale-resolved format string",
          "usedTypes": []
        },
        "setNumberFormatLocal": {
          "signature": "setNumberFormatLocal(address: string, localFormat: string, locale: string): Promise<void>;",
          "docstring": "Set the locale-aware number format for a cell (spreadsheet special-cell typeRange.numberFormatLocal equivalent).\n\nEncodes the locale-specific format by prepending the appropriate `[$-LCID]`\ntoken and transforming separators to internal (en-US) conventions.\n\nFor example, setting `#.##0,00` with locale `de-DE` stores `[$-407]#,##0.00`.\n\n@param address - A1-style cell address\n@param localFormat - The locale-specific format string\n@param locale - BCP-47 locale tag (e.g., \"de-DE\", \"fr-FR\")",
          "usedTypes": []
        },
        "applyPattern": {
          "signature": "applyPattern(\n    format: CellFormat,\n    sourceRange: CellRange | null,\n    targetRange: CellRange,\n  ): Promise<void>;",
          "docstring": "Apply a format pattern from a source range to a target range.\n\nWhen the target range is larger than the source range, the source format\npattern is tiled to fill the target (like Excel's Format Painter with\nmulti-cell sources).\n\n@param format - The base format to apply (used when sourceRange is null or single-cell)\n@param sourceRange - Source range for pattern replication, or null for simple application\n@param targetRange - Target range to apply formats to",
          "usedTypes": [
            "CellFormat",
            "CellRange"
          ]
        },
        "getCellProperties": {
          "signature": "getCellProperties(range: string): Promise<Array<Array<CellFormat | null>>>;",
          "docstring": "Get effective (resolved) cell formats for a rectangular range.\n\nReturns a 2D array (row-major) where each element is the fully resolved\nformat from the 5-layer cascade (default -> col -> row -> table -> cell).\nCells with no explicit format may return null.\n\n@param range - A1-style range string (e.g. \"A1:C3\")\n@returns 2D array of CellFormat (or null for cells with default format)",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "setCellProperties": {
          "signature": "setCellProperties(\n    updates: Array<{ row: number; col: number; format: Partial<CellFormat> }>,\n  ): Promise<void>;",
          "docstring": "Set cell formats for a batch of individual cells with heterogeneous formats.\n\nUnlike setRange (which applies one format to all cells), this allows each\ncell to receive a different format. Formats merge with existing cell formats\non a per-property basis.\n\n@param updates - Array of {row, col, format} entries",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "getRowProperties": {
          "signature": "getRowProperties(rows: number[]): Promise<Map<number, CellFormat>>;",
          "docstring": "Get row-level formats for the specified rows.\n\nReturns a Map from row index to CellFormat (only rows with explicit\nformats are included; rows with no format are omitted).\n\n@param rows - Row indices (0-based)\n@returns Map of row index to CellFormat",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "setRowProperties": {
          "signature": "setRowProperties(updates: Map<number, Partial<CellFormat>>): Promise<void>;",
          "docstring": "Set row-level formats for multiple rows.\n\nFormats merge with existing row formats on a per-property basis.\n\n@param updates - Map of row index to format properties",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "getColumnProperties": {
          "signature": "getColumnProperties(cols: number[]): Promise<Map<number, CellFormat>>;",
          "docstring": "Get column-level formats for the specified columns.\n\nReturns a Map from column index to CellFormat (only columns with\nexplicit formats are included).\n\n@param cols - Column indices (0-based)\n@returns Map of column index to CellFormat",
          "usedTypes": [
            "CellFormat"
          ]
        },
        "setColumnProperties": {
          "signature": "setColumnProperties(updates: Map<number, Partial<CellFormat>>): Promise<void>;",
          "docstring": "Set column-level formats for multiple columns.\n\nFormats merge with existing column formats on a per-property basis.\n\n@param updates - Map of column index to format properties",
          "usedTypes": [
            "CellFormat"
          ]
        }
      }
    },
    "WorksheetLayout": {
      "docstring": "Sub-API for row/column layout operations on a worksheet.",
      "functions": {
        "getRowHeight": {
          "signature": "getRowHeight(row: number): Promise<number>;",
          "docstring": "Get the height of a row in pixels.\n\n@param row - Row index (0-based)\n@returns Row height in pixels",
          "usedTypes": []
        },
        "setRowHeight": {
          "signature": "setRowHeight(row: number, height: number): Promise<void>;",
          "docstring": "Set the height of a row.\n\n@param row - Row index (0-based)\n@param height - Height in pixels (must be > 0)",
          "usedTypes": []
        },
        "getColumnWidth": {
          "signature": "getColumnWidth(col: number): Promise<number>;",
          "docstring": "Get the width of a column in pixels.\n\n@param col - Column index (0-based)\n@returns Column width in pixels",
          "usedTypes": []
        },
        "setColumnWidth": {
          "signature": "setColumnWidth(col: number, widthPx: number): Promise<void>;",
          "docstring": "Set the width of a column in pixels.\n\n@param col - Column index (0-based)\n@param widthPx - Width in pixels (must be > 0)",
          "usedTypes": []
        },
        "getColumnWidthChars": {
          "signature": "getColumnWidthChars(col: number): Promise<number>;",
          "docstring": "Get the width of a column in character-width units\n(relative to the Normal style font's maximum digit width, matching OOXML/Excel convention).\n\n@param col - Column index (0-based)\n@returns Column width in character-width units",
          "usedTypes": []
        },
        "setColumnWidthChars": {
          "signature": "setColumnWidthChars(col: number, widthChars: number): Promise<void>;",
          "docstring": "Set the width of a column in character-width units\n(relative to the Normal style font's maximum digit width, matching OOXML/Excel convention).\n\n@param col - Column index (0-based)\n@param widthChars - Width in character-width units (must be > 0)",
          "usedTypes": []
        },
        "setColumnWidths": {
          "signature": "setColumnWidths(widths: Array<[number, number]>): Promise<void>;",
          "docstring": "Set multiple column widths in pixels.\n\n@param widths - Array of [columnIndex, widthPx] pairs",
          "usedTypes": []
        },
        "setColumnWidthsChars": {
          "signature": "setColumnWidthsChars(widths: Array<[number, number]>): Promise<void>;",
          "docstring": "Set multiple column widths in character-width units.\n\n@param widths - Array of [columnIndex, widthChars] pairs",
          "usedTypes": []
        },
        "autoFitColumn": {
          "signature": "autoFitColumn(col: number): Promise<void>;",
          "docstring": "Auto-fit a column width to its content.\n\n@param col - Column index (0-based)",
          "usedTypes": []
        },
        "autoFitColumns": {
          "signature": "autoFitColumns(cols: number[]): Promise<void>;",
          "docstring": "Auto-fit multiple columns to their content in a single batch call.\n\n@param cols - Array of column indices (0-based)",
          "usedTypes": []
        },
        "autoFitRow": {
          "signature": "autoFitRow(row: number): Promise<void>;",
          "docstring": "Auto-fit a row height to its content.\n\n@param row - Row index (0-based)",
          "usedTypes": []
        },
        "autoFitRows": {
          "signature": "autoFitRows(rows: number[]): Promise<void>;",
          "docstring": "Auto-fit multiple rows to their content in a single batch call.\n\n@param rows - Array of row indices (0-based)",
          "usedTypes": []
        },
        "getRowHeightsBatch": {
          "signature": "getRowHeightsBatch(startRow: number, endRow: number): Promise<Array<[number, number]>>;",
          "docstring": "Get row heights for a range of rows.\n\n@param startRow - Start row index (0-based, inclusive)\n@param endRow - End row index (0-based, inclusive)\n@returns Array of [rowIndex, height] pairs",
          "usedTypes": []
        },
        "getColWidthsBatch": {
          "signature": "getColWidthsBatch(startCol: number, endCol: number): Promise<Array<[number, number]>>;",
          "docstring": "Get column widths for a range of columns in pixels.\n\n@param startCol - Start column index (0-based, inclusive)\n@param endCol - End column index (0-based, inclusive)\n@returns Array of [colIndex, widthPx] pairs",
          "usedTypes": []
        },
        "getColWidthsBatchChars": {
          "signature": "getColWidthsBatchChars(startCol: number, endCol: number): Promise<Array<[number, number]>>;",
          "docstring": "Get column widths for a range of columns in character-width units\n(relative to the Normal style font's maximum digit width, matching OOXML/Excel convention).\n\n@param startCol - Start column index (0-based, inclusive)\n@param endCol - End column index (0-based, inclusive)\n@returns Array of [colIndex, charWidth] pairs",
          "usedTypes": []
        },
        "setRowVisible": {
          "signature": "setRowVisible(row: number, visible: boolean): Promise<void>;",
          "docstring": "Set the visibility of a single row.\n\n@param row - Row index (0-based)\n@param visible - True to show, false to hide",
          "usedTypes": []
        },
        "setColumnVisible": {
          "signature": "setColumnVisible(col: number, visible: boolean): Promise<void>;",
          "docstring": "Set the visibility of a single column.\n\n@param col - Column index (0-based)\n@param visible - True to show, false to hide",
          "usedTypes": []
        },
        "isRowHidden": {
          "signature": "isRowHidden(row: number): Promise<boolean>;",
          "docstring": "Check whether a row is hidden.\n\n@param row - Row index (0-based)\n@returns True if the row is hidden",
          "usedTypes": []
        },
        "isColumnHidden": {
          "signature": "isColumnHidden(col: number): Promise<boolean>;",
          "docstring": "Check whether a column is hidden.\n\n@param col - Column index (0-based)\n@returns True if the column is hidden",
          "usedTypes": []
        },
        "unhideRows": {
          "signature": "unhideRows(startRow: number, endRow: number): Promise<void>;",
          "docstring": "Unhide all rows in a range.\n\n@param startRow - Start row index (0-based, inclusive)\n@param endRow - End row index (0-based, inclusive)",
          "usedTypes": []
        },
        "unhideColumns": {
          "signature": "unhideColumns(startCol: number, endCol: number): Promise<void>;",
          "docstring": "Unhide all columns in a range.\n\n@param startCol - Start column index (0-based, inclusive)\n@param endCol - End column index (0-based, inclusive)",
          "usedTypes": []
        },
        "hideRows": {
          "signature": "hideRows(rows: number[]): Promise<void>;",
          "docstring": "Hide multiple rows by index.\n\n@param rows - Array of row indices to hide (0-based)",
          "usedTypes": []
        },
        "hideColumns": {
          "signature": "hideColumns(cols: number[]): Promise<void>;",
          "docstring": "Hide multiple columns by index.\n\n@param cols - Array of column indices to hide (0-based)",
          "usedTypes": []
        },
        "getHiddenRowsBitmap": {
          "signature": "getHiddenRowsBitmap(): Promise<Set<number>>;",
          "docstring": "Get the set of all hidden row indices.\n\n@returns Set of hidden row indices",
          "usedTypes": []
        },
        "getHiddenColumnsBitmap": {
          "signature": "getHiddenColumnsBitmap(): Promise<Set<number>>;",
          "docstring": "Get the set of all hidden column indices.\n\n@returns Set of hidden column indices",
          "usedTypes": []
        },
        "resetRowHeight": {
          "signature": "resetRowHeight(row: number): Promise<void>;",
          "docstring": "Reset a row's height to the sheet default.\n\n@param row - Row index (0-based)",
          "usedTypes": []
        },
        "resetColumnWidth": {
          "signature": "resetColumnWidth(col: number): Promise<void>;",
          "docstring": "Reset a column's width to the sheet default.\n\n@param col - Column index (0-based)",
          "usedTypes": []
        },
        "getRowPosition": {
          "signature": "getRowPosition(row: number): Promise<number>;",
          "docstring": "Get the pixel offset of a row's top edge from the worksheet origin.\n\n@param row - Row index (0-based)\n@returns Pixel offset from the top of the worksheet",
          "usedTypes": []
        },
        "getColPosition": {
          "signature": "getColPosition(col: number): Promise<number>;",
          "docstring": "Get the pixel offset of a column's left edge from the worksheet origin.\n\n@param col - Column index (0-based)\n@returns Pixel offset from the left of the worksheet",
          "usedTypes": []
        },
        "getRangePosition": {
          "signature": "getRangePosition(range: CellRange): Promise<RangePixelPosition>;",
          "docstring": "Get the pixel bounds of a range (top, left, height, width).\n\nReturns range pixel bounds in a single call.\n\n@param range - The cell range to measure\n@returns Pixel bounds relative to the worksheet origin",
          "usedTypes": [
            "CellRange",
            "RangePixelPosition"
          ]
        }
      }
    },
    "WorksheetView": {
      "docstring": "Sub-API for worksheet view and display operations.",
      "functions": {
        "freezeRows": {
          "signature": "freezeRows(count: number): Promise<void>;",
          "docstring": "Freeze the top N rows. Preserves any existing column freeze.\n\n@param count - Number of rows to freeze (0 to unfreeze rows)",
          "usedTypes": []
        },
        "freezeColumns": {
          "signature": "freezeColumns(count: number): Promise<void>;",
          "docstring": "Freeze the left N columns. Preserves any existing row freeze.\n\n@param count - Number of columns to freeze (0 to unfreeze columns)",
          "usedTypes": []
        },
        "freezePanes": {
          "signature": "freezePanes(rows: number, cols: number): Promise<void>;",
          "docstring": "Freeze rows and columns simultaneously.\n\nThis is the atomic form of Freeze Panes. The first unfrozen cell is at\n(rows, cols): for example, freezePanes(1, 1) freezes row 0 and column 0.\n\n@param rows - Number of top rows to freeze (0 to freeze no rows)\n@param cols - Number of left columns to freeze (0 to freeze no columns)",
          "usedTypes": []
        },
        "unfreeze": {
          "signature": "unfreeze(): Promise<void>;",
          "docstring": "Remove all frozen panes (both rows and columns).",
          "usedTypes": []
        },
        "getFrozenPanes": {
          "signature": "getFrozenPanes(): Promise<{ rows: number; cols: number }>;",
          "docstring": "Get the current frozen panes configuration.\n\n@returns Object with the number of frozen rows and columns",
          "usedTypes": []
        },
        "freezeAt": {
          "signature": "freezeAt(range: string): Promise<void>;",
          "docstring": "Freeze rows and columns simultaneously using a range reference.\nThe top-left cell of the range becomes the first unfrozen cell.\nFor example, freezeAt(\"B3\") freezes 2 rows and 1 column.\n\n@param range - A cell reference (e.g., \"B3\") indicating the split point",
          "usedTypes": []
        },
        "getSplitConfig": {
          "signature": "getSplitConfig(): Promise<SplitViewportConfig | null>;",
          "docstring": "Get the current split view configuration.\n\n@returns The split configuration, or null if the view is not split",
          "usedTypes": [
            "SplitViewportConfig"
          ]
        },
        "setSplitConfig": {
          "signature": "setSplitConfig(config: SplitViewportConfig | null): Promise<void>;",
          "docstring": "Set or clear the split view configuration.\n\n@param config - Split configuration to apply, or null to remove split",
          "usedTypes": [
            "SplitViewportConfig"
          ]
        },
        "setGridlines": {
          "signature": "setGridlines(show: boolean): Promise<void>;",
          "docstring": "Show or hide gridlines.\n\n@param show - True to show gridlines, false to hide",
          "usedTypes": []
        },
        "setHeadings": {
          "signature": "setHeadings(show: boolean): Promise<void>;",
          "docstring": "Show or hide row/column headings.\n\n@param show - True to show headings, false to hide",
          "usedTypes": []
        },
        "getViewOptions": {
          "signature": "getViewOptions(): Promise<ViewOptions>;",
          "docstring": "Get the current view options (gridlines, headings).\n\n@returns Current view options",
          "usedTypes": [
            "ViewOptions"
          ]
        },
        "setShowFormulas": {
          "signature": "setShowFormulas(show: boolean): Promise<void>;",
          "docstring": "Show formula source text in cells instead of calculated display values.\n\nThis is a persisted per-sheet view option.\n\n@param show - True to show formulas, false to show calculated values",
          "usedTypes": []
        },
        "getTabColor": {
          "signature": "getTabColor(): Promise<string | null>;",
          "docstring": "Get the tab color of this worksheet.\n\n@returns The tab color as a hex string, or null if no color is set",
          "usedTypes": []
        },
        "setTabColor": {
          "signature": "setTabColor(color: string | null): Promise<void>;",
          "docstring": "Set or clear the tab color for this worksheet.\n\n@param color - Hex color string, or null to clear",
          "usedTypes": []
        },
        "getScrollPosition": {
          "signature": "getScrollPosition(): Promise<ScrollPosition>;",
          "docstring": "Get the persistent scroll position (cell-level) for this sheet.",
          "usedTypes": [
            "ScrollPosition"
          ]
        },
        "setScrollPosition": {
          "signature": "setScrollPosition(topRow: number, leftCol: number): Promise<void>;",
          "docstring": "Set the persistent scroll position (cell-level) for this sheet.",
          "usedTypes": []
        }
      }
    },
    "WorksheetStructure": {
      "docstring": "",
      "functions": {
        "insertRows": {
          "signature": "insertRows(index: number, count: number): Promise<InsertRowsReceipt>;",
          "docstring": "Insert rows starting at the given 0-based index.",
          "usedTypes": [
            "InsertRowsReceipt"
          ]
        },
        "deleteRows": {
          "signature": "deleteRows(index: number, count: number): Promise<DeleteRowsReceipt>;",
          "docstring": "Delete rows starting at the given 0-based index.",
          "usedTypes": [
            "DeleteRowsReceipt"
          ]
        },
        "insertColumns": {
          "signature": "insertColumns(index: number, count: number): Promise<InsertColumnsReceipt>;",
          "docstring": "Insert columns starting at the given 0-based index.",
          "usedTypes": [
            "InsertColumnsReceipt"
          ]
        },
        "deleteColumns": {
          "signature": "deleteColumns(index: number, count: number): Promise<DeleteColumnsReceipt>;",
          "docstring": "Delete columns starting at the given 0-based index.",
          "usedTypes": [
            "DeleteColumnsReceipt"
          ]
        },
        "insertCellsWithShift": {
          "signature": "insertCellsWithShift(\n    startRow: number,\n    startCol: number,\n    endRow: number,\n    endCol: number,\n    direction: 'right' | 'down',\n  ): Promise<InsertCellsReceipt>;",
          "docstring": "Insert cells by shifting existing cells in the specified direction.",
          "usedTypes": [
            "InsertCellsReceipt"
          ]
        },
        "deleteCellsWithShift": {
          "signature": "deleteCellsWithShift(\n    startRow: number,\n    startCol: number,\n    endRow: number,\n    endCol: number,\n    direction: 'left' | 'up',\n  ): Promise<DeleteCellsReceipt>;",
          "docstring": "Delete cells by shifting remaining cells in the specified direction.",
          "usedTypes": [
            "DeleteCellsReceipt"
          ]
        },
        "getRowCount": {
          "signature": "getRowCount(): Promise<number>;",
          "docstring": "Get the number of rows with data.",
          "usedTypes": []
        },
        "getColumnCount": {
          "signature": "getColumnCount(): Promise<number>;",
          "docstring": "Get the number of columns with data.",
          "usedTypes": []
        },
        "textToColumns": {
          "signature": "textToColumns(\n    range: string | CellRange,\n    options: TextToColumnsOptions,\n  ): Promise<TextToColumnsResult>;",
          "docstring": "Split text in a column into multiple columns.",
          "usedTypes": [
            "CellRange",
            "TextToColumnsOptions",
            "TextToColumnsResult"
          ]
        },
        "removeDuplicates": {
          "signature": "removeDuplicates(\n    range: string | CellRange,\n    columns: number[],\n    hasHeaders?: boolean,\n  ): Promise<RemoveDuplicatesResult>;",
          "docstring": "Remove duplicate rows in a range.",
          "usedTypes": [
            "CellRange",
            "RemoveDuplicatesResult"
          ]
        },
        "merge": {
          "signature": "merge(range: string): Promise<MergeReceipt>;",
          "docstring": "Merge cells by A1 range.",
          "usedTypes": [
            "MergeReceipt"
          ]
        },
        "unmerge": {
          "signature": "unmerge(range: string): Promise<UnmergeReceipt>;",
          "docstring": "Unmerge cells by A1 range.",
          "usedTypes": [
            "UnmergeReceipt"
          ]
        },
        "getMergedRegions": {
          "signature": "getMergedRegions(): Promise<MergedRegion[]>;",
          "docstring": "Get all merged regions in the sheet.",
          "usedTypes": [
            "MergedRegion"
          ]
        },
        "getMergeAtCell": {
          "signature": "getMergeAtCell(address: string): Promise<CellRange | null>;",
          "docstring": "Get the merge containing a cell by A1 address, or null if not merged.",
          "usedTypes": [
            "CellRange"
          ]
        }
      }
    },
    "WorksheetCharts": {
      "docstring": "",
      "functions": {
        "add": {
          "signature": "add(config: ChartConfig): Promise<Chart>;",
          "docstring": "Add a chart to the sheet. Returns the created chart.",
          "usedTypes": [
            "ChartConfig",
            "Chart"
          ]
        },
        "get": {
          "signature": "get(chartId: string): Promise<Chart | null>;",
          "docstring": "Get a chart by ID, or null if not found.",
          "usedTypes": [
            "Chart"
          ]
        },
        "update": {
          "signature": "update(chartId: string, updates: Partial<ChartConfig>): Promise<void>;",
          "docstring": "Update a chart's configuration.",
          "usedTypes": [
            "ChartConfig"
          ]
        },
        "remove": {
          "signature": "remove(chartId: string): Promise<void>;",
          "docstring": "Remove a chart by ID.",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<Chart[]>;",
          "docstring": "List all charts in the sheet.",
          "usedTypes": [
            "Chart"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all charts from the sheet.",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(chartId: string): Promise<string>;",
          "docstring": "Duplicate a chart, offsetting the copy by 2 rows. Returns the new chart ID.",
          "usedTypes": []
        },
        "exportImage": {
          "signature": "exportImage(chartId: string, options?: ImageExportOptions): Promise<string>;",
          "docstring": "Export a chart as an image.\n\nNote: This is a stub — actual rendering requires a canvas context.\nThe bridge integration will be wired in Wave 4.",
          "usedTypes": [
            "ImageExportOptions"
          ]
        },
        "setDataRange": {
          "signature": "setDataRange(chartId: string, range: string): Promise<void>;",
          "docstring": "Set a chart's data range (A1 notation).",
          "usedTypes": []
        },
        "setType": {
          "signature": "setType(chartId: string, type: ChartType, subType?: string): Promise<void>;",
          "docstring": "Set a chart's type and optional sub-type.",
          "usedTypes": [
            "ChartType"
          ]
        },
        "has": {
          "signature": "has(chartId: string): Promise<boolean>;",
          "docstring": "Check if a chart exists by ID.",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of charts on this sheet.",
          "usedTypes": []
        },
        "getByName": {
          "signature": "getByName(name: string): Promise<Chart | null>;",
          "docstring": "Find a chart by its name, or null if not found.",
          "usedTypes": [
            "Chart"
          ]
        },
        "bringToFront": {
          "signature": "bringToFront(chartId: string): Promise<void>;",
          "docstring": "Bring a chart to the front (highest z-index).",
          "usedTypes": []
        },
        "sendToBack": {
          "signature": "sendToBack(chartId: string): Promise<void>;",
          "docstring": "Send a chart to the back (lowest z-index).",
          "usedTypes": []
        },
        "bringForward": {
          "signature": "bringForward(chartId: string): Promise<void>;",
          "docstring": "Bring a chart forward by one layer.",
          "usedTypes": []
        },
        "sendBackward": {
          "signature": "sendBackward(chartId: string): Promise<void>;",
          "docstring": "Send a chart backward by one layer.",
          "usedTypes": []
        },
        "linkToTable": {
          "signature": "linkToTable(chartId: string, tableId: string): Promise<void>;",
          "docstring": "Link a chart to a table so it auto-updates with the table's data.",
          "usedTypes": []
        },
        "unlinkFromTable": {
          "signature": "unlinkFromTable(chartId: string): Promise<void>;",
          "docstring": "Unlink a chart from its source table.",
          "usedTypes": []
        },
        "isLinkedToTable": {
          "signature": "isLinkedToTable(chartId: string): Promise<boolean>;",
          "docstring": "Check whether a chart is linked to a table.",
          "usedTypes": []
        },
        "addSeries": {
          "signature": "addSeries(chartId: string, config: SeriesConfig): Promise<number>;",
          "docstring": "Add a data series to a chart. Returns the new series index.",
          "usedTypes": [
            "SeriesConfig"
          ]
        },
        "removeSeries": {
          "signature": "removeSeries(chartId: string, index: number): Promise<void>;",
          "docstring": "Remove a data series by index.",
          "usedTypes": []
        },
        "getSeries": {
          "signature": "getSeries(chartId: string, index: number): Promise<SeriesConfig>;",
          "docstring": "Get a data series by index.",
          "usedTypes": [
            "SeriesConfig"
          ]
        },
        "updateSeries": {
          "signature": "updateSeries(chartId: string, index: number, updates: Partial<SeriesConfig>): Promise<void>;",
          "docstring": "Update a data series at the given index.",
          "usedTypes": [
            "SeriesConfig"
          ]
        },
        "getSeriesCount": {
          "signature": "getSeriesCount(chartId: string): Promise<number>;",
          "docstring": "Get the number of data series in a chart.",
          "usedTypes": []
        },
        "reorderSeries": {
          "signature": "reorderSeries(chartId: string, fromIndex: number, toIndex: number): Promise<void>;",
          "docstring": "Reorder a series from one index to another.",
          "usedTypes": []
        },
        "setSeriesValues": {
          "signature": "setSeriesValues(chartId: string, index: number, range: string): Promise<void>;",
          "docstring": "Set the values range for a series (A1 notation).",
          "usedTypes": []
        },
        "setSeriesCategories": {
          "signature": "setSeriesCategories(chartId: string, index: number, range: string): Promise<void>;",
          "docstring": "Set the categories range for a series (A1 notation).",
          "usedTypes": []
        },
        "getSeriesBinOptions": {
          "signature": "getSeriesBinOptions(chartId: string, seriesIndex: number): Promise<HistogramConfig | null>;",
          "docstring": "Get per-series histogram bin options, or null if not set (falls back to chart-level).",
          "usedTypes": [
            "HistogramConfig"
          ]
        },
        "setSeriesBinOptions": {
          "signature": "setSeriesBinOptions(\n    chartId: string,\n    seriesIndex: number,\n    options: HistogramConfig,\n  ): Promise<void>;",
          "docstring": "Set per-series histogram bin options (overrides chart-level histogram config).",
          "usedTypes": [
            "HistogramConfig"
          ]
        },
        "getSeriesBoxwhiskerOptions": {
          "signature": "getSeriesBoxwhiskerOptions(chartId: string, seriesIndex: number): Promise<BoxplotConfig | null>;",
          "docstring": "Get per-series box/whisker options, or null if not set (falls back to chart-level).",
          "usedTypes": [
            "BoxplotConfig"
          ]
        },
        "setSeriesBoxwhiskerOptions": {
          "signature": "setSeriesBoxwhiskerOptions(\n    chartId: string,\n    seriesIndex: number,\n    options: BoxplotConfig,\n  ): Promise<void>;",
          "docstring": "Set per-series box/whisker options (overrides chart-level boxplot config).",
          "usedTypes": [
            "BoxplotConfig"
          ]
        },
        "formatPoint": {
          "signature": "formatPoint(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n    format: { fill?: string; border?: ChartBorder },\n  ): Promise<void>;",
          "docstring": "Format an individual data point within a series.",
          "usedTypes": [
            "ChartBorder"
          ]
        },
        "setPointDataLabel": {
          "signature": "setPointDataLabel(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n    config: DataLabelConfig,\n  ): Promise<void>;",
          "docstring": "Set the data label configuration for an individual data point.",
          "usedTypes": [
            "DataLabelConfig"
          ]
        },
        "addTrendline": {
          "signature": "addTrendline(\n    chartId: string,\n    seriesIndex: number,\n    config: TrendlineConfig,\n  ): Promise<number>;",
          "docstring": "Add a trendline to a series. Returns the new trendline index.",
          "usedTypes": [
            "TrendlineConfig"
          ]
        },
        "removeTrendline": {
          "signature": "removeTrendline(\n    chartId: string,\n    seriesIndex: number,\n    trendlineIndex: number,\n  ): Promise<void>;",
          "docstring": "Remove a trendline from a series by index.",
          "usedTypes": []
        },
        "getTrendline": {
          "signature": "getTrendline(\n    chartId: string,\n    seriesIndex: number,\n    trendlineIndex: number,\n  ): Promise<TrendlineConfig | null>;",
          "docstring": "Get a trendline configuration by index, or null if not found.",
          "usedTypes": [
            "TrendlineConfig"
          ]
        },
        "getTrendlineCount": {
          "signature": "getTrendlineCount(chartId: string, seriesIndex: number): Promise<number>;",
          "docstring": "Get the number of trendlines on a series.",
          "usedTypes": []
        },
        "getDataTable": {
          "signature": "getDataTable(chartId: string): Promise<DataTableConfig | null>;",
          "docstring": "Get the chart's data table configuration, or null if none.",
          "usedTypes": [
            "DataTableConfig"
          ]
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<Chart | null>;",
          "docstring": "Get a chart by its positional index, or null if out of range.",
          "usedTypes": [
            "Chart"
          ]
        },
        "setBubbleSizes": {
          "signature": "setBubbleSizes(chartId: string, seriesIndex: number, range: string): Promise<void>;",
          "docstring": "Set the bubble sizes range for a series (A1 notation).",
          "usedTypes": []
        },
        "onActivated": {
          "signature": "onActivated(handler: (args: { chartId: string }) => void): CallableDisposable;",
          "docstring": "Register a handler for chart activation events. Returns a CallableDisposable.",
          "usedTypes": [
            "CallableDisposable"
          ]
        },
        "onDeactivated": {
          "signature": "onDeactivated(handler: (args: { chartId: string }) => void): CallableDisposable;",
          "docstring": "Register a handler for chart deactivation events. Returns a CallableDisposable.",
          "usedTypes": [
            "CallableDisposable"
          ]
        },
        "getAxisItem": {
          "signature": "getAxisItem(\n    chartId: string,\n    type: 'category' | 'value' | 'series',\n    group: 'primary' | 'secondary',\n  ): Promise<SingleAxisConfig | null>;",
          "docstring": "Get an axis by spreadsheet special-cell typetype/group identifiers.",
          "usedTypes": [
            "SingleAxisConfig"
          ]
        },
        "setAxisTitle": {
          "signature": "setAxisTitle(chartId: string, axisType: 'category' | 'value', formula: string): Promise<void>;",
          "docstring": "Set axis title from a formula string.",
          "usedTypes": []
        },
        "setCategoryNames": {
          "signature": "setCategoryNames(chartId: string, range: string): Promise<void>;",
          "docstring": "Set category axis labels from a cell range (A1 notation).",
          "usedTypes": []
        },
        "getSeriesDimensionValues": {
          "signature": "getSeriesDimensionValues(\n    chartId: string,\n    seriesIndex: number,\n    dimension: ChartSeriesDimension,\n  ): Promise<(string | number)[]>;",
          "docstring": "Get computed values for a series dimension.",
          "usedTypes": [
            "ChartSeriesDimension"
          ]
        },
        "getSeriesDimensionDataSourceString": {
          "signature": "getSeriesDimensionDataSourceString(\n    chartId: string,\n    seriesIndex: number,\n    dimension: ChartSeriesDimension,\n  ): Promise<string>;",
          "docstring": "Get the range/formula string for a series dimension.",
          "usedTypes": [
            "ChartSeriesDimension"
          ]
        },
        "getSeriesDimensionDataSourceType": {
          "signature": "getSeriesDimensionDataSourceType(\n    chartId: string,\n    seriesIndex: number,\n    dimension: ChartSeriesDimension,\n  ): Promise<string>;",
          "docstring": "Get the data source type for a series dimension ('range' | 'literal' | 'formula').",
          "usedTypes": [
            "ChartSeriesDimension"
          ]
        },
        "getDataLabelSubstring": {
          "signature": "getDataLabelSubstring(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n    start: number,\n    length: number,\n  ): Promise<ChartFormatString>;",
          "docstring": "Get a rich text substring from a data label.",
          "usedTypes": [
            "ChartFormatString"
          ]
        },
        "setDataLabelHeight": {
          "signature": "setDataLabelHeight(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n    value: number,\n  ): Promise<void>;",
          "docstring": "Set the height of a data label.",
          "usedTypes": []
        },
        "setDataLabelWidth": {
          "signature": "setDataLabelWidth(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n    value: number,\n  ): Promise<void>;",
          "docstring": "Set the width of a data label.",
          "usedTypes": []
        },
        "getDataLabelTailAnchor": {
          "signature": "getDataLabelTailAnchor(\n    chartId: string,\n    seriesIndex: number,\n    pointIndex: number,\n  ): Promise<{ row: number; col: number }>;",
          "docstring": "Get the tail anchor point for a data label's leader line.",
          "usedTypes": []
        },
        "setTitleFormula": {
          "signature": "setTitleFormula(chartId: string, formula: string): Promise<void>;",
          "docstring": "Set chart title from a formula string.",
          "usedTypes": []
        },
        "getTitleSubstring": {
          "signature": "getTitleSubstring(chartId: string, start: number, length: number): Promise<ChartFormatString>;",
          "docstring": "Get a rich text substring from the chart title.",
          "usedTypes": [
            "ChartFormatString"
          ]
        },
        "activate": {
          "signature": "activate(chartId: string): Promise<void>;",
          "docstring": "Activate (select + focus) a chart. Emits 'chart:selected' event and scrolls chart into view.",
          "usedTypes": []
        }
      }
    },
    "WorksheetObjectCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<FloatingObjectHandle | null>;",
          "docstring": "Get a floating object handle by ID. Returns null if not found.",
          "usedTypes": [
            "FloatingObjectHandle"
          ]
        },
        "getInfo": {
          "signature": "getInfo(id: string): Promise<FloatingObjectInfo | null>;",
          "docstring": "Get summary info (with spatial fields) for a floating object. Returns null if not found.",
          "usedTypes": [
            "FloatingObjectInfo"
          ]
        },
        "list": {
          "signature": "list(): Promise<FloatingObjectHandle[]>;",
          "docstring": "List all floating objects on the sheet.",
          "usedTypes": [
            "FloatingObjectHandle"
          ]
        },
        "removeMany": {
          "signature": "removeMany(ids: string[]): Promise<number>;",
          "docstring": "Remove multiple floating objects. Returns count of successfully removed.",
          "usedTypes": []
        },
        "remove": {
          "signature": "remove(id: string): Promise<boolean>;",
          "docstring": "Remove a single floating object by ID. Returns true if removed.",
          "usedTypes": []
        },
        "bringToFront": {
          "signature": "bringToFront(id: string): Promise<void>;",
          "docstring": "Bring a floating object to the front (highest z-order).",
          "usedTypes": []
        },
        "sendToBack": {
          "signature": "sendToBack(id: string): Promise<void>;",
          "docstring": "Send a floating object to the back (lowest z-order).",
          "usedTypes": []
        },
        "bringForward": {
          "signature": "bringForward(id: string): Promise<void>;",
          "docstring": "Bring a floating object forward by one layer.",
          "usedTypes": []
        },
        "sendBackward": {
          "signature": "sendBackward(id: string): Promise<void>;",
          "docstring": "Send a floating object backward by one layer.",
          "usedTypes": []
        },
        "update": {
          "signature": "update(objectId: string, updates: Record<string, unknown>): Promise<void>;",
          "docstring": "Update arbitrary properties of a floating object.",
          "usedTypes": []
        },
        "convertToWordArt": {
          "signature": "convertToWordArt(objectId: string, warpPreset?: TextWarpPreset): Promise<void>;",
          "docstring": "Convert a text box to decorative text by applying text-effect styling.",
          "usedTypes": [
            "TextWarpPreset"
          ]
        },
        "convertToTextBox": {
          "signature": "convertToTextBox(objectId: string): Promise<void>;",
          "docstring": "Convert decorative text back to a regular text box by removing text-effect styling.",
          "usedTypes": []
        },
        "computeObjectBounds": {
          "signature": "computeObjectBounds(objectId: string): Promise<ObjectBounds | null>;",
          "docstring": "Compute pixel bounding box for a floating object (async — uses ComputeBridge).",
          "usedTypes": [
            "ObjectBounds"
          ]
        },
        "computeAllObjectBounds": {
          "signature": "computeAllObjectBounds(): Promise<Map<string, ObjectBounds>>;",
          "docstring": "Batch-compute pixel bounds for all floating objects on this sheet.",
          "usedTypes": [
            "ObjectBounds"
          ]
        },
        "group": {
          "signature": "group(ids: string[]): Promise<string>;",
          "docstring": "Group multiple floating objects. Returns the group ID.",
          "usedTypes": []
        },
        "ungroup": {
          "signature": "ungroup(groupId: string): Promise<void>;",
          "docstring": "Ungroup a floating object group.",
          "usedTypes": []
        }
      }
    },
    "WorksheetShapeCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<ShapeHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "ShapeHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<ShapeHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "ShapeHandle"
          ]
        },
        "add": {
          "signature": "add(config: ShapeConfig): Promise<ShapeHandle>;",
          "docstring": "",
          "usedTypes": [
            "ShapeConfig",
            "ShapeHandle"
          ]
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<ShapeHandle | null>;",
          "docstring": "Get a shape by zero-based index. Returns null if index is out of range.",
          "usedTypes": [
            "ShapeHandle"
          ]
        }
      }
    },
    "WorksheetPictureCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<PictureHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "PictureHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<PictureHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "PictureHandle"
          ]
        },
        "add": {
          "signature": "add(config: PictureConfig): Promise<PictureHandle>;",
          "docstring": "",
          "usedTypes": [
            "PictureConfig",
            "PictureHandle"
          ]
        }
      }
    },
    "WorksheetTextBoxCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<TextBoxHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "TextBoxHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<TextBoxHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "TextBoxHandle"
          ]
        },
        "add": {
          "signature": "add(config: TextBoxConfig): Promise<TextBoxHandle>;",
          "docstring": "",
          "usedTypes": [
            "TextBoxConfig",
            "TextBoxHandle"
          ]
        }
      }
    },
    "WorksheetDrawingCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<DrawingHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "DrawingHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<DrawingHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "DrawingHandle"
          ]
        },
        "add": {
          "signature": "add(position: Partial<ObjectPosition>, options?: CreateDrawingOptions): Promise<DrawingHandle>;",
          "docstring": "",
          "usedTypes": [
            "ObjectPosition",
            "CreateDrawingOptions",
            "DrawingHandle"
          ]
        }
      }
    },
    "WorksheetEquationCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<EquationHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "EquationHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<EquationHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "EquationHandle"
          ]
        },
        "add": {
          "signature": "add(config: EquationConfig): Promise<EquationHandle>;",
          "docstring": "",
          "usedTypes": [
            "EquationConfig",
            "EquationHandle"
          ]
        },
        "getDefaultStyle": {
          "signature": "getDefaultStyle(): Promise<EquationStyle>;",
          "docstring": "",
          "usedTypes": [
            "EquationStyle"
          ]
        },
        "getDefaults": {
          "signature": "getDefaults(): Promise<EquationDefaults>;",
          "docstring": "",
          "usedTypes": [
            "EquationDefaults"
          ]
        }
      }
    },
    "WorksheetWordArtCollection": {
      "docstring": "",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<WordArtHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "WordArtHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<WordArtHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "WordArtHandle"
          ]
        },
        "add": {
          "signature": "add(config: CreateWordArtInput): Promise<WordArtHandle>;",
          "docstring": "",
          "usedTypes": [
            "CreateWordArtInput",
            "WordArtHandle"
          ]
        },
        "getDefaultConfig": {
          "signature": "getDefaultConfig(): Promise<WordArtObjectConfig>;",
          "docstring": "",
          "usedTypes": [
            "WordArtObjectConfig"
          ]
        },
        "getDefaults": {
          "signature": "getDefaults(): Promise<WordArtDefaults>;",
          "docstring": "",
          "usedTypes": [
            "WordArtDefaults"
          ]
        }
      }
    },
    "WorksheetConnectorCollection": {
      "docstring": "Connector collection — get/list only. add() deferred until ConnectorConfig exists.",
      "functions": {
        "get": {
          "signature": "get(id: string): Promise<ConnectorHandle | null>;",
          "docstring": "",
          "usedTypes": [
            "ConnectorHandle"
          ]
        },
        "list": {
          "signature": "list(): Promise<ConnectorHandle[]>;",
          "docstring": "",
          "usedTypes": [
            "ConnectorHandle"
          ]
        }
      }
    },
    "WorksheetFilters": {
      "docstring": "Sub-API for filter operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(range: string | CellRange): Promise<void>;",
          "docstring": "Add an auto-filter to the sheet.\n\n@param range - A1-style range string (e.g. \"A1:D100\") or a CellRange object",
          "usedTypes": [
            "CellRange"
          ]
        },
        "applyAdvanced": {
          "signature": "applyAdvanced(options: AdvancedFilterOptions): Promise<AdvancedFilterResult>;",
          "docstring": "Apply an Excel Advanced Filter.\n\nRange strings are passed to Rust as entered; parsing, validation,\ncriteria evaluation, row visibility, copy output, and viewport patches are\nowned by the compute layer.",
          "usedTypes": [
            "AdvancedFilterOptions",
            "AdvancedFilterResult"
          ]
        },
        "byColor": {
          "signature": "byColor(col: number, opts: FilterByColorOptions): Promise<void>;",
          "docstring": "Filter a column by cell or font color.\n\nConvenience wrapper over {@link setColumnFilter} with a color predicate —\nrows whose column-`col` cell does not match the requested color are hidden.\n\nWhen `opts.filterId` is omitted, targets the first auto-filter on the sheet.\n\n@param col - Column index (0-based, absolute)\n@param opts - Color filter options",
          "usedTypes": [
            "FilterByColorOptions"
          ]
        },
        "get": {
          "signature": "get(): Promise<FilterState | null>;",
          "docstring": "Get the current auto-filter state.\n\n@returns The filter state, or null if no auto-filter is set",
          "usedTypes": [
            "FilterState"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Clear the auto-filter from the sheet.\nRemoves all filters, not just criteria.",
          "usedTypes": []
        },
        "setAutoFilter": {
          "signature": "setAutoFilter(range: string): Promise<AutoFilterSetReceipt>;",
          "docstring": "@deprecated Use {@link add} instead.\nSet an auto-filter on the sheet by parsing an A1-style range string.\n\n@param range - A1-style range string (e.g. \"A1:D100\")",
          "usedTypes": [
            "AutoFilterSetReceipt"
          ]
        },
        "clearAutoFilter": {
          "signature": "clearAutoFilter(): Promise<AutoFilterClearReceipt>;",
          "docstring": "@deprecated Use {@link clear} instead.\nClear the auto-filter from the sheet.\nRemoves all filters, not just criteria.",
          "usedTypes": [
            "AutoFilterClearReceipt"
          ]
        },
        "getAutoFilter": {
          "signature": "getAutoFilter(): Promise<FilterState | null>;",
          "docstring": "@deprecated Use {@link get} instead.\nGet the current auto-filter state.\n\n@returns The filter state, or null if no auto-filter is set",
          "usedTypes": [
            "FilterState"
          ]
        },
        "getForRange": {
          "signature": "getForRange(range: string): Promise<{ id: string; filterKind: 'autoFilter' | 'tableFilter' | 'advancedFilter' } | null>;",
          "docstring": "Get the filter overlapping a range, or null if none.\n\n@param range - A1-style range string (e.g. \"A1:D100\")\n@returns Object with filter ID if found, or null",
          "usedTypes": []
        },
        "remove": {
          "signature": "remove(filterId: string): Promise<void>;",
          "docstring": "Remove a specific filter by its ID.\n\n@param filterId - Filter ID to remove",
          "usedTypes": []
        },
        "setColumnFilter": {
          "signature": "setColumnFilter(col: number, criteria: ColumnFilterCriteria, filterId?: string): Promise<void>;",
          "docstring": "Set filter criteria for a column on an auto-filter.\n\nWhen `filterId` is omitted, targets the first auto-filter (convenience shorthand).\nWhen provided, targets the specified filter directly.\n\n@param col - Column index (0-based)\n@param criteria - Filter criteria to apply\n@param filterId - Optional filter ID; defaults to first auto-filter",
          "usedTypes": [
            "ColumnFilterCriteria"
          ]
        },
        "applyDynamicFilter": {
          "signature": "applyDynamicFilter(col: number, rule: DynamicFilterRule, filterId?: string): Promise<void>;",
          "docstring": "Apply a dynamic filter rule to a column on an auto-filter.\n\nDynamic filters are pre-defined rules resolved against live data,\nsuch as \"above average\", \"below average\", or date-relative rules\nlike \"today\", \"this month\", etc.\n\nWhen `filterId` is omitted, targets the first auto-filter.\n\n@param col - Column index (0-based)\n@param rule - Dynamic filter rule to apply\n@param filterId - Optional filter ID; defaults to first auto-filter",
          "usedTypes": [
            "DynamicFilterRule"
          ]
        },
        "clearColumnFilter": {
          "signature": "clearColumnFilter(col: number, filterId?: string): Promise<void>;",
          "docstring": "Clear filter criteria for a column on an auto-filter.\n\nWhen `filterId` is omitted, targets the first auto-filter.\nWhen provided, targets the specified filter directly.\n\n@param col - Column index (0-based)\n@param filterId - Optional filter ID; defaults to first auto-filter",
          "usedTypes": []
        },
        "getUniqueValues": {
          "signature": "getUniqueValues(col: number, filterId?: string): Promise<any[]>;",
          "docstring": "Get unique values in a column (for filter dropdowns).\n\nWhen `filterId` is omitted, uses the first auto-filter.\n\n@param col - Column index (0-based)\n@param filterId - Optional filter ID; defaults to first auto-filter\n@returns Array of unique values",
          "usedTypes": []
        },
        "setCriteria": {
          "signature": "setCriteria(filterId: string, col: number, criteria: ColumnFilterCriteria): Promise<void>;",
          "docstring": "@deprecated Use {@link setColumnFilter} instead.\nSet filter criteria for a column on a specific filter by ID (advanced).\n\n@param filterId - Filter ID\n@param col - Column index (0-based)\n@param criteria - Filter criteria to apply",
          "usedTypes": [
            "ColumnFilterCriteria"
          ]
        },
        "clearCriteria": {
          "signature": "clearCriteria(filterId: string, col: number): Promise<void>;",
          "docstring": "@deprecated Use {@link clearColumnFilter} instead.\nClear filter criteria for a column on a specific filter by ID (advanced).\n\n@param filterId - Filter ID\n@param col - Column index (0-based)",
          "usedTypes": []
        },
        "clearAllCriteria": {
          "signature": "clearAllCriteria(filterId: string): Promise<void>;",
          "docstring": "Clear all filter criteria for a filter.\nRemoves filters from all columns but keeps the filter structure intact.\n\n@param filterId - Filter ID",
          "usedTypes": []
        },
        "apply": {
          "signature": "apply(filterId: string): Promise<void>;",
          "docstring": "Apply a filter (Rust evaluates criteria and updates row visibility).\n\n@param filterId - Filter ID to apply",
          "usedTypes": []
        },
        "getInfo": {
          "signature": "getInfo(filterId: string): Promise<FilterDetailInfo | null>;",
          "docstring": "Get detailed filter info including resolved range and column filters.\n\n@param filterId - Filter ID\n@returns Detailed filter info, or null if not found",
          "usedTypes": [
            "FilterDetailInfo"
          ]
        },
        "getFilterUniqueValues": {
          "signature": "getFilterUniqueValues(filterId: string, col: number): Promise<any[]>;",
          "docstring": "@deprecated Use {@link getUniqueValues} instead.\nGet unique values for a filter column.\n\n@param filterId - Filter ID\n@param col - Column index (0-based)\n@returns Array of unique values",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<FilterDetailInfo[]>;",
          "docstring": "List all filters in the sheet with full detail (resolved numeric ranges\nand converted column-filter criteria).\n\n@returns Array of detailed filter info objects",
          "usedTypes": [
            "FilterDetailInfo"
          ]
        },
        "isEnabled": {
          "signature": "isEnabled(): Promise<boolean>;",
          "docstring": "Whether any auto-filter exists on the sheet.\n\n@returns true if at least one filter is present",
          "usedTypes": []
        },
        "isDataFiltered": {
          "signature": "isDataFiltered(): Promise<boolean>;",
          "docstring": "Whether any filter on the sheet has active criteria applied.\n\nReturns true if at least one filter has non-empty column filters,\nmeaning some rows may be hidden.\n\n@returns true if any column filter criteria are set",
          "usedTypes": []
        },
        "listDetails": {
          "signature": "listDetails(): Promise<FilterDetailInfo[]>;",
          "docstring": "@deprecated Use {@link list} instead, which now returns full detail.\nAlias kept for backward compatibility.",
          "usedTypes": [
            "FilterDetailInfo"
          ]
        },
        "getSortState": {
          "signature": "getSortState(filterId: string): Promise<FilterSortState | null>;",
          "docstring": "Get the sort state for a filter.\n\n@param filterId - Filter ID\n@returns Sort state, or null if no sort state set",
          "usedTypes": [
            "FilterSortState"
          ]
        },
        "setSortState": {
          "signature": "setSortState(filterId: string, state: FilterSortState): Promise<void>;",
          "docstring": "Set the sort state for a filter.\n\n@param filterId - Filter ID\n@param state - Sort state to set",
          "usedTypes": [
            "FilterSortState"
          ]
        }
      }
    },
    "WorksheetFormControls": {
      "docstring": "Form controls sub-API.\n\nValues live in linked cells. Creation/update calls mutate the production\nFormControlManager for the workbook and use this worksheet as the sheet\nscope.",
      "functions": {
        "add": {
          "signature": "add(options: AddCheckboxFormControlOptions): Promise<CheckboxControl>;",
          "docstring": "Add a checkbox or comboBox form control on this sheet.",
          "usedTypes": [
            "AddCheckboxFormControlOptions",
            "CheckboxControl"
          ]
        },
        "addCheckbox": {
          "signature": "addCheckbox(options: WorksheetCreateCheckboxOptions): Promise<CheckboxControl>;",
          "docstring": "Add a checkbox form control on this sheet.",
          "usedTypes": [
            "WorksheetCreateCheckboxOptions",
            "CheckboxControl"
          ]
        },
        "addComboBox": {
          "signature": "addComboBox(options: WorksheetCreateComboBoxOptions): Promise<ComboBoxControl>;",
          "docstring": "Add a comboBox form control on this sheet.",
          "usedTypes": [
            "WorksheetCreateComboBoxOptions",
            "ComboBoxControl"
          ]
        },
        "list": {
          "signature": "list(): FormControl[];",
          "docstring": "Get all form controls on this sheet.",
          "usedTypes": [
            "FormControl"
          ]
        },
        "get": {
          "signature": "get(controlId: string): FormControl | undefined;",
          "docstring": "Get a specific form control by ID. Returns undefined if not found or not on this sheet.",
          "usedTypes": [
            "FormControl"
          ]
        },
        "getAtPosition": {
          "signature": "getAtPosition(row: number, col: number): FormControl[];",
          "docstring": "Get form controls at a specific cell position (for hit testing).",
          "usedTypes": [
            "FormControl"
          ]
        },
        "update": {
          "signature": "update(controlId: string, updates: FormControlUpdate): FormControl | undefined;",
          "docstring": "Update a control on this sheet. Returns undefined if the control is absent or on another sheet.",
          "usedTypes": [
            "FormControlUpdate",
            "FormControl"
          ]
        },
        "move": {
          "signature": "move(controlId: string, newAnchor: FormControlAnchorUpdate): Promise<FormControl | undefined>;",
          "docstring": "Move a control on this sheet to a new anchor cell.",
          "usedTypes": [
            "FormControlAnchorUpdate",
            "FormControl"
          ]
        },
        "resize": {
          "signature": "resize(controlId: string, width: number, height: number): FormControl | undefined;",
          "docstring": "Resize a control on this sheet.",
          "usedTypes": [
            "FormControl"
          ]
        },
        "remove": {
          "signature": "remove(controlId: string): boolean;",
          "docstring": "Remove a control from this sheet. Returns true when a control was removed.",
          "usedTypes": []
        }
      }
    },
    "WorksheetConditionalFormatting": {
      "docstring": "Sub-API for conditional formatting operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(ranges: (string | CellRange)[], rules: CFRuleInput[]): Promise<ConditionalFormat>;",
          "docstring": "Add a new conditional format with ranges and rules.\nThe API assigns IDs and priorities — callers provide rule configuration only.\n\n@param ranges - Cell ranges this format applies to\n@param rules - Rule inputs (without id/priority)\n@returns The created conditional format with assigned IDs and priorities",
          "usedTypes": [
            "CellRange",
            "CFRuleInput",
            "ConditionalFormat"
          ]
        },
        "get": {
          "signature": "get(formatId: string): Promise<ConditionalFormat | null>;",
          "docstring": "Get a conditional format by its ID.\n\n@param formatId - Format ID to look up\n@returns The conditional format, or null if not found",
          "usedTypes": [
            "ConditionalFormat"
          ]
        },
        "has": {
          "signature": "has(formatId: string): Promise<boolean>;",
          "docstring": "Check if a conditional format exists by ID.\n\n@param formatId - Format ID to check\n@returns True if the format exists",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of conditional formats on this sheet.\n\n@returns The count of conditional formats",
          "usedTypes": []
        },
        "update": {
          "signature": "update(formatId: string, updates: ConditionalFormatUpdate): Promise<void>;",
          "docstring": "Update an existing conditional format.\nSupports replacing rules, ranges, and setting stopIfTrue on all rules.\n\n@param formatId - Format ID to update\n@param updates - Object with optional rules, ranges, and stopIfTrue",
          "usedTypes": [
            "ConditionalFormatUpdate"
          ]
        },
        "clearRuleStyle": {
          "signature": "clearRuleStyle(formatId: string, ruleId: string): Promise<void>;",
          "docstring": "Clear the style of a specific rule within a conditional format, resetting\nall style properties (font, fill, border, number format) to unset.\n\n@param formatId - Format ID containing the rule\n@param ruleId - Rule ID within the format to clear style for",
          "usedTypes": []
        },
        "changeRuleType": {
          "signature": "changeRuleType(formatId: string, ruleId: string, newRule: CFRuleInput): Promise<void>;",
          "docstring": "Change the type and configuration of a specific rule within a conditional format,\npreserving its ID and priority. This is the equivalent of eight\nchangeRuleTo*() methods, unified into one type-safe call using CFRuleInput.\n\n@param formatId - Format ID containing the rule\n@param ruleId - Rule ID to change\n@param newRule - New rule configuration (type + type-specific fields)",
          "usedTypes": [
            "CFRuleInput"
          ]
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<ConditionalFormat | null>;",
          "docstring": "Get a conditional format by its index in the priority-ordered list.\n\n@param index - Zero-based index\n@returns The conditional format at that index, or null if out of bounds",
          "usedTypes": [
            "ConditionalFormat"
          ]
        },
        "remove": {
          "signature": "remove(formatId: string): Promise<void>;",
          "docstring": "Remove a conditional format by ID.\n\n@param formatId - Format ID to remove",
          "usedTypes": []
        },
        "removeRule": {
          "signature": "removeRule(formatId: string, ruleId: string): Promise<void>;",
          "docstring": "Remove a single rule from a conditional format. If the removed rule was\nthe last rule in the format, the conditional format itself is removed.\n\n@param formatId - Format ID containing the rule\n@param ruleId - Rule ID to remove",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<ConditionalFormat[]>;",
          "docstring": "Get all conditional formats on the sheet.\n\n@returns Array of conditional format objects",
          "usedTypes": [
            "ConditionalFormat"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Clear all conditional formats from the sheet.",
          "usedTypes": []
        },
        "clearInRanges": {
          "signature": "clearInRanges(ranges: (string | CellRange)[]): Promise<void>;",
          "docstring": "Clear conditional formats that intersect with the given ranges.\n\n@param ranges - Ranges to clear conditional formats from",
          "usedTypes": [
            "CellRange"
          ]
        },
        "reorder": {
          "signature": "reorder(formatIds: string[]): Promise<void>;",
          "docstring": "Reorder conditional formats by format ID array (first = highest priority).\n\n@param formatIds - Array of format IDs in the desired order",
          "usedTypes": []
        },
        "cloneForPaste": {
          "signature": "cloneForPaste(\n    sourceSheetId: string,\n    relativeCFs: Array<{\n      rules: any[];\n      rangeOffsets: Array<{\n        startRowOffset: number;\n        startColOffset: number;\n        endRowOffset: number;\n        endColOffset: number;\n      }>;\n    }>,\n    origin: { row: number; col: number },\n    isCut: boolean,\n  ): Promise<void>;",
          "docstring": "Clone conditional formats from source to target with offset.\nUsed by format painter and paste operations.\n\n@param sourceSheetId - Source sheet ID (for cut operation reference removal)\n@param relativeCFs - Relative CF formats with range offsets\n@param origin - Target paste origin (row, col)\n@param isCut - Whether this is a cut operation",
          "usedTypes": []
        }
      }
    },
    "WorksheetValidation": {
      "docstring": "Sub-API for data validation operations on a worksheet.",
      "functions": {
        "set": {
          "signature": "set(address: string, rule: ValidationRule): Promise<ValidationSetReceipt>;",
          "docstring": "Set a validation rule on a cell or range.\n\n@param address - A1-style cell or range address (e.g. \"A1\", \"A1:B5\")\n@param rule - Validation rule to apply",
          "usedTypes": [
            "ValidationRule",
            "ValidationSetReceipt"
          ]
        },
        "remove": {
          "signature": "remove(address: string): Promise<void>;",
          "docstring": "Remove validation from a cell (deletes any range schema covering the cell).\n\n@param address - A1-style cell address",
          "usedTypes": []
        },
        "get": {
          "signature": "get(address: string): Promise<ValidationRule | null>;",
          "docstring": "Get the validation rule for a cell.\n\n@param address - A1-style cell address\n@returns The validation rule, or null if none",
          "usedTypes": [
            "ValidationRule"
          ]
        },
        "peek": {
          "signature": "peek(address: string): ValidationRule | null | undefined;",
          "docstring": "Synchronously read a validation rule when this sheet's validation cache is\nalready hydrated.\n\nReturns `undefined` when the sheet cache is cold, `null` when it is warm and\nno rule covers the cell, or the covering rule when one exists.",
          "usedTypes": [
            "ValidationRule"
          ]
        },
        "has": {
          "signature": "has(address: string): Promise<boolean>;",
          "docstring": "Check if a cell has a validation rule.\n\n@param address - A1-style cell address\n@returns True if the cell has a validation rule",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of validation rules on this sheet.\n\n@returns The count of validation rules",
          "usedTypes": []
        },
        "getDropdownItems": {
          "signature": "getDropdownItems(address: string): Promise<string[]>;",
          "docstring": "Get dropdown items for a cell with list validation.\n\n@param address - A1-style cell address\n@returns Array of dropdown item strings",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<ValidationRule[]>;",
          "docstring": "List all validation rules on the sheet.\n\n@returns Array of validation rules",
          "usedTypes": [
            "ValidationRule"
          ]
        },
        "clear": {
          "signature": "clear(range?: string): Promise<void>;",
          "docstring": "Clear all validation rules from the sheet.\nWhen called with a range argument, clears only rules overlapping that range\n(deprecated — use {@link clearInRange} for range-scoped clearing).\n\n@param range - (Optional) A1-style range string. If omitted, removes ALL rules.",
          "usedTypes": []
        },
        "clearInRange": {
          "signature": "clearInRange(range: string | CellRange): Promise<void>;",
          "docstring": "Clear validation rules that overlap a range.\n\n@param range - A1-style range string (e.g. \"A1:B5\") or CellRange object",
          "usedTypes": [
            "CellRange"
          ]
        },
        "removeById": {
          "signature": "removeById(id: string): Promise<void>;",
          "docstring": "Remove a validation rule by its ID.\n\n@param id - Validation rule / range schema ID",
          "usedTypes": []
        },
        "validate": {
          "signature": "validate(row: number, col: number, value: string): Promise<ValidationCheckResult>;",
          "docstring": "Validate a candidate value for a cell against the rule covering it.\n\nStateless — does not mutate any cell. Delegates to the compute layer,\nwhich evaluates the covering schema (including `allowBlank`, type checks,\nand range/list constraints).\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@param value - Candidate value (stringified — same form committed by the editor)\n@returns Validation result. `errorStyle` is \"none\" when no rule covers the cell.",
          "usedTypes": [
            "ValidationCheckResult"
          ]
        },
        "getErrorsInRange": {
          "signature": "getErrorsInRange(\n    startRow: number,\n    startCol: number,\n    endRow: number,\n    endCol: number,\n  ): Promise<Array<{ row: number; col: number }>>;",
          "docstring": "Get cells with validation errors in a range.\n\n@param startRow - Start row (0-based)\n@param startCol - Start column (0-based)\n@param endRow - End row (0-based)\n@param endCol - End column (0-based)\n@returns Array of {row, col} for cells with errors",
          "usedTypes": []
        }
      }
    },
    "WorksheetTables": {
      "docstring": "Sub-API for table operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(range: string | CellRange, options?: TableOptions): Promise<TableInfo>;",
          "docstring": "Create a new table from a cell range.\n\n@param range - A1-style range string (e.g. \"A1:D10\") or CellRange object\n@param options - Optional table creation settings (name, headers, style)\n@returns The created table information",
          "usedTypes": [
            "CellRange",
            "TableOptions",
            "TableInfo"
          ]
        },
        "get": {
          "signature": "get(name: string): Promise<TableInfo | null>;",
          "docstring": "Get a table by name.\n\nTables are workbook-scoped, so the name is unique across all sheets.\n\n@param name - Table name\n@returns Table information, or null if not found",
          "usedTypes": [
            "TableInfo"
          ]
        },
        "has": {
          "signature": "has(name: string): Promise<boolean>;",
          "docstring": "Check if a table exists by name.\n\n@param name - Table name\n@returns True if the table exists",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<TableInfo[]>;",
          "docstring": "List all tables in this worksheet.\n\n@returns Array of table information objects",
          "usedTypes": [
            "TableInfo"
          ]
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of tables on this worksheet.\n\n@returns The count of tables",
          "usedTypes": []
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<TableInfo | null>;",
          "docstring": "Get a table by its position in the list of tables on this worksheet.\n\n@param index - Zero-based index into the table list\n@returns Table information, or null if the index is out of range",
          "usedTypes": [
            "TableInfo"
          ]
        },
        "getFirst": {
          "signature": "getFirst(): Promise<TableInfo | null>;",
          "docstring": "Get the first table on this worksheet.\n\nConvenience shortcut equivalent to `getAt(0)`.\n\n@returns Table information, or null if no tables exist",
          "usedTypes": [
            "TableInfo"
          ]
        },
        "getColumnByName": {
          "signature": "getColumnByName(tableName: string, columnName: string): Promise<TableColumn | null>;",
          "docstring": "Look up a column in a table by its header name.\n\n@param tableName - Table name\n@param columnName - Column header name to search for\n@returns The matching column, or null if not found",
          "usedTypes": [
            "TableColumn"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a table definition, converting it back to a plain range.\n\nCell data is preserved; only the table metadata is removed.\n\n@param name - Table name",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all tables from this worksheet.",
          "usedTypes": []
        },
        "rename": {
          "signature": "rename(oldName: string, newName: string): Promise<void>;",
          "docstring": "Rename a table.\n\n@param oldName - Current table name\n@param newName - New table name",
          "usedTypes": []
        },
        "update": {
          "signature": "update(tableName: string, updates: TableUpdateOptions): Promise<void>;",
          "docstring": "Update a table's properties.\n\n@param tableName - Table name\n@param updates - Key-value pairs of properties to update",
          "usedTypes": [
            "TableUpdateOptions"
          ]
        },
        "getAtCell": {
          "signature": "getAtCell(address: string): Promise<TableInfo | null>;",
          "docstring": "Get the table at a specific cell position, if one exists.\n\n@param address - A1-style cell address (e.g. \"B3\")\n@returns Table information, or null if no table exists at that cell",
          "usedTypes": [
            "TableInfo"
          ]
        },
        "clearFilters": {
          "signature": "clearFilters(tableName: string): Promise<void>;",
          "docstring": "Clear all column filters on a table.\n\n@param tableName - Table name",
          "usedTypes": []
        },
        "setStylePreset": {
          "signature": "setStylePreset(tableName: string, preset: string): Promise<void>;",
          "docstring": "Set the visual style preset for a table.\n\n@param tableName - Table name\n@param preset - Style preset name (e.g. \"TableStyleLight1\")",
          "usedTypes": []
        },
        "resize": {
          "signature": "resize(name: string, newRange: string | CellRange): Promise<TableResizeReceipt>;",
          "docstring": "Resize a table to a new range.\n\n@param name - Table name\n@param newRange - New A1-style range string or CellRange object",
          "usedTypes": [
            "CellRange",
            "TableResizeReceipt"
          ]
        },
        "addColumn": {
          "signature": "addColumn(name: string, columnName: string, position?: number): Promise<TableAddColumnReceipt>;",
          "docstring": "Add a column to a table.\n\n@param name - Table name\n@param columnName - Name for the new column\n@param position - Column position (0-based index). If omitted, appends to the end.",
          "usedTypes": [
            "TableAddColumnReceipt"
          ]
        },
        "removeColumn": {
          "signature": "removeColumn(name: string, columnIndex: number): Promise<TableRemoveColumnReceipt>;",
          "docstring": "Remove a column from a table by index.\n\n@param name - Table name\n@param columnIndex - Column index within the table (0-based)",
          "usedTypes": [
            "TableRemoveColumnReceipt"
          ]
        },
        "toggleTotalsRow": {
          "signature": "toggleTotalsRow(name: string): Promise<void>;",
          "docstring": "@deprecated Use {@link setShowTotals} instead.\nToggle the totals row visibility on a table.\n\n@param name - Table name",
          "usedTypes": []
        },
        "toggleHeaderRow": {
          "signature": "toggleHeaderRow(name: string): Promise<void>;",
          "docstring": "@deprecated Use {@link setShowHeaders} instead.\nToggle the header row visibility on a table.\n\n@param name - Table name",
          "usedTypes": []
        },
        "applyAutoExpansion": {
          "signature": "applyAutoExpansion(tableName: string): Promise<void>;",
          "docstring": "Apply auto-expansion to a table, extending it to include adjacent data.\n\n@param tableName - Table name",
          "usedTypes": []
        },
        "setCalculatedColumn": {
          "signature": "setCalculatedColumn(tableName: string, colIndex: number, formula: string): Promise<void>;",
          "docstring": "Set a calculated column formula for all data cells in a table column.\n\n@param tableName - Table name\n@param colIndex - Column index within the table (0-based)\n@param formula - The formula to set (e.g. \"=[@Price]*[@Quantity]\")",
          "usedTypes": []
        },
        "clearCalculatedColumn": {
          "signature": "clearCalculatedColumn(tableName: string, colIndex: number): Promise<void>;",
          "docstring": "Clear the calculated column formula from a table column, replacing with empty values.\n\n@param tableName - Table name\n@param colIndex - Column index within the table (0-based)",
          "usedTypes": []
        },
        "getDataBodyRange": {
          "signature": "getDataBodyRange(name: string): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the data body of a table (excludes header and totals rows).\n\n@param name - Table name\n@returns A1-notation range string, or null if the table has no data body rows",
          "usedTypes": []
        },
        "getHeaderRowRange": {
          "signature": "getHeaderRowRange(name: string): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the header row of a table.\n\n@param name - Table name\n@returns A1-notation range string, or null if the table has no header row",
          "usedTypes": []
        },
        "getTotalRowRange": {
          "signature": "getTotalRowRange(name: string): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the totals row of a table.\n\n@param name - Table name\n@returns A1-notation range string, or null if the table has no totals row",
          "usedTypes": []
        },
        "addRow": {
          "signature": "addRow(tableName: string, index?: number, values?: CellValue[]): Promise<TableAddRowReceipt>;",
          "docstring": "Add a data row to a table.\n\n@param tableName - Table name\n@param index - Row index within the data body (0-based). If omitted, appends to the end.\n@param values - Optional cell values for the new row",
          "usedTypes": [
            "CellValue",
            "TableAddRowReceipt"
          ]
        },
        "deleteRow": {
          "signature": "deleteRow(tableName: string, index: number): Promise<TableDeleteRowReceipt>;",
          "docstring": "Delete a data row from a table.\n\n@param tableName - Table name\n@param index - Row index within the data body (0-based)",
          "usedTypes": [
            "TableDeleteRowReceipt"
          ]
        },
        "deleteRows": {
          "signature": "deleteRows(tableName: string, indices: number[]): Promise<void>;",
          "docstring": "Delete multiple data rows from a table by their data-body-relative indices.\n\nRows are deleted in descending index order to avoid index shifting.\n\n@param tableName - Table name\n@param indices - Array of row indices within the data body (0-based)",
          "usedTypes": []
        },
        "deleteRowsAt": {
          "signature": "deleteRowsAt(tableName: string, index: number, count?: number): Promise<void>;",
          "docstring": "Delete one or more contiguous data rows from a table starting at `index`.\n\n@param tableName - Table name\n@param index - Starting row index within the data body (0-based)\n@param count - Number of rows to delete (default 1)",
          "usedTypes": []
        },
        "getRowCount": {
          "signature": "getRowCount(tableName: string): Promise<number>;",
          "docstring": "Get the number of data rows in a table (excludes header and totals rows).\n\n@param tableName - Table name\n@returns Number of data rows",
          "usedTypes": []
        },
        "getRowRange": {
          "signature": "getRowRange(tableName: string, index: number): Promise<string>;",
          "docstring": "Get the A1-notation range for a specific data row.\n\n@param tableName - Table name\n@param index - Row index within the data body (0-based)\n@returns A1-notation range string",
          "usedTypes": []
        },
        "getRowValues": {
          "signature": "getRowValues(tableName: string, index: number): Promise<CellValue[]>;",
          "docstring": "Get the cell values of a specific data row.\n\n@param tableName - Table name\n@param index - Row index within the data body (0-based)\n@returns Array of cell values",
          "usedTypes": [
            "CellValue"
          ]
        },
        "setRowValues": {
          "signature": "setRowValues(tableName: string, index: number, values: CellValue[]): Promise<void>;",
          "docstring": "Set the cell values of a specific data row.\n\n@param tableName - Table name\n@param index - Row index within the data body (0-based)\n@param values - Cell values to set",
          "usedTypes": [
            "CellValue"
          ]
        },
        "getColumnDataBodyRange": {
          "signature": "getColumnDataBodyRange(tableName: string, columnIndex: number): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the data body cells of a table column.\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@returns A1-notation range string, or null if no data body rows",
          "usedTypes": []
        },
        "getColumnHeaderRange": {
          "signature": "getColumnHeaderRange(tableName: string, columnIndex: number): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the header cell of a table column.\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@returns A1-notation range string, or null if no header row",
          "usedTypes": []
        },
        "getColumnRange": {
          "signature": "getColumnRange(tableName: string, columnIndex: number): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the entire table column (header + data + totals).\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@returns A1-notation range string, or null if column does not exist",
          "usedTypes": []
        },
        "getColumnTotalRange": {
          "signature": "getColumnTotalRange(tableName: string, columnIndex: number): Promise<string | null>;",
          "docstring": "Get the A1-notation range covering the totals cell of a table column.\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@returns A1-notation range string, or null if no totals row",
          "usedTypes": []
        },
        "getColumnValues": {
          "signature": "getColumnValues(tableName: string, columnIndex: number): Promise<CellValue[]>;",
          "docstring": "Get the cell values of a table column (data body only).\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@returns Array of cell values",
          "usedTypes": [
            "CellValue"
          ]
        },
        "setColumnValues": {
          "signature": "setColumnValues(tableName: string, columnIndex: number, values: CellValue[]): Promise<void>;",
          "docstring": "Set the cell values of a table column (data body only).\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@param values - Cell values to set",
          "usedTypes": [
            "CellValue"
          ]
        },
        "setHighlightFirstColumn": {
          "signature": "setHighlightFirstColumn(tableName: string, value: boolean): Promise<void>;",
          "docstring": "Set whether the first column is highlighted.\n\n@param tableName - Table name\n@param value - Whether to highlight the first column",
          "usedTypes": []
        },
        "setHighlightLastColumn": {
          "signature": "setHighlightLastColumn(tableName: string, value: boolean): Promise<void>;",
          "docstring": "Set whether the last column is highlighted.\n\n@param tableName - Table name\n@param value - Whether to highlight the last column",
          "usedTypes": []
        },
        "setShowBandedColumns": {
          "signature": "setShowBandedColumns(tableName: string, value: boolean): Promise<void>;",
          "docstring": "Set whether banded columns are shown.\n\n@param tableName - Table name\n@param value - Whether to show banded columns",
          "usedTypes": []
        },
        "setShowBandedRows": {
          "signature": "setShowBandedRows(tableName: string, value: boolean): Promise<void>;",
          "docstring": "Set whether banded rows are shown.\n\n@param tableName - Table name\n@param value - Whether to show banded rows",
          "usedTypes": []
        },
        "setShowFilterButton": {
          "signature": "setShowFilterButton(tableName: string, value: boolean): Promise<void>;",
          "docstring": "Set whether filter buttons are shown on the header row.\n\n@param tableName - Table name\n@param value - Whether to show filter buttons",
          "usedTypes": []
        },
        "setShowHeaders": {
          "signature": "setShowHeaders(tableName: string, visible: boolean): Promise<void>;",
          "docstring": "Set whether the header row is visible.\n\n@param tableName - Table name\n@param visible - Whether to show the header row",
          "usedTypes": []
        },
        "setShowTotals": {
          "signature": "setShowTotals(tableName: string, visible: boolean): Promise<void>;",
          "docstring": "Set whether the totals row is visible.\n\n@param tableName - Table name\n@param visible - Whether to show the totals row",
          "usedTypes": []
        },
        "applyIconFilter": {
          "signature": "applyIconFilter(\n    tableName: string,\n    columnIndex: number,\n    icon: { set: string; index: number },\n  ): Promise<void>;",
          "docstring": "Apply an icon filter to a table column.\n\nFilters rows by conditional formatting icon: only rows whose evaluated\nCF icon matches the specified icon set and index are shown.\n\nRequires an icon set CF rule applied to the column's range.\n\n@param tableName - Table name\n@param columnIndex - Column index within the table (0-based)\n@param icon - Icon to filter by: set name (e.g. \"3Arrows\") and index (0-based)",
          "usedTypes": []
        },
        "getAutoFilter": {
          "signature": "getAutoFilter(tableName: string): Promise<FilterInfo | null>;",
          "docstring": "Get the auto-filter associated with a table.\n\n@param tableName - Table name\n@returns Filter information, or null if the table has no associated filter",
          "usedTypes": [
            "FilterInfo"
          ]
        },
        "getRows": {
          "signature": "getRows(tableName: string): Promise<TableRowCollection>;",
          "docstring": "Get a collection-like wrapper around the table's data rows.\n\nThe returned object delegates to the existing row methods on this API.\nThe `count` property is a snapshot taken at call time and does not\nlive-update.\n\n@param tableName - Table name\n@returns A TableRowCollection object",
          "usedTypes": [
            "TableRowCollection"
          ]
        }
      }
    },
    "WorksheetPivots": {
      "docstring": "Sub-API for pivot table operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(config: PivotCreateConfig): Promise<PivotTableConfig>;",
          "docstring": "Create a new pivot table on this worksheet.\n\nAccepts either:\n- **Simple config**: `{ name, dataSource: \"Sheet1!A1:D100\", rowFields: [\"Region\"], ... }`\n  Fields are auto-detected from source headers, placements are generated from field arrays.\n- **Full config**: `{ name, sourceSheetName, sourceRange, fields, placements, filters, ... }`\n  Direct wire format — no conversion needed.\n\n@param config - Pivot table configuration\n@returns The created pivot table configuration (with generated id, timestamps)",
          "usedTypes": [
            "PivotCreateConfig",
            "PivotTableConfig"
          ]
        },
        "addWithSheet": {
          "signature": "addWithSheet(\n    sheetName: string,\n    config: PivotCreateConfig,\n  ): Promise<{ sheetId: string; config: PivotTableConfig }>;",
          "docstring": "Atomically create a new sheet AND a pivot table on it.\nBoth operations happen in a single transaction for undo atomicity.\n\nAccepts the same simple or full config formats as `add()`.\n\n@param sheetName - Name for the new sheet\n@param config - Pivot table configuration\n@returns The new sheet ID and the created pivot config",
          "usedTypes": [
            "PivotCreateConfig",
            "PivotTableConfig"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a pivot table by name.\n\n@param name - Pivot table name",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all pivot tables from this worksheet.",
          "usedTypes": []
        },
        "rename": {
          "signature": "rename(name: string, newName: string): Promise<void>;",
          "docstring": "Rename a pivot table by name.\n\n@param name - Pivot table name\n@param newName - New name for the pivot table",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<PivotTableInfo[]>;",
          "docstring": "List all pivot tables on this worksheet.\n\n@returns Array of pivot table summary information",
          "usedTypes": [
            "PivotTableInfo"
          ]
        },
        "get": {
          "signature": "get(name: string): Promise<PivotTableHandle | null>;",
          "docstring": "Get a pivot table handle by name.\n\n@param name - Pivot table name\n@returns A handle for the pivot table, or null if not found",
          "usedTypes": [
            "PivotTableHandle"
          ]
        },
        "getInfo": {
          "signature": "getInfo(name: string): Promise<PivotTableInfo | null>;",
          "docstring": "Get plain data information about a pivot table by name.\n\nUnlike `get()` which returns a handle with bound methods, this returns\na plain data object suitable for serialization and inspection.\n\n@param name - Pivot table name\n@returns Pivot table info, or null if not found",
          "usedTypes": [
            "PivotTableInfo"
          ]
        },
        "has": {
          "signature": "has(name: string): Promise<boolean>;",
          "docstring": "Check if a pivot table exists by name.\n\n@param name - Pivot table name\n@returns True if the pivot table exists",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of pivot tables on this worksheet.\n\n@returns The count of pivot tables",
          "usedTypes": []
        },
        "addPlacement": {
          "signature": "addPlacement(pivotId: string, spec: PivotPlacementSpec): Promise<PivotPlacementMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PivotPlacementSpec",
            "PivotPlacementMutationReceipt"
          ]
        },
        "updatePlacement": {
          "signature": "updatePlacement(\n    pivotId: string,\n    placementId: PlacementId,\n    patch: PivotPlacementPatch,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "PivotPlacementPatch",
            "PivotKernelMutationReceipt"
          ]
        },
        "removePlacement": {
          "signature": "removePlacement(pivotId: string, placementId: PlacementId): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "PivotKernelMutationReceipt"
          ]
        },
        "movePlacement": {
          "signature": "movePlacement(\n    pivotId: string,\n    placementId: PlacementId,\n    toArea: PivotFieldArea,\n    toPosition: number,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "PivotFieldArea",
            "PivotKernelMutationReceipt"
          ]
        },
        "renameValuePlacement": {
          "signature": "renameValuePlacement(\n    pivotId: string,\n    placementId: PlacementId,\n    displayName: string | null,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "PivotKernelMutationReceipt"
          ]
        },
        "setSortByValue": {
          "signature": "setSortByValue(\n    pivotId: string,\n    axisPlacementId: PlacementId,\n    valuePlacementId: PlacementId,\n    config: { order: SortOrder; columnKey?: string } | null,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "SortOrder",
            "PivotKernelMutationReceipt"
          ]
        },
        "addField": {
          "signature": "addField(\n    name: string,\n    fieldId: string,\n    area: PivotFieldArea,\n    options?: {\n      position?: number;\n      aggregateFunction?: AggregateFunction;\n      sortOrder?: SortOrder;\n      displayName?: string;\n      showValuesAs?: ShowValuesAsConfig;\n    },\n  ): Promise<void>;",
          "docstring": "Add a field to a pivot table area, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `addPlacement(pivotId, spec)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID to add\n@param area - Target area (row, column, value, or filter)\n@param options - Optional configuration (position, aggregateFunction, sortOrder, displayName)",
          "usedTypes": [
            "PivotFieldArea",
            "AggregateFunction",
            "SortOrder",
            "ShowValuesAsConfig"
          ]
        },
        "removeField": {
          "signature": "removeField(name: string, fieldId: string, area: PivotFieldArea): Promise<void>;",
          "docstring": "Remove a field from a pivot table area, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `removePlacement(pivotId, placementId)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID to remove\n@param area - Area to remove the field from",
          "usedTypes": [
            "PivotFieldArea"
          ]
        },
        "moveField": {
          "signature": "moveField(\n    name: string,\n    fieldId: string,\n    fromArea: PivotFieldArea,\n    toArea: PivotFieldArea,\n    toPosition: number,\n  ): Promise<void>;",
          "docstring": "Move a field to a different area or position, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `movePlacement(pivotId, placementId, toArea, toPosition)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID to move\n@param fromArea - Source area\n@param toArea - Target area\n@param toPosition - Target position within the area",
          "usedTypes": [
            "PivotFieldArea"
          ]
        },
        "setAggregateFunction": {
          "signature": "setAggregateFunction(\n    pivotId: string,\n    placementId: PlacementId,\n    aggregateFunction: AggregateFunction,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "AggregateFunction",
            "PivotKernelMutationReceipt"
          ]
        },
        "setShowValuesAs": {
          "signature": "setShowValuesAs(\n    pivotId: string,\n    placementId: PlacementId,\n    showValuesAs: ShowValuesAsConfig | null,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "ShowValuesAsConfig",
            "PivotKernelMutationReceipt"
          ]
        },
        "setSortOrder": {
          "signature": "setSortOrder(\n    pivotId: string,\n    placementId: PlacementId,\n    sortOrder: SortOrder | null,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "SortOrder",
            "PivotKernelMutationReceipt"
          ]
        },
        "resetPlacement": {
          "signature": "resetPlacement(pivotId: string, placementId: PlacementId): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "PlacementId",
            "PivotKernelMutationReceipt"
          ]
        },
        "setAggregateFunctionLegacy": {
          "signature": "setAggregateFunctionLegacy(\n    name: string,\n    fieldId: string,\n    aggregateFunction: AggregateFunction,\n  ): Promise<void>;",
          "docstring": "Set the aggregate function for a value field, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `setAggregateFunction(pivotId, placementId, aggregateFunction)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID (must be in the 'value' area)\n@param aggregateFunction - New aggregation function",
          "usedTypes": [
            "AggregateFunction"
          ]
        },
        "setShowValuesAsLegacy": {
          "signature": "setShowValuesAsLegacy(\n    name: string,\n    fieldId: string,\n    showValuesAs: ShowValuesAsConfig | null,\n  ): Promise<void>;",
          "docstring": "Set the \"Show Values As\" calculation for a value field.\nOnly applies to fields in the 'value' area. Pass null to clear.\n\n@deprecated Legacy facade. Prefer `setShowValuesAs(pivotId, placementId, showValuesAs)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID (must be in the 'value' area)\n@param showValuesAs - ShowValuesAs configuration, or null to clear",
          "usedTypes": [
            "ShowValuesAsConfig"
          ]
        },
        "setSortOrderLegacy": {
          "signature": "setSortOrderLegacy(name: string, fieldId: string, sortOrder: SortOrder): Promise<void>;",
          "docstring": "Set the sort order for a row or column field, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `setSortOrder(pivotId, placementId, sortOrder)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID (must be in 'row' or 'column' area)\n@param sortOrder - Sort order ('asc', 'desc', or 'none')",
          "usedTypes": [
            "SortOrder"
          ]
        },
        "setFilter": {
          "signature": "setFilter(name: string, fieldId: string, filter: Omit<PivotFilter, 'fieldId'>): Promise<void>;",
          "docstring": "Set (add or update) a filter on a field, resolved by pivot name.\n\n@param name - Pivot table name\n@param fieldId - Field ID to filter\n@param filter - Filter configuration (without fieldId)",
          "usedTypes": [
            "PivotFilter"
          ]
        },
        "removeFilter": {
          "signature": "removeFilter(name: string, fieldId: string): Promise<void>;",
          "docstring": "Remove a filter from a field, resolved by pivot name.\n\n@param name - Pivot table name\n@param fieldId - Field ID whose filter should be removed",
          "usedTypes": []
        },
        "resetField": {
          "signature": "resetField(name: string, fieldId: string): Promise<void>;",
          "docstring": "Reset a field placement to defaults, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `resetPlacement(pivotId, placementId)`.\n\n@param name - Pivot table name\n@param fieldId - Field ID to reset",
          "usedTypes": []
        },
        "setLayout": {
          "signature": "setLayout(name: string, layout: Partial<PivotTableLayout>): Promise<PivotKernelMutationReceipt>;",
          "docstring": "Set layout options for a pivot table, resolved by pivot name.\n\n@param name - Pivot table name\n@param layout - Partial layout configuration to merge with existing",
          "usedTypes": [
            "PivotTableLayout",
            "PivotKernelMutationReceipt"
          ]
        },
        "setStyle": {
          "signature": "setStyle(name: string, style: Partial<PivotTableStyle>): Promise<void>;",
          "docstring": "Set style options for a pivot table, resolved by pivot name.\n\n@param name - Pivot table name\n@param style - Partial style configuration to merge with existing",
          "usedTypes": [
            "PivotTableStyle"
          ]
        },
        "detectFields": {
          "signature": "detectFields(\n    sourceSheetId: string,\n    range: { startRow: number; startCol: number; endRow: number; endCol: number },\n  ): Promise<any[]>;",
          "docstring": "Detect fields from source data for pivot table creation.\n\n@param sourceSheetId - Sheet ID containing the source data\n@param range - Source data range\n@returns Array of detected pivot fields",
          "usedTypes": []
        },
        "compute": {
          "signature": "compute(name: string, forceRefresh?: boolean): Promise<PivotTableResult | null>;",
          "docstring": "Compute a pivot table result by name (uses cache if available).\n\n@param name - Pivot table name\n@param forceRefresh - Force recomputation ignoring cache\n@returns Computed pivot table result",
          "usedTypes": [
            "PivotTableResult"
          ]
        },
        "queryPivot": {
          "signature": "queryPivot(\n    pivotName: string,\n    filters?: Record<string, CellValue | CellValue[]>,\n  ): Promise<PivotQueryResult | null>;",
          "docstring": "Query a pivot table by name, returning flat records optionally filtered by dimension values.\nEliminates the need to manually traverse hierarchical PivotTableResult trees.\n\n@param pivotName - Pivot table name\n@param filters - Optional dimension filters: field name → value or array of values to include\n@returns Flat query result, or null if pivot not found or not computable",
          "usedTypes": [
            "CellValue",
            "PivotQueryResult"
          ]
        },
        "refresh": {
          "signature": "refresh(name: string): Promise<PivotRefreshReceipt | PivotCommandReceipt>;",
          "docstring": "Refresh a pivot table by name (recompute without cache).\n\n@param name - Pivot table name",
          "usedTypes": [
            "PivotRefreshReceipt",
            "PivotCommandReceipt"
          ]
        },
        "refreshAll": {
          "signature": "refreshAll(): Promise<void>;",
          "docstring": "Refresh all pivot tables on this worksheet.",
          "usedTypes": []
        },
        "getDrillDownData": {
          "signature": "getDrillDownData(name: string, rowKey: string, columnKey: string): Promise<CellValue[][]>;",
          "docstring": "Get drill-down data for a pivot table cell, resolved by pivot name.\n\n@param name - Pivot table name\n@param rowKey - Row key from the pivot result\n@param columnKey - Column key from the pivot result\n@returns Source data rows that contribute to this cell",
          "usedTypes": [
            "CellValue"
          ]
        },
        "addCalculatedField": {
          "signature": "addCalculatedField(pivotId: string, field: PivotCalculatedFieldSpec): Promise<PivotKernelMutationReceipt & { calculatedFieldId: CalculatedFieldId }>;",
          "docstring": "",
          "usedTypes": [
            "PivotCalculatedFieldSpec",
            "PivotKernelMutationReceipt",
            "CalculatedFieldId"
          ]
        },
        "addCalculatedFieldAndPlace": {
          "signature": "addCalculatedFieldAndPlace(\n    pivotId: string,\n    field: PivotCalculatedFieldSpec,\n    placement: Omit<PivotPlacementSpec, 'source' | 'fieldId'>,\n  ): Promise<PivotKernelMutationReceipt & { calculatedFieldId: CalculatedFieldId; placementId: PlacementId }>;",
          "docstring": "",
          "usedTypes": [
            "PivotCalculatedFieldSpec",
            "PivotPlacementSpec",
            "PivotKernelMutationReceipt",
            "CalculatedFieldId",
            "PlacementId"
          ]
        },
        "updateCalculatedField": {
          "signature": "updateCalculatedField(\n    pivotId: string,\n    calculatedFieldId: CalculatedFieldId,\n    updates: Partial<Pick<PivotCalculatedFieldSpec, 'name' | 'formula'>>,\n  ): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "CalculatedFieldId",
            "PivotCalculatedFieldSpec",
            "PivotKernelMutationReceipt"
          ]
        },
        "removeCalculatedField": {
          "signature": "removeCalculatedField(pivotId: string, calculatedFieldId: CalculatedFieldId): Promise<PivotKernelMutationReceipt>;",
          "docstring": "",
          "usedTypes": [
            "CalculatedFieldId",
            "PivotKernelMutationReceipt"
          ]
        },
        "addCalculatedFieldLegacy": {
          "signature": "addCalculatedFieldLegacy(name: string, field: CalculatedField): Promise<void>;",
          "docstring": "Add a calculated field to a pivot table, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer define-only `addCalculatedField(pivotId, spec)`.\n\n@param name - Pivot table name\n@param field - Calculated field definition (fieldId, name, formula)",
          "usedTypes": [
            "CalculatedField"
          ]
        },
        "removeCalculatedFieldLegacy": {
          "signature": "removeCalculatedFieldLegacy(name: string, fieldId: string): Promise<void>;",
          "docstring": "Remove a calculated field from a pivot table, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `removeCalculatedField(pivotId, calculatedFieldId)`.\n\n@param name - Pivot table name\n@param fieldId - Calculated field ID to remove",
          "usedTypes": []
        },
        "updateCalculatedFieldLegacy": {
          "signature": "updateCalculatedFieldLegacy(\n    name: string,\n    fieldId: string,\n    updates: Partial<Pick<CalculatedField, 'name' | 'formula'>>,\n  ): Promise<void>;",
          "docstring": "Update a calculated field on a pivot table, resolved by pivot name.\n\n@deprecated Legacy facade. Prefer `updateCalculatedField(pivotId, calculatedFieldId, patch)`.\n\n@param name - Pivot table name\n@param fieldId - Calculated field ID to update\n@param updates - Partial updates (name and/or formula)",
          "usedTypes": [
            "CalculatedField"
          ]
        },
        "getRange": {
          "signature": "getRange(name: string): Promise<CellRange | null>;",
          "docstring": "Get the full range occupied by the rendered pivot table, resolved by pivot name.\n\n@param name - Pivot table name\n@returns CellRange covering the entire pivot table, or null if not computed",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getDataBodyRange": {
          "signature": "getDataBodyRange(name: string): Promise<CellRange | null>;",
          "docstring": "Get the range of the data body, resolved by pivot name.\n\n@param name - Pivot table name\n@returns CellRange covering the data body, or null if not computed",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getColumnLabelRange": {
          "signature": "getColumnLabelRange(name: string): Promise<CellRange | null>;",
          "docstring": "Get the range of column label headers, resolved by pivot name.\n\n@param name - Pivot table name\n@returns CellRange covering the column headers, or null if not computed",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getRowLabelRange": {
          "signature": "getRowLabelRange(name: string): Promise<CellRange | null>;",
          "docstring": "Get the range of row label headers, resolved by pivot name.\n\n@param name - Pivot table name\n@returns CellRange covering the row headers, or null if not computed",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getFilterAxisRange": {
          "signature": "getFilterAxisRange(name: string): Promise<CellRange | null>;",
          "docstring": "Get the range of the filter area, resolved by pivot name.\n\n@param name - Pivot table name\n@returns CellRange covering filter dropdowns, or null if no filter fields",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getAllPivotItems": {
          "signature": "getAllPivotItems(name: string): Promise<PivotFieldItems[]>;",
          "docstring": "Get pivot items for all placed fields, resolved by pivot name.\n\n@param name - Pivot table name\n@returns Items grouped by field",
          "usedTypes": [
            "PivotFieldItems"
          ]
        },
        "setPivotItemVisibility": {
          "signature": "setPivotItemVisibility(\n    name: string,\n    fieldId: string,\n    visibleItems: Record<string, boolean>,\n  ): Promise<void>;",
          "docstring": "Set visibility of specific items in a field, resolved by pivot name.\n\n@param name - Pivot table name\n@param fieldId - Field ID\n@param visibleItems - Map of item value (as string) to visibility boolean",
          "usedTypes": []
        },
        "toggleExpanded": {
          "signature": "toggleExpanded(name: string, headerKey: string, isRow: boolean): Promise<boolean>;",
          "docstring": "Toggle expansion state for a header, resolved by pivot name.\n\n@param name - Pivot table name\n@param headerKey - Header key to toggle\n@param isRow - Whether this is a row header (true) or column header (false)\n@returns The new expansion state (true = expanded, false = collapsed)",
          "usedTypes": []
        },
        "setAllExpanded": {
          "signature": "setAllExpanded(name: string, expanded: boolean): Promise<void>;",
          "docstring": "Set expansion state for all headers, resolved by pivot name.\n\n@param name - Pivot table name\n@param expanded - Whether all headers should be expanded (true) or collapsed (false)",
          "usedTypes": []
        },
        "getExpansionState": {
          "signature": "getExpansionState(name: string): Promise<PivotExpansionState>;",
          "docstring": "Get the current expansion state, resolved by pivot name.\n\n@param name - Pivot table name\n@returns Expansion state with expandedRows and expandedColumns maps",
          "usedTypes": [
            "PivotExpansionState"
          ]
        },
        "getDataSourceType": {
          "signature": "getDataSourceType(name: string): Promise<DataSourceType>;",
          "docstring": "Get the data source type of a pivot table (range, table, or external).\n\n@param name - Pivot table name\n@returns The data source type",
          "usedTypes": [
            "DataSourceType"
          ]
        },
        "setDataSource": {
          "signature": "setDataSource(name: string, dataSource: string): Promise<void>;",
          "docstring": "Change the source data range for a pivot table without refreshing it.\n\n`dataSource` must be a qualified A1 range such as `Sheet1!A1:D100` or\n`'Bob''s Data'!A1:D100`.",
          "usedTypes": []
        },
        "getAllowMultipleFiltersPerField": {
          "signature": "getAllowMultipleFiltersPerField(name: string): Promise<boolean>;",
          "docstring": "Get whether multiple filters per field are allowed on a pivot table.\n\n@param name - Pivot table name\n@returns True if multiple filters per field are allowed",
          "usedTypes": []
        },
        "setAllowMultipleFiltersPerField": {
          "signature": "setAllowMultipleFiltersPerField(name: string, allow: boolean): Promise<void>;",
          "docstring": "Set whether multiple filters per field are allowed on a pivot table.\n\n@param name - Pivot table name\n@param allow - True to allow multiple filters per field",
          "usedTypes": []
        },
        "getAutoFormat": {
          "signature": "getAutoFormat(name: string): Promise<boolean>;",
          "docstring": "Get whether the pivot table auto-formats when refreshed.\n\n@param name - Pivot table name\n@returns True if auto-formatting is enabled",
          "usedTypes": []
        },
        "setAutoFormat": {
          "signature": "setAutoFormat(name: string, autoFormat: boolean): Promise<void>;",
          "docstring": "Set whether the pivot table auto-formats when refreshed.\n\n@param name - Pivot table name\n@param autoFormat - True to enable auto-formatting",
          "usedTypes": []
        },
        "getPreserveFormatting": {
          "signature": "getPreserveFormatting(name: string): Promise<boolean>;",
          "docstring": "Get whether custom formatting is preserved on refresh.\n\n@param name - Pivot table name\n@returns True if custom formatting is preserved",
          "usedTypes": []
        },
        "setPreserveFormatting": {
          "signature": "setPreserveFormatting(name: string, preserve: boolean): Promise<void>;",
          "docstring": "Set whether custom formatting is preserved on refresh.\n\n@param name - Pivot table name\n@param preserve - True to preserve custom formatting",
          "usedTypes": []
        },
        "getDataHierarchy": {
          "signature": "getDataHierarchy(name: string, row: number, col: number): Promise<PivotDataHierarchyInfo | null>;",
          "docstring": "Identify which data hierarchy (value field) a pivot cell belongs to.\n\nGiven an output cell position (row, col) in the rendered pivot table,\nreturns information about the value field (aggregate) that produced the cell.\n\n@param name - Pivot table name\n@param row - 0-based row index in the rendered pivot table\n@param col - 0-based column index in the rendered pivot table\n@returns Data hierarchy info, or null if the cell is not a data cell",
          "usedTypes": [
            "PivotDataHierarchyInfo"
          ]
        },
        "getPivotItems": {
          "signature": "getPivotItems(name: string, axis: 'row' | 'column', row: number, col: number): Promise<PivotItemLocation[] | null>;",
          "docstring": "Identify which row/column items intersect at a given pivot output cell.\n\nReturns the pivot items (group values) from the specified axis that\ndefine the cell's position in the pivot table.\n\n@param name - Pivot table name\n@param axis - 'row' or 'column'\n@param row - 0-based row index in the rendered pivot table\n@param col - 0-based column index in the rendered pivot table\n@returns Array of pivot item locations, or null if the cell is outside the data area",
          "usedTypes": [
            "PivotItemLocation"
          ]
        },
        "getEnableMultipleFilterItems": {
          "signature": "getEnableMultipleFilterItems(name: string, fieldId: string): Promise<boolean>;",
          "docstring": "Get whether multiple filter items per field are enabled for a specific field.\n\nWhen enabled, multiple `PivotFilter` entries can exist for the same field,\ncombined with AND logic during evaluation.\n\n@param name - Pivot table name\n@param fieldId - Field ID to check\n@returns True if multiple filter items are enabled for this field",
          "usedTypes": []
        },
        "setEnableMultipleFilterItems": {
          "signature": "setEnableMultipleFilterItems(name: string, fieldId: string, enabled: boolean): Promise<void>;",
          "docstring": "Set whether multiple filter items per field are enabled for a specific field.\n\nWhen enabled, multiple `PivotFilter` entries can exist for the same field,\ncombined with AND logic during evaluation.\n\n@param name - Pivot table name\n@param fieldId - Field ID to configure\n@param enabled - True to enable multiple filter items",
          "usedTypes": []
        }
      }
    },
    "WorksheetSlicers": {
      "docstring": "Sub-API for slicer operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(config: SlicerConfig): Promise<Slicer>;",
          "docstring": "Create a new slicer on this worksheet.\n\n@param config - Slicer configuration (table, column, position)\n@returns The created slicer with full state",
          "usedTypes": [
            "SlicerConfig",
            "Slicer"
          ]
        },
        "remove": {
          "signature": "remove(slicerId: string): Promise<void>;",
          "docstring": "Remove a slicer from this worksheet.\n\n@param slicerId - ID of the slicer to remove",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all slicers from this worksheet.",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<SlicerInfo[]>;",
          "docstring": "List all slicers on this worksheet.\n\n@returns Array of slicer summary information",
          "usedTypes": [
            "SlicerInfo"
          ]
        },
        "has": {
          "signature": "has(slicerId: string): Promise<boolean>;",
          "docstring": "Check if a slicer exists by ID.\n\n@param slicerId - ID of the slicer\n@returns True if the slicer exists",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of slicers on this worksheet.\n\n@returns The count of slicers",
          "usedTypes": []
        },
        "get": {
          "signature": "get(slicerId: string): Promise<Slicer | null>;",
          "docstring": "Get a slicer by ID, including full state.\n\n@param slicerId - ID of the slicer\n@returns Full slicer state, or null if not found",
          "usedTypes": [
            "Slicer"
          ]
        },
        "getByName": {
          "signature": "getByName(name: string): Promise<Slicer | null>;",
          "docstring": "Find a slicer by its name, or null if not found.\n\n@param name - Slicer name to search for\n@returns Full slicer state, or null if no slicer matches",
          "usedTypes": [
            "Slicer"
          ]
        },
        "getItemAt": {
          "signature": "getItemAt(index: number): Promise<SlicerInfo | null>;",
          "docstring": "Get a slicer by its zero-based index in the list.\n\n@param index - Zero-based index of the slicer\n@returns Slicer summary information, or null if index is out of range",
          "usedTypes": [
            "SlicerInfo"
          ]
        },
        "getItems": {
          "signature": "getItems(slicerId: string): Promise<SlicerItem[]>;",
          "docstring": "Get the items (values) available in a slicer.\n\n@param slicerId - ID of the slicer\n@returns Array of slicer items with selection state",
          "usedTypes": [
            "SlicerItem"
          ]
        },
        "getItem": {
          "signature": "getItem(slicerId: string, key: CellValue): Promise<SlicerItem>;",
          "docstring": "Get a slicer item by its string key.\nThrows if no item matches — use when you expect the item to exist.\nFor conditional checks, use {@link getItemOrNullObject} which returns null instead.\n\n@param slicerId - ID of the slicer\n@param key - The value to look up (matched via string coercion)\n@returns The matching slicer item\n@throws KernelError if no item matches the key",
          "usedTypes": [
            "CellValue",
            "SlicerItem"
          ]
        },
        "getItemOrNullObject": {
          "signature": "getItemOrNullObject(slicerId: string, key: CellValue): Promise<SlicerItem | null>;",
          "docstring": "Get a slicer item by its string key, or null if not found.\nNon-throwing alternative to {@link getItem} — use for conditional checks.\n\n@param slicerId - ID of the slicer\n@param key - The value to look up (matched via string coercion)\n@returns The matching slicer item, or null if not found",
          "usedTypes": [
            "CellValue",
            "SlicerItem"
          ]
        },
        "setSelection": {
          "signature": "setSelection(slicerId: string, selectedItems: CellValue[]): Promise<void>;",
          "docstring": "Set the selected items in a slicer, replacing any existing selection.\n\n@param slicerId - ID of the slicer\n@param selectedItems - Array of values to select",
          "usedTypes": [
            "CellValue"
          ]
        },
        "clearSelection": {
          "signature": "clearSelection(slicerId: string): Promise<void>;",
          "docstring": "Clear all selections in a slicer (show all items).\n\n@param slicerId - ID of the slicer",
          "usedTypes": []
        },
        "duplicate": {
          "signature": "duplicate(slicerId: string, offset?: { x?: number; y?: number }): Promise<string>;",
          "docstring": "Duplicate a slicer with an optional position offset.\n\n@param slicerId - ID of the slicer to duplicate\n@param offset - Position offset in pixels (defaults to { x: 20, y: 20 })\n@returns The ID of the newly created slicer",
          "usedTypes": []
        },
        "update": {
          "signature": "update(slicerId: string, updates: Partial<SlicerConfig>): Promise<void>;",
          "docstring": "Update a slicer's configuration.\n\n@param slicerId - ID of the slicer\n@param updates - Partial configuration updates",
          "usedTypes": [
            "SlicerConfig"
          ]
        },
        "getState": {
          "signature": "getState(slicerId: string): Promise<SlicerState>;",
          "docstring": "Get the enriched runtime state of a slicer.\n\n@param slicerId - ID of the slicer\n@returns Enriched slicer state including computed items and connection status",
          "usedTypes": [
            "SlicerState"
          ]
        }
      }
    },
    "WorksheetSparklines": {
      "docstring": "Sub-API for sparkline operations on a worksheet.",
      "functions": {
        "add": {
          "signature": "add(\n    cell: string,\n    dataRange: string | CellRange,\n    type: SparklineType,\n    options?: CreateSparklineOptions,\n  ): Promise<Sparkline>;",
          "docstring": "Add a sparkline to a cell (A1 address form).\n\n@param cell - A1-style cell address (e.g. \"B1\")\n@param dataRange - Data range (A1-style string or CellRange)\n@param type - Sparkline type (line, column, winLoss)\n@param options - Optional creation settings\n@returns The created sparkline",
          "usedTypes": [
            "CellRange",
            "SparklineType",
            "CreateSparklineOptions",
            "Sparkline"
          ]
        },
        "addGroup": {
          "signature": "addGroup(\n    cells: Array<{ row: number; col: number }>,\n    dataRanges: CellRange[],\n    type: SparklineType,\n    options?: CreateSparklineGroupOptions,\n  ): Promise<SparklineGroup>;",
          "docstring": "Add a group of sparklines with shared settings.\n\n@param cells - Array of cell positions\n@param dataRanges - Array of data ranges (must match cells length)\n@param type - Sparkline type\n@param options - Optional group creation settings\n@returns The created sparkline group",
          "usedTypes": [
            "CellRange",
            "SparklineType",
            "CreateSparklineGroupOptions",
            "SparklineGroup"
          ]
        },
        "get": {
          "signature": "get(sparklineId: string): Promise<Sparkline | null>;",
          "docstring": "Get a sparkline by ID.\n\n@param sparklineId - Sparkline identifier\n@returns The sparkline, or null if not found",
          "usedTypes": [
            "Sparkline"
          ]
        },
        "getAtCell": {
          "signature": "getAtCell(address: string): Promise<Sparkline | null>;",
          "docstring": "Get the sparkline at a specific cell.\n\n@param address - A1-style cell address (e.g. \"B1\")\n@returns The sparkline at the cell, or null if none",
          "usedTypes": [
            "Sparkline"
          ]
        },
        "list": {
          "signature": "list(): Promise<Sparkline[]>;",
          "docstring": "List all sparklines in the worksheet.\n\n@returns Array of all sparklines",
          "usedTypes": [
            "Sparkline"
          ]
        },
        "getGroup": {
          "signature": "getGroup(groupId: string): Promise<SparklineGroup | null>;",
          "docstring": "Get a sparkline group by ID.\n\n@param groupId - Group identifier\n@returns The sparkline group, or null if not found",
          "usedTypes": [
            "SparklineGroup"
          ]
        },
        "listGroups": {
          "signature": "listGroups(): Promise<SparklineGroup[]>;",
          "docstring": "List all sparkline groups in the worksheet.\n\n@returns Array of all sparkline groups",
          "usedTypes": [
            "SparklineGroup"
          ]
        },
        "update": {
          "signature": "update(sparklineId: string, updates: Partial<Sparkline>): Promise<void>;",
          "docstring": "Update a sparkline's settings.\n\n@param sparklineId - Sparkline identifier\n@param updates - Partial sparkline properties to update",
          "usedTypes": [
            "Sparkline"
          ]
        },
        "updateGroup": {
          "signature": "updateGroup(groupId: string, updates: Partial<SparklineGroup>): Promise<void>;",
          "docstring": "Update a sparkline group's settings (applies to all members).\n\n@param groupId - Group identifier\n@param updates - Partial group properties to update",
          "usedTypes": [
            "SparklineGroup"
          ]
        },
        "remove": {
          "signature": "remove(sparklineId: string): Promise<void>;",
          "docstring": "Remove a sparkline.\n\n@param sparklineId - Sparkline identifier",
          "usedTypes": []
        },
        "removeGroup": {
          "signature": "removeGroup(groupId: string): Promise<void>;",
          "docstring": "Remove a sparkline group and all its member sparklines.\n\n@param groupId - Group identifier",
          "usedTypes": []
        },
        "clearInRange": {
          "signature": "clearInRange(range: string | CellRange): Promise<void>;",
          "docstring": "Clear all sparklines whose cell falls within a range.\n\n@param range - A1-style range string or CellRange object",
          "usedTypes": [
            "CellRange"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Clear all sparklines in the worksheet.",
          "usedTypes": []
        },
        "clearAll": {
          "signature": "clearAll(): Promise<void>;",
          "docstring": "Clear all sparklines in the worksheet.\n@deprecated Use `clear()` instead.",
          "usedTypes": []
        },
        "addToGroup": {
          "signature": "addToGroup(sparklineId: string, groupId: string): Promise<void>;",
          "docstring": "Add a sparkline to a group.\n\n@param sparklineId - Sparkline identifier\n@param groupId - Group identifier",
          "usedTypes": []
        },
        "removeFromGroup": {
          "signature": "removeFromGroup(sparklineId: string): Promise<void>;",
          "docstring": "Remove a sparkline from its group (becomes standalone).\n\n@param sparklineId - Sparkline identifier",
          "usedTypes": []
        },
        "ungroupAll": {
          "signature": "ungroupAll(groupId: string): Promise<string[]>;",
          "docstring": "Ungroup all sparklines in a group (members become standalone).\n\n@param groupId - Group identifier\n@returns IDs of sparklines that were ungrouped",
          "usedTypes": []
        },
        "has": {
          "signature": "has(address: string): Promise<boolean>;",
          "docstring": "Check if a cell has a sparkline.\n\n@param address - A1-style cell address (e.g. \"B1\")\n@returns True if the cell has a sparkline",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of sparklines on this sheet.\n\n@returns The count of sparklines",
          "usedTypes": []
        },
        "getWithDataInRange": {
          "signature": "getWithDataInRange(range: string | CellRange): Promise<Sparkline[]>;",
          "docstring": "Get sparklines whose data range intersects with a given range.\n\n@param range - A1-style range string or CellRange object\n@returns Sparklines with data in the range",
          "usedTypes": [
            "CellRange",
            "Sparkline"
          ]
        }
      }
    },
    "WorksheetComments": {
      "docstring": "Sub-API for comment and note operations on a worksheet.",
      "functions": {
        "addNote": {
          "signature": "addNote(cell: string, options: { text: string; author?: string }): Promise<void>;",
          "docstring": "Add a note to a cell (options object form).\n\n@param cell - A1-style cell address (e.g. \"A1\")\n@param options - Note text and optional author",
          "usedTypes": []
        },
        "setNote": {
          "signature": "setNote(address: string, text: string, author?: string): Promise<void>;",
          "docstring": "@deprecated Use the options-object overload instead.\nSet the note for a cell (overwrites any existing note).\n\n@param address - A1-style cell address (e.g. \"A1\")\n@param text - Note text\n@param author - Optional author name (defaults to 'api')\n@deprecated Use the options-object overload instead.",
          "usedTypes": []
        },
        "getNote": {
          "signature": "getNote(address: string): Promise<Note | null>;",
          "docstring": "Get the note for a cell as a Note object.\n\n@param address - A1-style cell address\n@returns The Note object, or null if no note",
          "usedTypes": [
            "Note"
          ]
        },
        "removeNote": {
          "signature": "removeNote(address: string): Promise<void>;",
          "docstring": "Remove the note from a cell.\n\n@param address - A1-style cell address",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of comments (notes + threaded) on this worksheet.",
          "usedTypes": []
        },
        "noteCount": {
          "signature": "noteCount(): Promise<number>;",
          "docstring": "Get the number of notes (legacy comments) in the worksheet.\n\n@returns The count of notes only (excludes threaded comments)",
          "usedTypes": []
        },
        "listNotes": {
          "signature": "listNotes(): Promise<Note[]>;",
          "docstring": "List all notes (legacy comments) in the worksheet.\n\n@returns Array of notes",
          "usedTypes": [
            "Note"
          ]
        },
        "getNoteAt": {
          "signature": "getNoteAt(index: number): Promise<Note | null>;",
          "docstring": "Get a note by index from the list of all notes.\n\n@param index - Zero-based index into the notes list\n@returns The Note at that index, or null if out of range",
          "usedTypes": [
            "Note"
          ]
        },
        "setNoteVisible": {
          "signature": "setNoteVisible(address: string, visible: boolean): Promise<void>;",
          "docstring": "Set the visibility of a note at the given cell address.\n\n@param address - A1-style cell address\n@param visible - Whether the note should be visible",
          "usedTypes": []
        },
        "setNoteHeight": {
          "signature": "setNoteHeight(address: string, height: number): Promise<void>;",
          "docstring": "Set the height of a note callout box in points.\n\n@param address - A1-style cell address\n@param height - Height in points",
          "usedTypes": []
        },
        "setNoteWidth": {
          "signature": "setNoteWidth(address: string, width: number): Promise<void>;",
          "docstring": "Set the width of a note callout box in points.\n\n@param address - A1-style cell address\n@param width - Width in points",
          "usedTypes": []
        },
        "add": {
          "signature": "add(cell: string, options: { text: string; author?: string }): Promise<Comment>;",
          "docstring": "Add a threaded comment to a cell (options object form).\n\n@param cell - A1-style cell address\n@param options - Comment text and optional author",
          "usedTypes": [
            "Comment"
          ]
        },
        "update": {
          "signature": "update(commentId: string, updates: CommentUpdate): Promise<void>;",
          "docstring": "Update an existing comment.\n\n@param commentId - Comment identifier\n@param updates - Object with fields to update (text, mentions, or both)",
          "usedTypes": [
            "CommentUpdate"
          ]
        },
        "remove": {
          "signature": "remove(commentId: string): Promise<void>;",
          "docstring": "Remove a threaded comment by ID.\n\n@param commentId - Comment identifier",
          "usedTypes": []
        },
        "resolveThread": {
          "signature": "resolveThread(threadId: string, resolved: boolean): Promise<void>;",
          "docstring": "Set the resolved state of a comment thread.\n\n@param threadId - Thread identifier (cell ID)\n@param resolved - Whether the thread should be marked as resolved",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<Comment[]>;",
          "docstring": "List all comments in the worksheet.\n\n@returns Array of all comments",
          "usedTypes": [
            "Comment"
          ]
        },
        "getForCell": {
          "signature": "getForCell(address: string): Promise<Comment[]>;",
          "docstring": "Get all comments for a specific cell.\n\n@param address - A1-style cell address\n@returns Array of comments for the cell",
          "usedTypes": [
            "Comment"
          ]
        },
        "addReply": {
          "signature": "addReply(commentId: string, text: string, author: string): Promise<Comment>;",
          "docstring": "Add a reply to an existing comment.\n\n@param commentId - ID of the comment to reply to\n@param text - Reply text\n@param author - Author name or identifier\n@returns The created reply comment",
          "usedTypes": [
            "Comment"
          ]
        },
        "convertNoteToThread": {
          "signature": "convertNoteToThread(commentId: string): Promise<Comment>;",
          "docstring": "Convert a legacy note into a modern threaded comment.\n\nFlips `commentType` to `'threadedComment'`, clears note callout geometry\n(`noteHeight`/`noteWidth`/`visible`/`shapeId`), and assigns `threadId`.\nIdempotent on a comment that is already a threaded comment.\n\n@param commentId - ID of the note to convert\n@returns The updated comment so the caller can re-render in thread mode",
          "usedTypes": [
            "Comment"
          ]
        },
        "getThread": {
          "signature": "getThread(commentId: string): Promise<Comment[]>;",
          "docstring": "Get all comments in a thread (root + replies), sorted by createdAt.\n\n@param commentId - ID of any comment in the thread\n@returns Array of comments in the thread",
          "usedTypes": [
            "Comment"
          ]
        },
        "getById": {
          "signature": "getById(commentId: string): Promise<Comment | null>;",
          "docstring": "Get a single comment by its ID.\n\n@param commentId - Comment identifier\n@returns The comment, or null if not found",
          "usedTypes": [
            "Comment"
          ]
        },
        "getLocation": {
          "signature": "getLocation(commentId: string): Promise<string | null>;",
          "docstring": "Get the A1-style cell address for a comment.\n\nResolves the comment's internal cell reference (CellId) to a\nhuman-readable address like \"A1\", \"B3\", etc.\n\n@param commentId - Comment identifier\n@returns The A1-style cell address, or null if the comment doesn't exist",
          "usedTypes": []
        },
        "getParentByReplyId": {
          "signature": "getParentByReplyId(replyId: string): Promise<Comment | null>;",
          "docstring": "Get the parent comment for a reply.\n\n@param replyId - ID of the reply comment\n@returns The parent comment, or null if not found or not a reply",
          "usedTypes": [
            "Comment"
          ]
        },
        "getReplyCount": {
          "signature": "getReplyCount(commentId: string): Promise<number>;",
          "docstring": "Get the number of replies in a thread (excluding the root comment).\n\n@param commentId - ID of any comment in the thread\n@returns The reply count",
          "usedTypes": []
        },
        "getReplyAt": {
          "signature": "getReplyAt(commentId: string, index: number): Promise<Comment | null>;",
          "docstring": "Get a reply at a specific index within a thread (zero-based, excludes root).\n\n@param commentId - ID of any comment in the thread\n@param index - Zero-based index into the replies\n@returns The reply comment, or null if out of range",
          "usedTypes": [
            "Comment"
          ]
        },
        "getNoteLocation": {
          "signature": "getNoteLocation(address: string): Promise<string | null>;",
          "docstring": "Get the A1-style cell address for a note.\n\n@param address - A1-style cell address\n@returns The A1-style cell address, or null if no note exists at that address",
          "usedTypes": []
        },
        "hasComment": {
          "signature": "hasComment(address: string): Promise<boolean>;",
          "docstring": "Check if a cell has any comments.\n\n@param address - A1-style cell address\n@returns True if the cell has at least one comment",
          "usedTypes": []
        },
        "removeForCell": {
          "signature": "removeForCell(address: string): Promise<number>;",
          "docstring": "Remove all comments on a cell.\n\n@param address - A1-style cell address\n@returns The number of comments removed",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Clear all comments on the worksheet.",
          "usedTypes": []
        },
        "clean": {
          "signature": "clean(): Promise<number>;",
          "docstring": "Remove orphaned comments (comments referencing non-existent cells).\n\n@returns The number of orphaned comments removed",
          "usedTypes": []
        }
      }
    },
    "WorksheetCustomProperties": {
      "docstring": "WorksheetCustomProperties — Sub-API for sheet-level custom properties.\n\nProvides a key-value store scoped to a single worksheet.\nProperties are persisted via sheet settings as a JSON-serialized object.",
      "functions": {
        "get": {
          "signature": "get(key: string): Promise<string | number | boolean | undefined>;",
          "docstring": "Get a custom property value by key.\n\n@param key - Property key\n@returns The property value, or undefined if not set",
          "usedTypes": []
        },
        "set": {
          "signature": "set(key: string, value: string | number | boolean): Promise<void>;",
          "docstring": "Set a custom property.\n\n@param key - Property key\n@param value - Property value (string, number, or boolean)",
          "usedTypes": []
        },
        "delete": {
          "signature": "delete(key: string): Promise<boolean>;",
          "docstring": "Delete a custom property.\n\n@param key - Property key to delete\n@returns True if the property existed and was deleted, false otherwise",
          "usedTypes": []
        },
        "getAll": {
          "signature": "getAll(): Promise<Record<string, string | number | boolean>>;",
          "docstring": "Get all custom properties as a record.\n\n@returns Record of all custom property key-value pairs",
          "usedTypes": []
        },
        "count": {
          "signature": "count(): Promise<number>;",
          "docstring": "Get the count of custom properties.\n\n@returns Number of custom properties currently set",
          "usedTypes": []
        }
      }
    },
    "WorksheetHyperlinks": {
      "docstring": "WorksheetHyperlinks — Sub-API for cell hyperlink operations.\n\nProvides methods to set, get, and remove hyperlinks on cells.",
      "functions": {
        "set": {
          "signature": "set(address: string, url: string): Promise<void>;",
          "docstring": "Set a hyperlink on a cell.\n\n@param address - A1-style cell address (e.g. \"A1\")\n@param url - Hyperlink URL",
          "usedTypes": []
        },
        "get": {
          "signature": "get(address: string): Promise<string | null>;",
          "docstring": "Get the hyperlink URL for a cell.\n\n@param address - A1-style cell address\n@returns The hyperlink URL, or null if no hyperlink",
          "usedTypes": []
        },
        "has": {
          "signature": "has(address: string): Promise<boolean>;",
          "docstring": "Check if a cell has a hyperlink.\n\n@param address - A1-style cell address\n@returns True if the cell has a hyperlink",
          "usedTypes": []
        },
        "remove": {
          "signature": "remove(address: string): Promise<void>;",
          "docstring": "Remove a hyperlink from a cell.\n\n@param address - A1-style cell address",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<Array<{ address: string; url: string }>>;",
          "docstring": "List all hyperlinks in the worksheet.\n\n@returns Array of hyperlink entries with cell address and URL",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all hyperlinks from the worksheet.",
          "usedTypes": []
        }
      }
    },
    "WorksheetOutline": {
      "docstring": "Sub-API for outline (row/column grouping) operations on a worksheet.",
      "functions": {
        "groupRows": {
          "signature": "groupRows(startRow: number, endRow: number): Promise<void>;",
          "docstring": "Group rows in a range.\n\n@param startRow - Start row index (0-based, inclusive)\n@param endRow - End row index (0-based, inclusive)",
          "usedTypes": []
        },
        "ungroupRows": {
          "signature": "ungroupRows(startRow: number, endRow: number): Promise<void>;",
          "docstring": "Ungroup rows in a range.\n\n@param startRow - Start row index (0-based, inclusive)\n@param endRow - End row index (0-based, inclusive)",
          "usedTypes": []
        },
        "groupColumns": {
          "signature": "groupColumns(startCol: number, endCol: number): Promise<void>;",
          "docstring": "Group columns in a range.\n\n@param startCol - Start column index (0-based, inclusive)\n@param endCol - End column index (0-based, inclusive)",
          "usedTypes": []
        },
        "ungroupColumns": {
          "signature": "ungroupColumns(startCol: number, endCol: number): Promise<void>;",
          "docstring": "Ungroup columns in a range.\n\n@param startCol - Start column index (0-based, inclusive)\n@param endCol - End column index (0-based, inclusive)",
          "usedTypes": []
        },
        "toggleCollapsed": {
          "signature": "toggleCollapsed(groupId: string): Promise<void>;",
          "docstring": "Toggle the collapsed state of a group.\n\n@param groupId - Group identifier",
          "usedTypes": []
        },
        "expandAll": {
          "signature": "expandAll(): Promise<void>;",
          "docstring": "Expand all groups in the worksheet.",
          "usedTypes": []
        },
        "collapseAll": {
          "signature": "collapseAll(): Promise<void>;",
          "docstring": "Collapse all groups in the worksheet.",
          "usedTypes": []
        },
        "getState": {
          "signature": "getState(): Promise<GroupState>;",
          "docstring": "Get the full group state for the worksheet.\n\n@returns Group state including row groups, column groups, and max levels",
          "usedTypes": [
            "GroupState"
          ]
        },
        "getLevel": {
          "signature": "getLevel(type: 'row' | 'column', index: number): Promise<number>;",
          "docstring": "Get the outline level of a specific row or column.\n\n@param type - Whether to query a row or column\n@param index - Row or column index (0-based)\n@returns The outline level (0 if not in any group)",
          "usedTypes": []
        },
        "getMaxLevel": {
          "signature": "getMaxLevel(type: 'row' | 'column'): Promise<number>;",
          "docstring": "Get the maximum outline level for rows or columns.\n\n@param type - Whether to query rows or columns\n@returns The maximum outline level",
          "usedTypes": []
        },
        "subtotal": {
          "signature": "subtotal(config: SubtotalConfig): Promise<SubtotalResult>;",
          "docstring": "Apply automatic subtotals.\n\n@param config - Subtotal configuration",
          "usedTypes": [
            "SubtotalConfig",
            "SubtotalResult"
          ]
        },
        "getSettings": {
          "signature": "getSettings(): Promise<OutlineSettings>;",
          "docstring": "Get the outline display settings.\n\n@returns Current outline settings",
          "usedTypes": [
            "OutlineSettings"
          ]
        },
        "setSettings": {
          "signature": "setSettings(settings: Partial<OutlineSettings>): Promise<void>;",
          "docstring": "Update outline display settings.\n\n@param settings - Partial outline settings to update",
          "usedTypes": [
            "OutlineSettings"
          ]
        },
        "showOutlineLevels": {
          "signature": "showOutlineLevels(rowLevels: number, colLevels: number): Promise<void>;",
          "docstring": "Show outline to a specific level for rows and/or columns.\nGroups at levels > the specified level are collapsed; groups at levels <= are expanded.\nPass 0 to collapse all, or a number > maxLevel to expand all.\n\n@param rowLevels - Target outline level for rows (0 = collapse all rows)\n@param colLevels - Target outline level for columns (0 = collapse all columns)",
          "usedTypes": []
        }
      }
    },
    "WorksheetProtection": {
      "docstring": "Sub-API for worksheet protection operations.",
      "functions": {
        "isProtected": {
          "signature": "isProtected(): Promise<boolean>;",
          "docstring": "Check whether the sheet is currently protected.\n\n@returns True if the sheet is protected",
          "usedTypes": []
        },
        "protect": {
          "signature": "protect(password?: string): Promise<void>;",
          "docstring": "Protect the sheet with an optional password.\n\n@param password - Optional password to require for unprotection",
          "usedTypes": []
        },
        "protectWithOptions": {
          "signature": "protectWithOptions(password?: string, options?: ProtectionOptions): Promise<void>;",
          "docstring": "Protect the sheet with an optional password and granular permission options.\n\n@param password - Optional password to require for unprotection\n@param options - Granular permissions (e.g., allowSort, allowFormatCells)",
          "usedTypes": [
            "ProtectionOptions"
          ]
        },
        "unprotect": {
          "signature": "unprotect(password?: string): Promise<boolean>;",
          "docstring": "Unprotect the sheet. Returns true if unprotection succeeded.\n\n@param password - Password if the sheet was protected with one\n@returns True if the sheet was successfully unprotected",
          "usedTypes": []
        },
        "canEditCell": {
          "signature": "canEditCell(row: number, col: number): Promise<boolean>;",
          "docstring": "Check whether a specific cell can be edited under current protection.\nReturns true if the sheet is unprotected or the cell is unlocked.\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@returns True if the cell is editable",
          "usedTypes": []
        },
        "canEditCellFast": {
          "signature": "canEditCellFast(row: number, col: number): true | 'unknown';",
          "docstring": "Synchronous protection fast path for edit-entry commands.\n\nReturns true only when the mirror proves the sheet is currently\nunprotected. Returns 'unknown' for protected sheets, where callers must use\ncanEditCell(row, col) so cell lock state remains kernel-owned.",
          "usedTypes": []
        },
        "canDoStructureOp": {
          "signature": "canDoStructureOp(operation: ProtectionOperation): Promise<boolean>;",
          "docstring": "Check whether a structural operation is allowed under current protection.\n\n@param operation - Operation name (e.g., 'sort', 'insertRows', 'deleteColumns')\n@returns True if the operation is allowed",
          "usedTypes": [
            "ProtectionOperation"
          ]
        },
        "canSort": {
          "signature": "canSort(): Promise<boolean>;",
          "docstring": "Check whether sorting is allowed under current protection.\nConvenience shorthand for `canDoStructureOp('sort')`.\n\n@returns True if sorting is allowed",
          "usedTypes": []
        },
        "getConfig": {
          "signature": "getConfig(): Promise<ProtectionConfig>;",
          "docstring": "Get the full protection configuration for the sheet.\n\n@returns Protection configuration including status and permission flags",
          "usedTypes": [
            "ProtectionConfig"
          ]
        },
        "getSelectionMode": {
          "signature": "getSelectionMode(): Promise<'normal' | 'unlockedOnly' | 'none'>;",
          "docstring": "Get the current selection mode when the sheet is protected.\n\n@returns 'normal' (all cells selectable), 'unlockedOnly' (only unlocked cells), or 'none' (no selection)",
          "usedTypes": []
        },
        "setSelectionMode": {
          "signature": "setSelectionMode(mode: 'normal' | 'unlockedOnly' | 'none'): Promise<void>;",
          "docstring": "Set the selection mode for when the sheet is protected.\nOnly takes effect when the sheet is actually protected.\n\n@param mode - Selection mode",
          "usedTypes": []
        },
        "pauseProtection": {
          "signature": "pauseProtection(password?: string): Promise<void>;",
          "docstring": "Temporarily suspend sheet protection.\nIf the sheet is password-protected, the correct password must be provided.\n\n@param password - Password if the sheet is password-protected",
          "usedTypes": []
        },
        "resumeProtection": {
          "signature": "resumeProtection(): Promise<void>;",
          "docstring": "Re-enable previously paused protection with the original configuration.",
          "usedTypes": []
        },
        "checkPassword": {
          "signature": "checkPassword(password?: string): Promise<boolean>;",
          "docstring": "Check if the given password matches the current protection password\nwithout modifying protection state.\n\n@param password - Password to check\n@returns True if the password matches",
          "usedTypes": []
        },
        "setPassword": {
          "signature": "setPassword(password?: string): Promise<void>;",
          "docstring": "Change the protection password without needing to unprotect/re-protect.\n\n@param password - New password, or undefined/empty to remove the password",
          "usedTypes": []
        },
        "updateOptions": {
          "signature": "updateOptions(options: Partial<ProtectionOptions>): Promise<void>;",
          "docstring": "Update protection options without needing to unprotect/re-protect.\n\n@param options - Partial protection options to merge with existing options",
          "usedTypes": [
            "ProtectionOptions"
          ]
        }
      }
    },
    "WorksheetPrint": {
      "docstring": "Sub-API for worksheet print and page break operations.",
      "functions": {
        "getSettings": {
          "signature": "getSettings(): Promise<PrintSettings>;",
          "docstring": "Get the current print settings for the sheet.\n\n@returns Current print settings",
          "usedTypes": [
            "PrintSettings"
          ]
        },
        "setSettings": {
          "signature": "setSettings(settings: Partial<PrintSettings>): Promise<void>;",
          "docstring": "Update print settings. Only the provided keys are changed.\n\n@param settings - Partial print settings to apply",
          "usedTypes": [
            "PrintSettings"
          ]
        },
        "getArea": {
          "signature": "getArea(): Promise<string | null>;",
          "docstring": "Get the current print area as an A1-notation range string.\n\n@returns The print area range string, or null if no print area is set",
          "usedTypes": []
        },
        "setArea": {
          "signature": "setArea(area: string): Promise<void>;",
          "docstring": "Set the print area to the specified A1-notation range.\n\n@param area - A1-notation range string (e.g., \"A1:H20\")",
          "usedTypes": []
        },
        "clearArea": {
          "signature": "clearArea(): Promise<void>;",
          "docstring": "Clear the print area so the entire sheet prints.",
          "usedTypes": []
        },
        "addPageBreak": {
          "signature": "addPageBreak(type: 'horizontal' | 'vertical', position: number): Promise<void>;",
          "docstring": "Add a manual page break at the specified position.\n\n@param type - 'horizontal' (row break) or 'vertical' (column break)\n@param position - 0-based row or column index for the break",
          "usedTypes": []
        },
        "removePageBreak": {
          "signature": "removePageBreak(type: 'horizontal' | 'vertical', position: number): Promise<void>;",
          "docstring": "Remove a manual page break at the specified position.\n\n@param type - 'horizontal' or 'vertical'\n@param position - 0-based row or column index of the break to remove",
          "usedTypes": []
        },
        "getPageBreaks": {
          "signature": "getPageBreaks(): Promise<{\n    rowBreaks: Array<{ id: number; min: number; max: number; manual: boolean; pt: boolean }>;\n    colBreaks: Array<{ id: number; min: number; max: number; manual: boolean; pt: boolean }>;\n  }>;",
          "docstring": "Get all manual page breaks in the sheet.\n\n@returns Object containing arrays of horizontal and vertical break positions",
          "usedTypes": []
        },
        "clearPageBreaks": {
          "signature": "clearPageBreaks(): Promise<void>;",
          "docstring": "Remove all manual page breaks from the sheet.",
          "usedTypes": []
        },
        "setPrintTitleRows": {
          "signature": "setPrintTitleRows(startRow: number, endRow: number): Promise<void>;",
          "docstring": "Set the rows to repeat at the top of each printed page (print titles).\n\n@param startRow - 0-based start row index\n@param endRow - 0-based end row index (inclusive)",
          "usedTypes": []
        },
        "setPrintTitleColumns": {
          "signature": "setPrintTitleColumns(startCol: number, endCol: number): Promise<void>;",
          "docstring": "Set the columns to repeat at the left of each printed page (print titles).\n\n@param startCol - 0-based start column index\n@param endCol - 0-based end column index (inclusive)",
          "usedTypes": []
        },
        "getPrintTitleRows": {
          "signature": "getPrintTitleRows(): Promise<[number, number] | null>;",
          "docstring": "Get the rows configured to repeat at the top of each printed page.\n\n@returns A [startRow, endRow] tuple (0-based, inclusive), or null if no repeat rows are set",
          "usedTypes": []
        },
        "getPrintTitleColumns": {
          "signature": "getPrintTitleColumns(): Promise<[number, number] | null>;",
          "docstring": "Get the columns configured to repeat at the left of each printed page.\n\n@returns A [startCol, endCol] tuple (0-based, inclusive), or null if no repeat columns are set",
          "usedTypes": []
        },
        "clearPrintTitles": {
          "signature": "clearPrintTitles(): Promise<void>;",
          "docstring": "Clear all print titles (both repeat rows and repeat columns).\nOther print settings (margins, orientation, etc.) are preserved.",
          "usedTypes": []
        },
        "setPrintMargins": {
          "signature": "setPrintMargins(\n    unit: 'inches' | 'points' | 'centimeters',\n    options: Partial<PageMargins>,\n  ): Promise<void>;",
          "docstring": "Set page margins with unit conversion.\nValues are converted to inches (OOXML native unit) before storing.\nOnly provided margin fields are updated; others are preserved.\n\n@param unit - Unit of the provided values: 'inches', 'points', or 'centimeters'\n@param options - Partial margin values to set",
          "usedTypes": [
            "PageMargins"
          ]
        },
        "getCellAfterBreak": {
          "signature": "getCellAfterBreak(\n    type: 'horizontal' | 'vertical',\n    position: number,\n  ): { row: number; col: number };",
          "docstring": "Get the cell position immediately after a page break.\n\n@param type - Break type: 'horizontal' (row break) or 'vertical' (column break)\n@param position - 0-based row or column index of the break\n@returns Cell coordinates of the first cell after the break",
          "usedTypes": []
        },
        "getHeaderFooterImages": {
          "signature": "getHeaderFooterImages(): Promise<HeaderFooterImageInfo[]>;",
          "docstring": "Get all header/footer images for this sheet.\n\n@returns Array of image info objects, one per occupied position",
          "usedTypes": [
            "HeaderFooterImageInfo"
          ]
        },
        "setHeaderFooterImage": {
          "signature": "setHeaderFooterImage(info: HeaderFooterImageInfo): Promise<void>;",
          "docstring": "Set or replace a header/footer image at the specified position.\nThe engine automatically manages the `&G` format code in the corresponding\nheader/footer string.\n\n@param info - Image info including position, src (data-URL or path), and dimensions",
          "usedTypes": [
            "HeaderFooterImageInfo"
          ]
        },
        "removeHeaderFooterImage": {
          "signature": "removeHeaderFooterImage(position: HfImagePosition): Promise<void>;",
          "docstring": "Remove the header/footer image at the specified position.\nThe engine automatically removes the `&G` format code from the corresponding\nheader/footer string.\n\n@param position - Which of the 6 header/footer positions to clear",
          "usedTypes": [
            "HfImagePosition"
          ]
        }
      }
    },
    "WorksheetSettings": {
      "docstring": "Sub-API for worksheet settings operations.",
      "functions": {
        "get": {
          "signature": "get(): Promise<SheetSettingsInfo>;",
          "docstring": "Get all sheet settings.\n\n@returns Current sheet settings",
          "usedTypes": [
            "SheetSettingsInfo"
          ]
        },
        "set": {
          "signature": "set<K extends keyof SheetSettingsInfo>(key: K, value: SheetSettingsInfo[K]): Promise<void>;",
          "docstring": "Set an individual sheet setting by key.\n\n@param key - Setting key (e.g., 'showGridlines', 'defaultRowHeight')\n@param value - New value for the setting",
          "usedTypes": [
            "SheetSettingsInfo"
          ]
        },
        "getStandardHeight": {
          "signature": "getStandardHeight(): Promise<number>;",
          "docstring": "Get the standard (default) row height in pixels.\nThis is the height used for rows that haven't been explicitly sized.\nRead-only (matches spreadsheet special-cell typesemantics).",
          "usedTypes": []
        },
        "getStandardWidth": {
          "signature": "getStandardWidth(): Promise<number>;",
          "docstring": "Get the standard (default) column width in pixels.\nThis is the width used for columns that haven't been explicitly sized.",
          "usedTypes": []
        },
        "setStandardWidth": {
          "signature": "setStandardWidth(width: number): Promise<void>;",
          "docstring": "Set the standard (default) column width in pixels.\nThis changes the default width for all columns that haven't been explicitly sized.\n\n@param width - New default column width in pixels",
          "usedTypes": []
        }
      }
    },
    "WorksheetBindings": {
      "docstring": "Sub-API for worksheet data binding operations.",
      "functions": {
        "list": {
          "signature": "list(): Promise<SheetDataBindingInfo[]>;",
          "docstring": "List all data bindings on the sheet.\n\n@returns Array of binding info objects",
          "usedTypes": [
            "SheetDataBindingInfo"
          ]
        },
        "get": {
          "signature": "get(bindingId: string): Promise<SheetDataBindingInfo | null>;",
          "docstring": "Get a data binding by ID.\n\n@param bindingId - The binding ID to retrieve\n@returns The binding info, or null if not found",
          "usedTypes": [
            "SheetDataBindingInfo"
          ]
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of data bindings on this sheet.\n\n@returns The count of bindings",
          "usedTypes": []
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all data bindings from the sheet.",
          "usedTypes": []
        },
        "add": {
          "signature": "add(config: CreateBindingConfig): Promise<SheetDataBindingInfo>;",
          "docstring": "Add a new data binding on the sheet.\n\n@param config - Binding configuration (connection, column mappings, etc.)\n@returns The created binding info",
          "usedTypes": [
            "CreateBindingConfig",
            "SheetDataBindingInfo"
          ]
        },
        "remove": {
          "signature": "remove(bindingId: string): Promise<void>;",
          "docstring": "Remove a data binding by ID.\n\n@param bindingId - The binding ID to remove",
          "usedTypes": []
        },
        "getProjectionRange": {
          "signature": "getProjectionRange(row: number, col: number): Promise<CellRange | null>;",
          "docstring": "Get the spill range for a projected (dynamic array) cell.\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@returns The spill range, or null if the cell is not a projection source",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getProjectionSource": {
          "signature": "getProjectionSource(row: number, col: number): Promise<{ row: number; col: number } | null>;",
          "docstring": "Get the source cell of a projected value.\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@returns The source cell position, or null if the cell is not a projection",
          "usedTypes": []
        },
        "isProjectedPosition": {
          "signature": "isProjectedPosition(row: number, col: number): Promise<boolean>;",
          "docstring": "Check whether a cell position is a projected (spilled) value.\n\n@param row - Row index (0-based)\n@param col - Column index (0-based)\n@returns True if the cell holds a projected value",
          "usedTypes": []
        },
        "getViewportProjectionData": {
          "signature": "getViewportProjectionData(\n    range: string | CellRange,\n  ): Promise<Array<{ originRow: number; originCol: number; rows: number; cols: number }>>;",
          "docstring": "Get all projection data overlapping a viewport range (batch query).\nReturns one entry per projection with origin position and dimensions.\n\n@param range - A1-style range string or CellRange object",
          "usedTypes": [
            "CellRange"
          ]
        }
      }
    },
    "WorksheetNames": {
      "docstring": "Sub-API for sheet-scoped named range operations.",
      "functions": {
        "add": {
          "signature": "add(name: string, reference: string, comment?: string): Promise<NamedRangeInfo>;",
          "docstring": "Add a named range scoped to this sheet.\n\n@param name - Name for the range\n@param reference - Cell reference (e.g., \"A1:B10\" or \"=Sheet1!A1:B10\")\n@param comment - Optional comment\n@returns The created named range info",
          "usedTypes": [
            "NamedRangeInfo"
          ]
        },
        "has": {
          "signature": "has(name: string): Promise<boolean>;",
          "docstring": "Check if a named range exists in this sheet's scope.\n\n@param name - Name to check\n@returns True if the named range exists",
          "usedTypes": []
        },
        "getCount": {
          "signature": "getCount(): Promise<number>;",
          "docstring": "Get the total number of named ranges scoped to this sheet.\n\n@returns The count of named ranges",
          "usedTypes": []
        },
        "get": {
          "signature": "get(name: string): Promise<NamedRangeInfo | null>;",
          "docstring": "Get a named range by name, scoped to this sheet.\n\n@param name - Name to look up\n@returns Named range info or null if not found",
          "usedTypes": [
            "NamedRangeInfo"
          ]
        },
        "getRange": {
          "signature": "getRange(name: string): Promise<NamedRangeReference | null>;",
          "docstring": "Get the range reference for a named range scoped to this sheet.\n\n@param name - Name to look up\n@returns Range reference or null if not found",
          "usedTypes": [
            "NamedRangeReference"
          ]
        },
        "remove": {
          "signature": "remove(name: string): Promise<void>;",
          "docstring": "Remove a named range scoped to this sheet.\n\n@param name - Name to remove",
          "usedTypes": []
        },
        "update": {
          "signature": "update(name: string, updates: NamedRangeUpdateOptions): Promise<void>;",
          "docstring": "Update a named range scoped to this sheet.\n\n@param name - Name of the range to update\n@param updates - Fields to update",
          "usedTypes": [
            "NamedRangeUpdateOptions"
          ]
        },
        "clear": {
          "signature": "clear(): Promise<void>;",
          "docstring": "Remove all named ranges scoped to this sheet.",
          "usedTypes": []
        },
        "list": {
          "signature": "list(): Promise<NamedRangeInfo[]>;",
          "docstring": "List all named ranges scoped to this sheet.\n\n@returns Array of named range info objects",
          "usedTypes": [
            "NamedRangeInfo"
          ]
        }
      }
    },
    "WorksheetStyles": {
      "docstring": "Sub-API for named cell style operations on a worksheet.",
      "functions": {
        "applyStyle": {
          "signature": "applyStyle(address: string, styleName: string): Promise<void>;",
          "docstring": "Apply a named style to a cell.\nResolves the style name to its format definition and applies all format\nproperties to the target cell.\n\n@param address - A1-style cell address\n@param styleName - Name of the style to apply (e.g., \"Normal\", \"Heading 1\")\n@throws KernelError if style name is not found",
          "usedTypes": []
        },
        "applyStyleToRange": {
          "signature": "applyStyleToRange(range: string | CellRange, styleName: string): Promise<void>;",
          "docstring": "Apply a named style to a range.\n\n@param range - A1-style range string (e.g. \"A1:C3\")\n@param styleName - Name of the style to apply\n@throws KernelError if style name is not found",
          "usedTypes": [
            "CellRange"
          ]
        },
        "getStyle": {
          "signature": "getStyle(address: string): Promise<string | null>;",
          "docstring": "Get the name of the named style that matches a cell's format (best-effort).\n\nSince Mog copies format values rather than storing a style reference,\nthis performs a reverse lookup by comparing the cell's current format\nagainst all known style formats.\n\n@param address - A1-style cell address\n@returns Style name if a matching style is found, null otherwise",
          "usedTypes": []
        }
      }
    }
  },
  "types": {
    "AccentNode": {
      "name": "AccentNode",
      "definition": "{\n  type: 'acc';\n  /** Accent character (defaults to combining circumflex U+0302) */\n  chr?: string;\n  /** Base expression */\n  e: MathNode[];\n}",
      "docstring": "Accent - <m:acc>\nAccent mark over base expression (hat, tilde, dot, etc.)"
    },
    "AccessExplanation": {
      "name": "AccessExplanation",
      "definition": "{\n  /** The resolved access level */\n  level: AccessLevel;\n  /** The policy that determined the level (null = default, no policy matched) */\n  matchedPolicy: AccessPolicy | null;\n  /** Why this level was chosen */\n  reason: string;\n  /** All policies that were considered during evaluation */\n  candidatePolicies: AccessPolicy[];\n  /** Warnings (e.g., \"ambiguous: 2 policies at same specificity+priority disagree\") */\n  warnings: string[];\n}",
      "docstring": "Derivation trace returned by `wb.security.explainAccess(...)`. Matches\nthe Rust `compute_security::engine::AccessExplanation` serde shape."
    },
    "AccessLevel": {
      "name": "AccessLevel",
      "definition": "'none' | 'structure' | 'read' | 'write' | 'admin'",
      "docstring": "Single linear access level scale. No per-aspect complexity.\n\n- `none` — hidden, scope doesn't exist for this principal\n- `structure` — formulas, types, formatting visible; values show type placeholders\n- `read` — full data, no write\n- `write` — full access\n- `admin` — full access + can modify policies"
    },
    "AccessPolicy": {
      "name": "AccessPolicy",
      "definition": "{\n  id: PolicyId;\n  /** Glob-matched against principal's tags */\n  principalTag: TagMatcher;\n  /** Target pattern to match */\n  target: TargetMatcher;\n  /** The granted access level */\n  level: AccessLevel;\n  /** Higher priority wins within the same specificity tier.\n\nRecommended ranges:\n- 0-99: App-defined policies (default: 0)\n- 100-199: Template-generated policies\n- 200+: Platform/system policies (owner lockout, etc.) */\n  priority: number;\n  /** Whether this policy is active */\n  enabled: boolean;\n  /** Policy metadata for auditing and template tracking */\n  metadata: AccessPolicyMetadata;\n}",
      "docstring": "A data access policy. Policies define what access level a principal\n(matched by tag glob) has to a target (matched by target pattern).\n\n`level: 'none'` is the deny — there is no separate `effect` field."
    },
    "AccessPolicyMetadata": {
      "name": "AccessPolicyMetadata",
      "definition": "{\n  /** Tag of the principal who created this policy */\n  createdBy: string;\n  /** Creation timestamp (epoch ms) */\n  createdAt: number;\n  /** Human-readable description */\n  description?: string;\n  /** If created by a template, tracks which one */\n  templateId?: string;\n}",
      "docstring": "Metadata attached to an access policy."
    },
    "AccessPrincipal": {
      "name": "AccessPrincipal",
      "definition": "{\n  tags: string[];\n}",
      "docstring": "A principal is identified by a set of opaque string tags.\nMog provides the matching engine; apps define their own identity taxonomy.\n\nExamples:\n- `{ tags: ['user:alice@co.com', 'team:finance'] }`\n- `{ tags: ['agent:copilot'] }`\n- `{ tags: ['mog:owner'] }`"
    },
    "AccessTarget": {
      "name": "AccessTarget",
      "definition": "| { readonly kind: 'workbook' }\n  | { readonly kind: 'sheet'; readonly sheetId: SheetId }\n  | { readonly kind: 'column'; readonly colId: ColId; readonly sheetId: SheetId }",
      "docstring": "Identity-based resource target. Phase 1 supports workbook, sheet, and column.\nUses a discriminated union for type-safe exhaustive switch checking."
    },
    "ActiveCellEditSource": {
      "name": "ActiveCellEditSource",
      "definition": "{\n  sheetId: SheetId;\n  row: number;\n  col: number;\n  source: string;\n  version: number;\n  fresh: boolean;\n}",
      "docstring": "Kernel-owned read model for the source text used when entering edit mode on\nthe active cell."
    },
    "ActiveScenarioState": {
      "name": "ActiveScenarioState",
      "definition": "{\n  /** Scenario whose values are currently applied in this local session. */\n  scenarioId: string;\n  /** Session baseline token used by restore once Rust-owned apply/restore lands. */\n  baselineId: string;\n  /** Document handle this session state belongs to. */\n  documentId: string;\n  /** Whether the stored scenario definition still matches the active baseline. */\n  definitionStatus?: 'current' | 'stale' | 'deleted';\n  /** Whether active cells have diverged from the baseline. */\n  cellMutationStatus?: 'clean' | 'conflicted';\n}",
      "docstring": "Session-scoped state for an applied scenario."
    },
    "AddCheckboxFormControlOptions": {
      "name": "AddCheckboxFormControlOptions",
      "definition": "WorksheetCreateCheckboxOptions & {\n  type: 'checkbox';\n}",
      "docstring": ""
    },
    "AdjustmentValues": {
      "name": "AdjustmentValues",
      "definition": "{\n  /** Primary adjustment value.\nMeaning depends on the warp preset:\n- Arc presets: arc height/curvature\n- Wave presets: amplitude\n- Inflate/deflate: bulge amount\n- Fade presets: fade percentage */\n  adj1?: number;\n  /** Secondary adjustment value.\nMeaning depends on the warp preset:\n- Wave presets: phase offset\n- Pour presets: inner radius\n- Some geometric presets: secondary parameter */\n  adj2?: number;\n}",
      "docstring": "Adjustment values for fine-tuning warp parameters.\n\nEach warp preset has 0-2 adjustment handles that control its shape.\nValues are percentages (typically 0-100) or absolute values depending on preset.\nThe specific meaning of each adjustment depends on the preset type.\n\n@see ECMA-376 Part 1, Section 20.1.9.9 (CT_GeomGuideList)\n\n@example\n// textArchUp has one adjustment (arc height)\n{ adj1: 50 }  // 50% arc height\n\n@example\n// textWave1 has two adjustments (amplitude, frequency)\n{ adj1: 20, adj2: 30 }"
    },
    "AdvancedFilterCopyToOptions": {
      "name": "AdvancedFilterCopyToOptions",
      "definition": "{\n  listRange: string;\n  criteriaRange?: string | null;\n  mode: 'copyTo';\n  copyToRange: string;\n  uniqueRecordsOnly?: boolean;\n  filterId?: never;\n}",
      "docstring": ""
    },
    "AdvancedFilterCopyToResult": {
      "name": "AdvancedFilterCopyToResult",
      "definition": "{\n  mode: 'copyTo';\n  listRange: string;\n  criteriaRange?: string;\n  filterId?: never;\n  rowsMatched: number;\n  rowsHidden?: never;\n  rowsCopied: number;\n  columnsCopied: number;\n  destinationRange?: string;\n}",
      "docstring": ""
    },
    "AdvancedFilterDetailInfo": {
      "name": "AdvancedFilterDetailInfo",
      "definition": "{\n  /** Resolved criteria range, if this Advanced Filter has criteria. */\n  criteriaRange?: { startRow: number; startCol: number; endRow: number; endCol: number };\n  /** Whether duplicate full-row records are hidden/copied after criteria evaluation. */\n  uniqueRecordsOnly: boolean;\n  /** Whether this Advanced Filter currently has criteria or unique-records semantics. */\n  active: boolean;\n}",
      "docstring": ""
    },
    "AdvancedFilterInPlaceOptions": {
      "name": "AdvancedFilterInPlaceOptions",
      "definition": "{\n  listRange: string;\n  criteriaRange?: string | null;\n  mode: 'inPlace';\n  copyToRange?: never;\n  uniqueRecordsOnly?: boolean;\n  filterId?: string;\n}",
      "docstring": ""
    },
    "AdvancedFilterInPlaceResult": {
      "name": "AdvancedFilterInPlaceResult",
      "definition": "{\n  mode: 'inPlace';\n  listRange: string;\n  criteriaRange?: string;\n  filterId: string;\n  rowsMatched: number;\n  rowsHidden: number;\n  rowsCopied?: never;\n  columnsCopied?: never;\n  destinationRange?: never;\n}",
      "docstring": ""
    },
    "AdvancedFilterOptions": {
      "name": "AdvancedFilterOptions",
      "definition": "AdvancedFilterInPlaceOptions | AdvancedFilterCopyToOptions",
      "docstring": ""
    },
    "AdvancedFilterResult": {
      "name": "AdvancedFilterResult",
      "definition": "AdvancedFilterInPlaceResult | AdvancedFilterCopyToResult",
      "docstring": ""
    },
    "AggregateFunction": {
      "name": "AggregateFunction",
      "definition": "'sum' | 'count' | 'counta' | 'countunique' | 'average' | 'min' | 'max' | 'product' | 'stdev' | 'stdevp' | 'var' | 'varp'",
      "docstring": ""
    },
    "AggregateResult": {
      "name": "AggregateResult",
      "definition": "{\n  /** Sum of numeric values */\n  sum: number;\n  /** Total number of non-empty cells */\n  count: number;\n  /** Number of numeric cells */\n  numericCount: number;\n  /** Average of numeric values (null if no numeric cells) */\n  average: number | null;\n  /** Minimum numeric value (null if no numeric cells) */\n  min: number | null;\n  /** Maximum numeric value (null if no numeric cells) */\n  max: number | null;\n}",
      "docstring": "Aggregate values for selected cells (status bar display)."
    },
    "ApplyScenarioResult": {
      "name": "ApplyScenarioResult",
      "definition": "{\n  /** Session baseline token to pass to restoreScenario(). */\n  baselineId: string;\n  /** Document/session handle this baseline belongs to. */\n  documentId?: string;\n  /** Number of cells that were updated with scenario values. */\n  cellsUpdated: number;\n  /** CellIds that could not be found (deleted cells). */\n  skippedCells: string[];\n  /** Original values to pass to restoreScenario() later. */\n  originalValues: OriginalCellValue[];\n}",
      "docstring": "Result returned from applyScenario()."
    },
    "AreaSubType": {
      "name": "AreaSubType",
      "definition": "'standard' | 'stacked' | 'percentStacked'",
      "docstring": ""
    },
    "ArrowHead": {
      "name": "ArrowHead",
      "definition": "{\n  /** Arrow head type */\n  type: 'none' | 'triangle' | 'stealth' | 'diamond' | 'oval' | 'open';\n  /** Arrow head size */\n  size: 'small' | 'medium' | 'large';\n}",
      "docstring": "Arrow head style for connectors."
    },
    "AuthorizedMaterializedCacheMetadata": {
      "name": "AuthorizedMaterializedCacheMetadata",
      "definition": "{\n  cachedValuesVersion?: string;\n  materializedAt?: string;\n  policyVersion?: string;\n}",
      "docstring": ""
    },
    "AutoFillChange": {
      "name": "AutoFillChange",
      "definition": "{\n  row: number;\n  col: number;\n  type: 'value' | 'formula' | 'format' | 'clear';\n}",
      "docstring": "A single cell change produced by the fill engine."
    },
    "AutoFillMode": {
      "name": "AutoFillMode",
      "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'",
      "docstring": "Fill mode for autoFill() — matches Rust FillMode enum.\nCovers the full spreadsheet fill behavior set."
    },
    "AutoFillResult": {
      "name": "AutoFillResult",
      "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}",
      "docstring": "Result from autoFill() — summary of what the fill engine did."
    },
    "AutoFillWarning": {
      "name": "AutoFillWarning",
      "definition": "{\n  row: number;\n  col: number;\n  kind: AutoFillWarningKind;\n}",
      "docstring": ""
    },
    "AutoFillWarningKind": {
      "name": "AutoFillWarningKind",
      "definition": "| { type: 'mergedCellsInTarget' }\n  | { type: 'formulaRefOutOfBounds'; refIndex: number }\n  | { type: 'sourceCellEmpty' }",
      "docstring": ""
    },
    "AutoFilterClearReceipt": {
      "name": "AutoFilterClearReceipt",
      "definition": "{\n  kind: 'autoFilterClear';\n}",
      "docstring": "Receipt for clearing an auto-filter."
    },
    "AutoFilterSetReceipt": {
      "name": "AutoFilterSetReceipt",
      "definition": "{\n  kind: 'autoFilterSet';\n  range: string;\n}",
      "docstring": "Receipt for setting an auto-filter."
    },
    "AxisBound": {
      "name": "AxisBound",
      "definition": "AxisBoundLabel | number",
      "docstring": ""
    },
    "AxisBoundLabel": {
      "name": "AxisBoundLabel",
      "definition": "\"auto\" | \"same\"",
      "docstring": ""
    },
    "AxisConfig": {
      "name": "AxisConfig",
      "definition": "{\n  categoryAxis?: SingleAxisConfig;\n  valueAxis?: SingleAxisConfig;\n  secondaryCategoryAxis?: SingleAxisConfig;\n  secondaryValueAxis?: SingleAxisConfig;\n  seriesAxis?: SingleAxisConfig;\n  /** @deprecated Use categoryAxis instead */\n  xAxis?: SingleAxisConfig;\n  /** @deprecated Use valueAxis instead */\n  yAxis?: SingleAxisConfig;\n  /** @deprecated Use secondaryValueAxis instead */\n  secondaryYAxis?: SingleAxisConfig;\n}",
      "docstring": "Axis configuration (matches AxisData wire type).\n\nWire field names: categoryAxis, valueAxis, secondaryCategoryAxis, secondaryValueAxis.\nLegacy aliases: xAxis, yAxis, secondaryYAxis (mapped in chart-bridge)."
    },
    "AxisType": {
      "name": "AxisType",
      "definition": "'category' | 'value' | 'time' | 'log'",
      "docstring": "Axis type"
    },
    "BarNode": {
      "name": "BarNode",
      "definition": "{\n  type: 'bar';\n  /** Position: 'top' (overline) or 'bot' (underline) */\n  pos: 'top' | 'bot';\n  /** Base expression */\n  e: MathNode[];\n}",
      "docstring": "Bar - <m:bar>\nHorizontal bar over or under base"
    },
    "BarSubType": {
      "name": "BarSubType",
      "definition": "'clustered' | 'stacked' | 'percentStacked'",
      "docstring": "Chart sub-types for variations"
    },
    "Bevel": {
      "name": "Bevel",
      "definition": "{\n  /** Bevel width in EMUs */\n  w?: number;\n  /** Bevel height in EMUs */\n  h?: number;\n  /** Bevel preset type */\n  prst?: BevelPresetType;\n}",
      "docstring": "Bevel effect for a 3D shape edge.\n\n@see ECMA-376 Part 1, Section 20.1.5.3 (bevelT) and 20.1.5.4 (bevelB)"
    },
    "BevelEffect": {
      "name": "BevelEffect",
      "definition": "{\n  /** Bevel preset type */\n  type: | 'none'\n    | 'relaxed'\n    | 'circle'\n    | 'slope'\n    | 'cross'\n    | 'angle'\n    | 'soft-round'\n    | 'convex'\n    | 'cool-slant'\n    | 'divot'\n    | 'riblet'\n    | 'hard-edge'\n    | 'art-deco';\n  /** Bevel width in pixels */\n  width: number;\n  /** Bevel height in pixels */\n  height: number;\n}",
      "docstring": "3D bevel effect configuration."
    },
    "BevelPresetType": {
      "name": "BevelPresetType",
      "definition": "| 'relaxedInset' // Subtle rounded inset\n  | 'circle' // Circular cross-section\n  | 'slope' // Linear angled edge\n  | 'cross' // Cross-shaped profile\n  | 'angle' // Sharp angled edge\n  | 'softRound' // Soft rounded profile\n  | 'convex' // Outward curving edge\n  | 'coolSlant' // Stylized slanted edge\n  | 'divot' // Indented groove\n  | 'riblet' // Ribbed texture\n  | 'hardEdge' // Sharp, defined edge\n  | 'artDeco'",
      "docstring": "Bevel preset type.\n\nDefines the cross-section profile of a 3D bevel edge effect.\n12 presets defining different edge shapes.\n\n@see ECMA-376 Part 1, Section 20.1.10.6 (ST_BevelPresetType)"
    },
    "BlipFill": {
      "name": "BlipFill",
      "definition": "{\n  src: string;\n  stretch?: boolean;\n  tile?: TileSettings;\n}",
      "docstring": "Picture/texture fill definition."
    },
    "BorderBoxNode": {
      "name": "BorderBoxNode",
      "definition": "{\n  type: 'borderBox';\n  /** Hide individual borders */\n  hideTop?: boolean;\n  hideBot?: boolean;\n  hideLeft?: boolean;\n  hideRight?: boolean;\n  /** Strikethrough lines */\n  strikeH?: boolean;\n  strikeV?: boolean;\n  strikeBLTR?: boolean;\n  strikeTLBR?: boolean;\n  /** Content */\n  e: MathNode[];\n}",
      "docstring": "BorderBox - <m:borderBox>\nBox with visible borders"
    },
    "BorderStyle": {
      "name": "BorderStyle",
      "definition": "{\n  style: | 'none'\n    | 'thin'\n    | 'medium'\n    | 'thick'\n    | 'dashed'\n    | 'dotted'\n    | 'double'\n    | 'hair'\n    | 'mediumDashed'\n    | 'dashDot'\n    | 'dashDotDot'\n    | 'mediumDashDot'\n    | 'mediumDashDotDot'\n    | 'slantDashDot';\n  color?: string;\n  /** Tint modifier for border color (-1.0 to +1.0, ECMA-376). */\n  colorTint?: number;\n}",
      "docstring": "Border style.\n\nD3: Spreadsheet border styles. The full XLSX border-style set is supported:\n- Solid: 'thin', 'medium', 'thick' (varying line widths)\n- Dashed: 'dashed', 'mediumDashed' (varying dash lengths)\n- Dotted: 'dotted', 'hair' (dots and very fine lines)\n- Double: 'double' (two parallel lines)\n- Dash-dot combinations: 'dashDot', 'dashDotDot', 'mediumDashDot', 'mediumDashDotDot'\n- Special: 'slantDashDot' (slanted dash-dot pattern)\n\n@see cells-layer.ts getBorderDashPattern() for canvas rendering\n@see format-mapper.ts for XLSX import/export mapping"
    },
    "BoxNode": {
      "name": "BoxNode",
      "definition": "{\n  type: 'box';\n  /** Operator emulator (acts as operator for spacing) */\n  opEmu?: boolean;\n  /** No break (keep together) */\n  noBreak?: boolean;\n  /** Differential (italic d for dx) */\n  diff?: boolean;\n  /** Alignment point */\n  aln?: boolean;\n  /** Content */\n  e: MathNode[];\n}",
      "docstring": "Box - <m:box>\nInvisible container for grouping/alignment"
    },
    "BoxplotConfig": {
      "name": "BoxplotConfig",
      "definition": "{\n  showOutliers?: boolean;\n  showMean?: boolean;\n  whiskerType?: 'tukey' | 'minMax' | 'percentile';\n}",
      "docstring": "Box plot configuration"
    },
    "BreakWorkbookLinkOptions": {
      "name": "BreakWorkbookLinkOptions",
      "definition": "{\n  keepValues?: boolean;\n}",
      "docstring": ""
    },
    "ButtonControl": {
      "name": "ButtonControl",
      "definition": "{\n  type: 'button';\n  /** Button label text */\n  label: string;\n  /** Optional - Cell to write to on click.\nCommon patterns:\n- Increment counter: read current value, write value + 1\n- Toggle: write opposite of current value\n- Fixed value: write specific value (e.g., timestamp) */\n  linkedCellId?: CellId;\n  /** Action ID for future macro/script integration.\nWill be used to trigger named actions defined elsewhere. */\n  actionId?: string;\n  /** Value to write to linked cell on click.\nOnly used if linkedCellId is set and clickAction is 'setValue'. */\n  clickValue?: unknown;\n  /** Click behavior when linkedCellId is set.\n- 'setValue': Write clickValue to cell\n- 'increment': Add 1 to current numeric value\n- 'decrement': Subtract 1 from current numeric value\n- 'toggle': Toggle boolean value */\n  clickAction?: 'setValue' | 'increment' | 'decrement' | 'toggle';\n}",
      "docstring": "Button control - triggers actions on click.\n\nUnlike other controls, Button's primary purpose is triggering actions,\nnot storing values. linkedCellId is optional.\n\nUse cases:\n- Increment a counter cell on click\n- Trigger a macro/script (via actionId)\n- Navigate to another sheet/location"
    },
    "CFAboveAverageRule": {
      "name": "CFAboveAverageRule",
      "definition": "{\n  type: 'aboveAverage';\n  aboveAverage: boolean;\n  equalAverage?: boolean;\n  stdDev?: number;\n  style: CFStyle;\n}",
      "docstring": "Above/below average rule."
    },
    "CFCellValueRule": {
      "name": "CFCellValueRule",
      "definition": "{\n  type: 'cellValue';\n  operator: CFOperator;\n  value1: number | string;\n  value2?: number | string;\n  style: CFStyle;\n}",
      "docstring": "Cell value comparison rule."
    },
    "CFColorScale": {
      "name": "CFColorScale",
      "definition": "{\n  minPoint: CFColorPoint;\n  midPoint?: CFColorPoint;\n  maxPoint: CFColorPoint;\n}",
      "docstring": "Color scale configuration (2 or 3 colors)."
    },
    "CFColorScaleRule": {
      "name": "CFColorScaleRule",
      "definition": "{\n  type: 'colorScale';\n  colorScale: CFColorScale;\n}",
      "docstring": "Color scale rule."
    },
    "CFContainsBlanksRule": {
      "name": "CFContainsBlanksRule",
      "definition": "{\n  type: 'containsBlanks';\n  blanks: boolean;\n  style: CFStyle;\n}",
      "docstring": "Contains blanks rule."
    },
    "CFContainsErrorsRule": {
      "name": "CFContainsErrorsRule",
      "definition": "{\n  type: 'containsErrors';\n  errors: boolean;\n  style: CFStyle;\n}",
      "docstring": "Contains errors rule."
    },
    "CFContainsTextRule": {
      "name": "CFContainsTextRule",
      "definition": "{\n  type: 'containsText';\n  operator: CFTextOperator;\n  text: string;\n  style: CFStyle;\n}",
      "docstring": "Contains text rule."
    },
    "CFDataBar": {
      "name": "CFDataBar",
      "definition": "{\n  minPoint: CFColorPoint;\n  maxPoint: CFColorPoint;\n  positiveColor: string;\n  negativeColor?: string;\n  borderColor?: string;\n  negativeBorderColor?: string;\n  showBorder?: boolean;\n  gradient?: boolean;\n  direction?: 'leftToRight' | 'rightToLeft' | 'context';\n  axisPosition?: CFDataBarAxisPosition;\n  axisColor?: string;\n  showValue?: boolean;\n  /** When true, negative bars use the positive fill color. */\n  matchPositiveFillColor?: boolean;\n  /** When true, negative bars use the positive border color. */\n  matchPositiveBorderColor?: boolean;\n  /** Extension identifier for OOXML ext data bars. */\n  extId?: string;\n}",
      "docstring": "Data bar configuration."
    },
    "CFDataBarRule": {
      "name": "CFDataBarRule",
      "definition": "{\n  type: 'dataBar';\n  dataBar: CFDataBar;\n}",
      "docstring": "Data bar rule."
    },
    "CFDuplicateValuesRule": {
      "name": "CFDuplicateValuesRule",
      "definition": "{\n  type: 'duplicateValues';\n  unique?: boolean;\n  style: CFStyle;\n}",
      "docstring": "Duplicate/unique values rule."
    },
    "CFFormulaRule": {
      "name": "CFFormulaRule",
      "definition": "{\n  type: 'formula';\n  formula: string;\n  style: CFStyle;\n}",
      "docstring": "Formula-based rule."
    },
    "CFIconSet": {
      "name": "CFIconSet",
      "definition": "{\n  iconSetName: CFIconSetName;\n  thresholds?: CFIconThreshold[];\n  reverseOrder?: boolean;\n  showIconOnly?: boolean;\n  /** Per-threshold custom icon overrides (null entries use default icons). */\n  customIcons?: (CFCustomIcon | null)[];\n}",
      "docstring": "Icon set configuration."
    },
    "CFIconSetRule": {
      "name": "CFIconSetRule",
      "definition": "{\n  type: 'iconSet';\n  iconSet: CFIconSet;\n}",
      "docstring": "Icon set rule."
    },
    "CFOperator": {
      "name": "CFOperator",
      "definition": "| 'greaterThan'\n  | 'lessThan'\n  | 'greaterThanOrEqual'\n  | 'lessThanOrEqual'\n  | 'equal'\n  | 'notEqual'\n  | 'between'\n  | 'notBetween'",
      "docstring": "Comparison operators for cellValue rules."
    },
    "CFRule": {
      "name": "CFRule",
      "definition": "| CFCellValueRule\n  | CFFormulaRule\n  | CFColorScaleRule\n  | CFDataBarRule\n  | CFIconSetRule\n  | CFTop10Rule\n  | CFAboveAverageRule\n  | CFDuplicateValuesRule\n  | CFContainsTextRule\n  | CFContainsBlanksRule\n  | CFContainsErrorsRule\n  | CFTimePeriodRule",
      "docstring": "Union of all rule types."
    },
    "CFRuleInput": {
      "name": "CFRuleInput",
      "definition": "Omit<CFRule, 'id' | 'priority'>",
      "docstring": "Rule input for creating new rules (id and priority assigned by the API).\nCallers provide the rule configuration; the API generates id and sets priority."
    },
    "CFStyle": {
      "name": "CFStyle",
      "definition": "{\n  backgroundColor?: string;\n  fontColor?: string;\n  bold?: boolean;\n  italic?: boolean;\n  underlineType?: 'none' | 'single' | 'double' | 'singleAccounting' | 'doubleAccounting';\n  strikethrough?: boolean;\n  numberFormat?: string;\n  borderColor?: string;\n  borderStyle?: CFBorderStyle;\n  borderTopColor?: string;\n  borderTopStyle?: CFBorderStyle;\n  borderBottomColor?: string;\n  borderBottomStyle?: CFBorderStyle;\n  borderLeftColor?: string;\n  borderLeftStyle?: CFBorderStyle;\n  borderRightColor?: string;\n  borderRightStyle?: CFBorderStyle;\n}",
      "docstring": "Conditional Formatting Render Types\n\nTypes needed by canvas-renderer to render conditional formatting results.\nThese are extracted from engine to avoid circular dependencies during the\ncanvas-renderer extraction.\n\n## Two-tier Rust type architecture\n\nThe CFStyle defined here mirrors `compute-cf/src/types/rule.rs` — the\ncomputation / rendering type used by the Rust CF evaluation engine.\n\nA separate, intentionally simplified persistence subset lives in\n`domain-types/src/domain/conditional_format.rs`. That domain type is\nauto-generated into `compute-types.gen.ts`, which is therefore NOT the\nrendering source of truth for CFStyle — this file is.\n\n@module contracts/conditional-format/render-types"
    },
    "CFTextOperator": {
      "name": "CFTextOperator",
      "definition": "'contains' | 'notContains' | 'beginsWith' | 'endsWith'",
      "docstring": "Text operators for containsText rules."
    },
    "CFTimePeriodRule": {
      "name": "CFTimePeriodRule",
      "definition": "{\n  type: 'timePeriod';\n  timePeriod: DatePeriod;\n  style: CFStyle;\n}",
      "docstring": "Time period (date occurring) rule."
    },
    "CFTop10Rule": {
      "name": "CFTop10Rule",
      "definition": "{\n  type: 'top10';\n  rank: number;\n  percent?: boolean;\n  bottom?: boolean;\n  style: CFStyle;\n}",
      "docstring": "Top/bottom N rule."
    },
    "CalcMode": {
      "name": "CalcMode",
      "definition": "'auto' | 'autoNoTable' | 'manual'",
      "docstring": "Calculation settings for the workbook.\nG.3: Supports iterative calculation for circular references.\n\nExcel allows formulas with circular references to calculate iteratively\nuntil they converge or reach the maximum iterations. When disabled (default),\ncircular references result in #CALC! errors.\n\n@see plans/active/spreadsheet-compatibility/04-EDITING-BEHAVIORS-PLAN.md - G.3"
    },
    "CalculateOptions": {
      "name": "CalculateOptions",
      "definition": "{\n  /** Enable iterative calculation for circular references.\n- `true` — enable with default settings (100 iterations, 0.001 threshold)\n- `{ maxIterations?: number; maxChange?: number }` — enable with custom settings\n- `false` — disable (override workbook setting)\n- `undefined` — use workbook setting (default) */\n  iterative?: boolean | { maxIterations?: number; maxChange?: number };\n}",
      "docstring": "Options for wb.calculate() — all optional, backward compatible."
    },
    "CalculateResult": {
      "name": "CalculateResult",
      "definition": "{\n  /** Whether circular references were detected. */\n  hasCircularRefs: boolean;\n  /** Whether iterative calculation converged. Only meaningful when hasCircularRefs is true. */\n  converged: boolean;\n  /** Number of iterations performed (0 if no circular refs). */\n  iterations: number;\n  /** Maximum per-cell delta at final iteration. */\n  maxDelta: number;\n  /** Number of cells involved in circular references. */\n  circularCellCount: number;\n  /** Number of formula cells recomputed during this calculation. Zero when nothing changed since last full recalc. */\n  recomputedCount: number;\n}",
      "docstring": "Result from wb.calculate() — includes convergence metadata."
    },
    "CalculatedField": {
      "name": "CalculatedField",
      "definition": "{\n  fieldId: string;\n  calculatedFieldId?: CalculatedFieldId;\n  name: string;\n  formula: string;\n  status?: CalculatedFieldStatus;\n  createdAt?: string;\n  updatedAt?: string;\n}",
      "docstring": "Legacy calculated-field shape. New contracts should use `PivotCalculatedField`."
    },
    "CalculatedFieldId": {
      "name": "CalculatedFieldId",
      "definition": "string & { readonly __brand: 'CalculatedFieldId' }",
      "docstring": ""
    },
    "CalculatedFieldStatus": {
      "name": "CalculatedFieldStatus",
      "definition": "{\n  state: 'valid' | 'invalid';\n  error?: PivotKernelMutationError;\n  referencedFieldIds: string[];\n}",
      "docstring": ""
    },
    "CalculationSettings": {
      "name": "CalculationSettings",
      "definition": "{\n  /** Whether to allow iterative calculation for circular references.\nWhen true, formulas with circular references calculate iteratively.\nWhen false (default), circular references show #CALC! error. */\n  enableIterativeCalculation: boolean;\n  /** Maximum number of iterations for iterative calculation.\nExcel default: 100 */\n  maxIterations: number;\n  /** Maximum change between iterations for convergence.\nCalculation stops when all results change by less than this amount.\nExcel default: 0.001 */\n  maxChange: number;\n  /** Calculation mode (auto/manual/autoNoTable).\nDefault: 'auto' */\n  calcMode: CalcMode;\n  /** Whether to use full (15-digit) precision for calculations.\nDefault: true */\n  fullPrecision: boolean;\n  /** Cell reference style (true = R1C1, false = A1).\nDefault: false */\n  r1c1Mode: boolean;\n  /** Whether to perform a full calculation when the file is opened.\nDefault: false */\n  fullCalcOnLoad: boolean;\n}",
      "docstring": ""
    },
    "CallableDisposable": {
      "name": "CallableDisposable",
      "definition": "(() => void) & IDisposable",
      "docstring": "A disposable that can also be called as a function (shorthand for dispose).\nThis type alias stays in contracts since it's used in service interface signatures."
    },
    "CellAnchor": {
      "name": "CellAnchor",
      "definition": "{\n  /** Stable cell reference that survives row/col insert/delete.\nResolve to current position via CellPositionLookup.getPosition(). */\n  cellId: CellId;\n  /** Horizontal offset from cell top-left in pixels */\n  xOffset: number;\n  /** Vertical offset from cell top-left in pixels */\n  yOffset: number;\n}",
      "docstring": "Cell anchor point with pixel offset.\nUsed for precise positioning relative to cell boundaries.\n\nCell Identity Model:\nUses CellId for stable references that survive row/col insert/delete.\nPosition is resolved at render time via CellPositionLookup.\n\n@example\n// User places image at B5\nconst anchor: CellAnchor = {\n  cellId: 'abc-123...',  // CellId of B5\n  xOffset: 10,           // 10px from cell left edge\n  yOffset: 5             // 5px from cell top edge\n};\n// After inserting row at row 3, the CellId is unchanged\n// but resolves to position (row: 5, col: 1) → image moves down"
    },
    "CellBorders": {
      "name": "CellBorders",
      "definition": "{\n  top?: BorderStyle;\n  right?: BorderStyle;\n  bottom?: BorderStyle;\n  left?: BorderStyle;\n  diagonal?: BorderStyle & { direction?: 'up' | 'down' | 'both' };\n  /** Diagonal up flag (ECMA-376 CT_Border @diagonalUp).\nWhen true, diagonal line runs from bottom-left to top-right.\nNote: This is the spec-compliant representation. For convenience,\ndiagonal.direction can also be used which derives from these flags. */\n  diagonalUp?: boolean;\n  /** Diagonal down flag (ECMA-376 CT_Border @diagonalDown).\nWhen true, diagonal line runs from top-left to bottom-right.\nNote: This is the spec-compliant representation. For convenience,\ndiagonal.direction can also be used which derives from these flags. */\n  diagonalDown?: boolean;\n  /** RTL start border (maps to left in LTR, right in RTL).\nUsed for bidirectional text support. */\n  start?: BorderStyle;\n  /** RTL end border (maps to right in LTR, left in RTL).\nUsed for bidirectional text support. */\n  end?: BorderStyle;\n  /** Internal vertical border (between cells in a range).\nOnly meaningful when applied to a range of cells. */\n  vertical?: BorderStyle;\n  /** Internal horizontal border (between cells in a range).\nOnly meaningful when applied to a range of cells. */\n  horizontal?: BorderStyle;\n  /** Outline mode flag.\nWhen true, borders are applied as outline around the range.\nWhen false/undefined, borders apply to individual cells. */\n  outline?: boolean;\n}",
      "docstring": "Cell borders\n\nECMA-376 CT_Border: Full border specification for cells.\nSupports standard borders (top/right/bottom/left), diagonal borders,\nRTL equivalents (start/end), and internal borders for ranges (vertical/horizontal)."
    },
    "CellControl": {
      "name": "CellControl",
      "definition": "{\n  /** The kind of control. Currently only 'checkbox' is supported. */\n  type: 'checkbox';\n  /** Whether the control is in its active state (checkbox: ticked). */\n  checked: boolean;\n}",
      "docstring": "Cell-embedded interactive control (e.g., checkbox).\n\nWhen a cell contains a control, formulas see its `checked` state as\nTRUE/FALSE. The `type` field discriminates the control kind for future\nextensibility (toggle, dropdown, etc.)."
    },
    "CellData": {
      "name": "CellData",
      "definition": "{\n  value: CellValue;\n  formula?: FormulaA1;\n  format?: CellFormat;\n  borders?: CellBorders;\n  comment?: string;\n  hyperlink?: string;\n  /** Pre-formatted display string from Rust (e.g., \"$1,234.50\", \"1/1/2024\"). */\n  formatted?: string;\n}",
      "docstring": "Complete cell data"
    },
    "CellFormat": {
      "name": "CellFormat",
      "definition": "{\n  /** Spreadsheet number format code string.\n\nCommon format codes:\n- Currency:    '$#,##0.00'\n- Accounting:  '_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)'\n- Percentage:  '0.00%'\n- Date:        'M/D/YYYY', 'YYYY-MM-DD', 'MMM D, YYYY'\n- Time:        'h:mm AM/PM', 'HH:mm:ss'\n- Number:      '#,##0.00', '0.00'\n- Scientific:  '0.00E+00'\n- Text:        '@'\n- Fraction:    '# ?/?'\n\nSee the `formatPresets` section in api-spec.json for the full catalog\nof 85+ pre-defined format codes with examples.\n\n@example\n// Currency\n{ numberFormat: '$#,##0.00' }\n// Percentage with 1 decimal\n{ numberFormat: '0.0%' }\n// ISO date\n{ numberFormat: 'YYYY-MM-DD' } */\n  numberFormat?: string;\n  /** Number format category hint. Auto-detected from numberFormat when not set.\nValid values: 'general' | 'number' | 'currency' | 'accounting' | 'date' |\n             'time' | 'percentage' | 'fraction' | 'scientific' | 'text' |\n             'special' | 'custom' */\n  numberFormatType?: NumberFormatType;\n  fontFamily?: string;\n  fontSize?: number;\n  /** Theme font reference for \"+Headings\" / \"+Body\" workbook theme fonts.\n\nWhen set, the cell uses the theme's majorFont (headings) or minorFont (body)\ninstead of fontFamily. Theme fonts are resolved at render time, allowing cells\nto automatically update when the workbook theme changes.\n\nBehavior:\n- 'major': Uses theme.fonts.majorFont\n- 'minor': Uses theme.fonts.minorFont\n- undefined: Uses fontFamily property (or default font if not set)\n\nWhen fontTheme is set, fontFamily is ignored for rendering but may still be\nstored for fallback purposes. This matches Excel's behavior where \"+Headings\"\ncells can have a fontFamily that's used when the theme is unavailable.\n\n@see resolveThemeFonts in theme.ts for resolution\n@see ThemeFonts for theme font pair definition */\n  fontTheme?: 'major' | 'minor';\n  /** Font color. Can be:\n- Absolute hex: '#4472c4' or '#ff0000'\n- Theme reference: 'theme:accent1' (uses current theme's accent1 color)\n- Theme with tint: 'theme:accent1:0.4' (40% lighter) or 'theme:accent1:-0.25' (25% darker)\n\nTheme references are resolved at render time via resolveThemeColors().\nThis enables cells to automatically update when the workbook theme changes.\n\n@see resolveThemeColors in theme.ts for resolution\n@see ThemeColorSlot for valid slot names (dark1, light1, accent1-6, etc.) */\n  fontColor?: string;\n  /** Font color tint modifier (-1.0 to +1.0). Applied on top of fontColor. */\n  fontColorTint?: number;\n  bold?: boolean;\n  italic?: boolean;\n  /** Underline type. Excel supports 4 underline styles:\n- 'none': No underline (default)\n- 'single': Standard underline under all characters\n- 'double': Two parallel lines under all characters\n- 'singleAccounting': Underline under text only (not spaces), for column alignment\n- 'doubleAccounting': Double underline under text only (not spaces), for column alignment */\n  underlineType?: 'none' | 'single' | 'double' | 'singleAccounting' | 'doubleAccounting';\n  strikethrough?: boolean;\n  /** Superscript text (vertAlign = 'superscript' in Excel).\nText is rendered smaller and raised above the baseline. */\n  superscript?: boolean;\n  /** Subscript text (vertAlign = 'subscript' in Excel).\nText is rendered smaller and lowered below the baseline. */\n  subscript?: boolean;\n  /** Font outline effect.\nDraws only the outline of each character (hollow text).\nRare in modern spreadsheets but supported by Excel. */\n  fontOutline?: boolean;\n  /** Font shadow effect.\nAdds a shadow behind the text.\nRare in modern spreadsheets but supported by Excel. */\n  fontShadow?: boolean;\n  /** Horizontal text alignment.\n- 'general': Context-based (left for text, right for numbers) - Excel default\n- 'left': Left-align text\n- 'center': Center text\n- 'right': Right-align text\n- 'fill': Repeat content to fill cell width\n- 'justify': Justify text (distribute evenly)\n- 'centerContinuous': Center across selection without merging\n- 'distributed': Distribute text evenly with indent support */\n  horizontalAlign?: | 'general'\n    | 'left'\n    | 'center'\n    | 'right'\n    | 'fill'\n    | 'justify'\n    | 'centerContinuous'\n    | 'distributed';\n  /** Vertical text alignment. The TypeScript/API contract uses `middle`\nfor centered vertical alignment.\n- 'top': Align to top of cell\n- 'middle': Center vertically\n- 'bottom': Align to bottom of cell - Excel default\n- 'justify': Justify vertically (distribute lines evenly)\n- 'distributed': Distribute text evenly with vertical spacing */\n  verticalAlign?: 'top' | 'middle' | 'bottom' | 'justify' | 'distributed';\n  wrapText?: boolean;\n  /** Text rotation angle in degrees.\n- 0-90: Counter-clockwise rotation\n- 91-180: Clockwise rotation (180 - value)\n- 255: Vertical text (stacked characters, read top-to-bottom) */\n  textRotation?: number;\n  /** Indent level (0-15).\nEach level adds approximately 8 pixels of indent from the cell edge.\nWorks with left and right horizontal alignment. */\n  indent?: number;\n  /** Shrink text to fit cell width.\nReduces font size to fit all text within the cell width.\nMutually exclusive with wrapText in Excel behavior. */\n  shrinkToFit?: boolean;\n  /** Text reading order for bidirectional text support.\n- 'context': Determined by first character with strong directionality\n- 'ltr': Left-to-right (forced)\n- 'rtl': Right-to-left (forced) */\n  readingOrder?: 'context' | 'ltr' | 'rtl';\n  /** Auto-indent flag (ECMA-376 CT_CellAlignment/@autoIndent). */\n  autoIndent?: boolean;\n  /** Background color. Can be:\n- Absolute hex: '#ffffff' or '#c6efce'\n- Theme reference: 'theme:accent1' (uses current theme's accent1 color)\n- Theme with tint: 'theme:accent1:0.4' (40% lighter) or 'theme:accent1:-0.25' (25% darker)\n\nTheme references are resolved at render time via resolveThemeColors().\nThis enables cells to automatically update when the workbook theme changes.\n\nFor solid fills, this is the only color needed.\nFor pattern fills, this is the background color behind the pattern.\n\n@see resolveThemeColors in theme.ts for resolution\n@see ThemeColorSlot for valid slot names (dark1, light1, accent1-6, etc.) */\n  backgroundColor?: string;\n  /** Background color tint modifier (-1.0 to +1.0). Applied on top of backgroundColor. */\n  backgroundColorTint?: number;\n  /** Pattern fill type.\nXLSX supports 18 pattern types for cell backgrounds.\nWhen set (and not 'none' or 'solid'), the cell uses a pattern fill. */\n  patternType?: PatternType;\n  /** Pattern foreground color.\nThe color of the pattern itself (dots, lines, etc.).\nOnly used when patternType is set to a non-solid pattern. */\n  patternForegroundColor?: string;\n  /** Pattern foreground color tint modifier (-1.0 to +1.0). */\n  patternForegroundColorTint?: number;\n  /** Gradient fill configuration.\nWhen set, overrides backgroundColor and pattern fill.\nExcel supports linear and path (radial) gradients. */\n  gradientFill?: GradientFill;\n  /** Cell borders (top, right, bottom, left, diagonal) */\n  borders?: CellBorders;\n  /** Cell is locked when sheet protection is enabled.\nDefault is true in Excel (all cells locked by default).\nOnly effective when the sheet's isProtected flag is true. */\n  locked?: boolean;\n  /** Formula is hidden when sheet protection is enabled.\nWhen true, the cell's formula is not shown in the formula bar.\nThe computed value is still displayed in the cell.\nOnly effective when the sheet's isProtected flag is true. */\n  hidden?: boolean;\n  /** Cell value is forced to text mode (apostrophe prefix).\nWhen true:\n- Raw value includes the leading apostrophe\n- Display value strips the apostrophe\n- Formula bar shows the apostrophe\n- Value is NOT coerced to date/number/etc.\n\nSet when user types ' as first character.\nFollows cell on sort/move (keyed by CellId, Cell Identity Model).\n\n@see plans/active/spreadsheet-compatibility/08-EDITING.md - Item 8.1 */\n  forcedTextMode?: boolean;\n  /** Arbitrary extension data for future features.\nUse namespaced keys: \"myfeature.mykey\"\nExample: { ignoreError: true } to suppress error indicators. */\n  extensions?: Record<string, unknown>;\n}",
      "docstring": "Cell formatting options\n\nThis interface defines ALL Excel format properties that can be applied to cells.\nThe implementation status of each property is tracked in format-registry.ts.\n\n@see FORMAT_PROPERTY_REGISTRY in format-registry.ts for implementation status"
    },
    "CellId": {
      "name": "CellId",
      "definition": "string & { readonly [__cellId]: true }",
      "docstring": ""
    },
    "CellIdRange": {
      "name": "CellIdRange",
      "definition": "{\n  /** Cell identifier string (CellId) of the top-left corner cell */\n  topLeftCellId: string;\n  /** Cell identifier string (CellId) of the bottom-right corner cell */\n  bottomRightCellId: string;\n}",
      "docstring": "A range defined by corner cell identities.\n\nThis is the universal type for CRDT-safe range references used by:\n- Charts (data ranges, anchor positions)\n- Tables (table extent)\n- Grouping (group extent)\n\nUnlike position-based ranges, CellIdRange automatically handles:\n- Concurrent structure changes (insert/delete rows/cols)\n- Range expansion when cells inserted between corners\n- Correct CRDT composition under concurrent edits\n\nPosition resolution happens at render/extraction time via GridIndex.\n\n@example\n// Chart data range A1:D10\nconst range: CellIdRange = {\n  topLeftCellId: 'abc-123...',     // CellId of A1\n  bottomRightCellId: 'def-456...'  // CellId of D10\n};\n\n// After user inserts column at B:\n// - CellIds unchanged\n// - But A1 is still at (0,0), D10 is now at (9,4)\n// - Range automatically covers A1:E10"
    },
    "CellRange": {
      "name": "CellRange",
      "definition": "{\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n  /** True when entire column(s) selected via column header click */\n  isFullColumn?: boolean;\n  /** True when entire row(s) selected via row header click */\n  isFullRow?: boolean;\n  sheetId?: string;\n}",
      "docstring": "Cell range reference.\n\nThis is THE canonical range type for ALL range operations in the spreadsheet.\nUses flat format for simplicity and JSON compatibility.\n\nUsed by: XState machines, canvas coordinates, React hooks, API, events, tables, pivots"
    },
    "CellRecord": {
      "name": "CellRecord",
      "definition": "{\n  /** Sheet-relative position (0-indexed). */\n  row: number;\n  col: number;\n  /** A1 address as supplied to `cells.get`, normalized to upper-case. */\n  addr: string;\n  /** Effective value (formula result for formula cells, raw value otherwise). `null` for empty. */\n  value: CellValuePrimitive | null;\n  /** Per-cell value type classification — string-keyed enum already used\nby {@link Worksheet.getValueTypes} for ranges.\n`Empty | String | Double | Boolean | Error` (dates classified as\n`Double`, matching the workbook API). */\n  valueType: RangeValueType;\n  /** Authored formula (A1) when the cell has one; `null` otherwise. */\n  formula: string | null;\n  /** Unified region-membership shape. `null` for plain cells. */\n  region: RegionMeta | null;\n  /** Convenience: `region != null && !region.isAnchor`. Derived, not stored. */\n  isArrayMember: boolean;\n}",
      "docstring": "Typed cell readback record returned by {@link WorksheetCellsAccessor.get}.\n\nShape is intentionally divergent from {@link Worksheet.getCell}'s\n`{value: null}` empty form: every in-bounds cell carries a `valueType`\ntag so callers can switch on the discriminant without a separate\n\"is this in-bounds\" check. Out-of-bounds reads return `undefined`."
    },
    "CellStyle": {
      "name": "CellStyle",
      "definition": "{\n  /** Unique identifier (e.g., 'good', 'heading1', 'custom-abc123') */\n  id: string;\n  /** Display name shown in UI (e.g., 'Good', 'Heading 1') */\n  name: string;\n  /** Category for UI grouping */\n  category: StyleCategory;\n  /** The formatting properties to apply */\n  format: CellFormat;\n  /** True for built-in styles, false for user-created */\n  builtIn: boolean;\n}",
      "docstring": "Named cell style that can be applied to cells.\n\nStyles are a named collection of formatting properties. When applied,\nthe format values are copied to cells (not referenced by ID). This\nmatches Excel behavior where style changes don't affect already-styled cells.\n\nBuilt-in styles are defined in code and never persisted.\nCustom styles are stored in Yjs for collaboration."
    },
    "CellStyleCatalog": {
      "name": "CellStyleCatalog",
      "definition": "{\n  /** Ordered category metadata for categories with matching styles. */\n  categories: readonly CellStyleCategoryInfo[];\n  /** Styles matching the catalog query. */\n  styles: readonly CellStyle[];\n}",
      "docstring": ""
    },
    "CellStyleCategoryInfo": {
      "name": "CellStyleCategoryInfo",
      "definition": "{\n  /** Stable category identifier used by CellStyle.category. */\n  id: StyleCategory;\n  /** User-facing category label. */\n  label: string;\n  /** Display order within the catalog. */\n  order: number;\n}",
      "docstring": ""
    },
    "CellStyleListOptions": {
      "name": "CellStyleListOptions",
      "definition": "{\n  /** Which style source to include. Defaults to all styles. */\n  source?: CellStyleSource;\n  /** Restrict results to a single style category. */\n  category?: StyleCategory;\n}",
      "docstring": ""
    },
    "CellStyleSource": {
      "name": "CellStyleSource",
      "definition": "'all' | 'builtIn' | 'custom'",
      "docstring": ""
    },
    "CellType": {
      "name": "CellType",
      "isEnum": true,
      "values": {
        "Blanks": "'Blanks'",
        "Constants": "'Constants'",
        "Formulas": "'Formulas'",
        "Visible": "'Visible'",
        "ConditionalFormats": "'ConditionalFormats'",
        "DataValidations": "'DataValidations'"
      },
      "docstring": "Cell type classification for `getSpecialCells()`.\nMatches the spreadsheet special-cell type."
    },
    "CellValue": {
      "name": "CellValue",
      "definition": "string | number | boolean | null",
      "docstring": "WorkbookFunctions -- Sub-API for programmatic function invocation.\n\nProvides namespaced access to spreadsheet function evaluation without\nwriting to any cell.\n\nUsage: `const result = await wb.functions.sum(\"A1:A10\")`"
    },
    "CellValuePrimitive": {
      "name": "CellValuePrimitive",
      "definition": "string | number | boolean | null",
      "docstring": "Primitive cell value types"
    },
    "CellValueType": {
      "name": "CellValueType",
      "isEnum": true,
      "values": {
        "Numbers": "'Numbers'",
        "Text": "'Text'",
        "Logicals": "'Logicals'",
        "Errors": "'Errors'"
      },
      "docstring": "Value type filter for `getSpecialCells()` when cellType is `Constants` or `Formulas`.\nMatches the spreadsheet special-cell value type."
    },
    "CellWriteOptions": {
      "name": "CellWriteOptions",
      "definition": "{\n  /** If true, value is treated as a formula (prefixed with =) */\n  asFormula?: boolean;\n  /** If true, string values starting with \"=\" are stored as literal text, not formulas. */\n  literal?: boolean;\n}",
      "docstring": "Options controlling how a cell value is interpreted when written."
    },
    "ChangeOrigin": {
      "name": "ChangeOrigin",
      "definition": "'direct' | 'cascade' | 'remote'",
      "docstring": "Origin of a change: direct write, formula recalculation, or remote collaborator."
    },
    "ChangeRecord": {
      "name": "ChangeRecord",
      "definition": "{\n  /** Cell address in A1 notation (e.g. \"B1\"). */\n  address: string;\n  /** 0-based row index. */\n  row: number;\n  /** 0-based column index. */\n  col: number;\n  /** What caused this change. */\n  origin: ChangeOrigin;\n  /** Type of change. */\n  type: 'modified';\n  /** Value before the change (undefined if cell was previously empty). */\n  oldValue?: unknown;\n  /** Value after the change (undefined if cell was cleared). */\n  newValue?: unknown;\n}",
      "docstring": "WorksheetChanges — 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 query-scoped subscriptions and transaction origin tagging."
    },
    "ChangeTrackOptions": {
      "name": "ChangeTrackOptions",
      "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}",
      "docstring": "Options for creating a change tracker."
    },
    "ChangeTracker": {
      "name": "ChangeTracker",
      "definition": "{\n  /** Drain all accumulated changes since creation or last collect() call.\nReturns addresses + metadata only (no cell values) — 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}",
      "docstring": "A handle that accumulates change records across mutations."
    },
    "Chart": {
      "name": "Chart",
      "definition": "{\n  id: string;\n  sheetId?: string;\n  createdAt?: number;\n  updatedAt?: number;\n}",
      "docstring": "Chart as returned by get/list operations.\n\nExtends ChartConfig with identity and metadata fields."
    },
    "ChartAreaConfig": {
      "name": "ChartAreaConfig",
      "definition": "{\n  fill?: ChartFill;\n  border?: ChartBorder;\n  format?: ChartFormat;\n}",
      "docstring": "Chart area configuration"
    },
    "ChartBorder": {
      "name": "ChartBorder",
      "definition": "{\n  color?: string;\n  width?: number;\n  style?: string;\n}",
      "docstring": "Shared chart border configuration (matches ChartBorderData wire type)"
    },
    "ChartColor": {
      "name": "ChartColor",
      "definition": "string | { theme: string; tintShade?: number }",
      "docstring": "Color: hex string for direct colors, object for theme-aware colors."
    },
    "ChartConfig": {
      "name": "ChartConfig",
      "definition": "{\n  type: ChartType;\n  /** Chart sub-type. For type-safe usage, prefer TypedChartConfig<T> which constrains subType to match type. */\n  subType?: BarSubType | LineSubType | AreaSubType | StockSubType | RadarSubType;\n  /** Anchor row (0-based) */\n  anchorRow: number;\n  /** Anchor column (0-based) */\n  anchorCol: number;\n  /** Chart width in cells */\n  width: number;\n  /** Chart height in cells */\n  height: number;\n  /** Data range in A1 notation (e.g., \"A1:D10\"). Optional when series[].values are provided. */\n  dataRange?: string;\n  /** Series labels range in A1 notation */\n  seriesRange?: string;\n  /** Category labels range in A1 notation */\n  categoryRange?: string;\n  seriesOrientation?: SeriesOrientation;\n  title?: string;\n  subtitle?: string;\n  legend?: LegendConfig;\n  axis?: AxisConfig;\n  colors?: string[];\n  series?: SeriesConfig[];\n  dataLabels?: DataLabelConfig;\n  pieSlice?: PieSliceConfig;\n  /** @deprecated Use trendlines[] instead — kept for backward compat */\n  trendline?: TrendlineConfig;\n  /** Wire-compatible trendline array */\n  trendlines?: TrendlineConfig[];\n  /** Connect scatter points with lines (scatter-lines variant) */\n  showLines?: boolean;\n  /** Use smooth curves for scatter lines (scatter-smooth-lines variant) */\n  smoothLines?: boolean;\n  /** Fill area under radar lines */\n  radarFilled?: boolean;\n  /** Show markers on radar vertices */\n  radarMarkers?: boolean;\n  /** How blank cells are plotted: 'gap' (leave gap), 'zero' (treat as zero), 'span' (interpolate) */\n  displayBlanksAs?: 'gap' | 'zero' | 'span';\n  /** Whether to plot only visible cells (respecting row/column hiding) */\n  plotVisibleOnly?: boolean;\n  /** Gap width between bars/columns as percentage (0-500). Applied to bar/column chart types. */\n  gapWidth?: number;\n  /** Overlap between bars/columns (-100 to 100). Applied to clustered bar/column types. */\n  overlap?: number;\n  /** Hole size for doughnut charts as percentage (10-90) */\n  doughnutHoleSize?: number;\n  /** First slice angle for pie/doughnut charts in degrees (0-360) */\n  firstSliceAngle?: number;\n  /** Bubble scale for bubble charts as percentage (0-300) */\n  bubbleScale?: number;\n  /** Split type for of-pie charts (pie-of-pie, bar-of-pie) */\n  splitType?: 'auto' | 'value' | 'percent' | 'position' | 'custom';\n  /** Split value threshold for of-pie charts */\n  splitValue?: number;\n  waterfall?: WaterfallConfig;\n  histogram?: HistogramConfig;\n  boxplot?: BoxplotConfig;\n  heatmap?: HeatmapConfig;\n  violin?: ViolinConfig;\n  treemap?: TreemapConfig;\n  sunburst?: SunburstConfig;\n  regionMap?: RegionMapConfig;\n  name?: string;\n  chartTitle?: TitleConfig;\n  chartArea?: ChartAreaConfig;\n  plotArea?: PlotAreaConfig;\n  style?: number;\n  roundedCorners?: boolean;\n  autoTitleDeleted?: boolean;\n  showDataLabelsOverMaximum?: boolean;\n  chartFormat?: ChartFormat;\n  plotFormat?: ChartFormat;\n  titleFormat?: ChartFormat;\n  titleRichText?: ChartFormatString[];\n  titleFormula?: string;\n  dataTable?: DataTableConfig;\n  /** Which level of multi-level category labels to show (0-based). */\n  categoryLabelLevel?: number;\n  /** Which level of multi-level series names to show (0-based). */\n  seriesNameLevel?: number;\n  /** Show/hide all pivot field buttons on the chart. */\n  showAllFieldButtons?: boolean;\n  /** Size of the secondary plot for PieOfPie/BarOfPie charts (5-200%). OOXML c:secondPieSize. */\n  secondPlotSize?: number;\n  /** Use different colors per category. OOXML c:varyColors (chart-group level). */\n  varyByCategories?: boolean;\n  /** Pivot chart display options. */\n  pivotOptions?: PivotChartOptions;\n  /** Z-order command for layering charts.\nAccepted as a convenience field by ws.charts.update() to adjust z-index:\n- 'front': bring to top of stack\n- 'back': send to bottom of stack\n- 'forward': move one layer up\n- 'backward': move one layer down */\n  zOrder?: 'front' | 'back' | 'forward' | 'backward';\n  /** Mark shape for 3D bar/column charts (default: 'box'). Maps to OOXML c:shape. */\n  barShape?: 'box' | 'cylinder' | 'cone' | 'pyramid';\n  /** Extensible extra data for enriched chart configurations.\nContains additional chart-specific settings (e.g., chartTitle font, chartArea fill)\nthat are stored on the chart but not part of the core config schema. */\n  extra?: unknown;\n  /** Chart height in points */\n  heightPt?: number;\n  /** Chart width in points */\n  widthPt?: number;\n  /** Left offset in points */\n  leftPt?: number;\n  /** Top offset in points */\n  topPt?: number;\n  /** Enable 3D bubble effect for bubble charts */\n  bubble3DEffect?: boolean;\n  /** Render surface chart as wireframe */\n  wireframe?: boolean;\n  /** Use surface chart top-down view (contour) */\n  surfaceTopView?: boolean;\n  /** Chart color scheme index */\n  colorScheme?: number;\n}",
      "docstring": "Public chart configuration -- the shape used by the unified API surface.\n\nThis contains all user-facing fields for creating/updating charts.\nInternal-only fields (CellId anchors, zIndex, table linking cache)\nare defined in StoredChartConfig in the charts package."
    },
    "ChartFill": {
      "name": "ChartFill",
      "definition": "| { type: 'none' }\n  | { type: 'solid'; color: ChartColor; transparency?: number }\n  | {\n      type: 'gradient';\n      gradientType: 'linear' | 'radial' | 'rectangular';\n      angle?: number;\n      stops: { position: number; color: ChartColor; transparency?: number }[];\n    }\n  | { type: 'pattern'; pattern: string; foreground?: ChartColor; background?: ChartColor }",
      "docstring": "Fill. Maps to OOXML EG_FillProperties."
    },
    "ChartFont": {
      "name": "ChartFont",
      "definition": "{\n  name?: string;\n  size?: number;\n  bold?: boolean;\n  italic?: boolean;\n  color?: ChartColor;\n  underline?: | 'none'\n    | 'single'\n    | 'double'\n    | 'singleAccountant'\n    | 'doubleAccountant'\n    | 'dash'\n    | 'dashLong'\n    | 'dotDash'\n    | 'dotDotDash'\n    | 'dotted'\n    | 'heavy'\n    | 'wavy'\n    | 'wavyDouble'\n    | 'wavyHeavy'\n    | 'words';\n  strikethrough?: 'single' | 'double';\n}",
      "docstring": "Font. Maps to OOXML tx_pr → defRPr."
    },
    "ChartFormat": {
      "name": "ChartFormat",
      "definition": "{\n  fill?: ChartFill;\n  line?: ChartLineFormat;\n  font?: ChartFont;\n  textRotation?: number;\n  shadow?: ChartShadow;\n}",
      "docstring": "Composite format for a chart element."
    },
    "ChartFormatString": {
      "name": "ChartFormatString",
      "definition": "{\n  text: string;\n  font?: ChartFont;\n}",
      "docstring": "A styled text run for rich text in chart titles and data labels."
    },
    "ChartLeaderLinesFormat": {
      "name": "ChartLeaderLinesFormat",
      "definition": "{\n  format: ChartLineFormat;\n}",
      "docstring": "Leader line formatting for data labels."
    },
    "ChartLineFormat": {
      "name": "ChartLineFormat",
      "definition": "{\n  color?: ChartColor;\n  width?: number;\n  dashStyle?: 'solid' | 'dot' | 'dash' | 'dashDot' | 'longDash' | 'longDashDot' | 'longDashDotDot';\n  transparency?: number;\n}",
      "docstring": "Line/border. Maps to OOXML CT_LineProperties."
    },
    "ChartObject": {
      "name": "ChartObject",
      "definition": "{\n  type: 'chart';\n  /** The type of chart (bar, line, pie, etc.) */\n  chartType: ChartObjectType;\n  /** How chart anchors to cells - affects resize behavior.\n- 'oneCell': Chart moves with anchor cell, but doesn't resize with cell changes\n- 'twoCell': Chart moves and resizes with both anchor cells */\n  anchorMode: 'oneCell' | 'twoCell';\n  /** Width in cell units (for oneCell mode sizing).\nIn twoCell mode, width is determined by the anchor cell positions. */\n  widthCells: number;\n  /** Height in cell units (for oneCell mode sizing).\nIn twoCell mode, height is determined by the anchor cell positions. */\n  heightCells: number;\n  /** Full chart configuration (series, axes, legend, colors, etc.).\nStored directly on the floating object as a sub-object field, following the\nsame pattern as fill/outline/shadow on shapes. */\n  chartConfig: Record<string, unknown>;\n  /** Chart data range using CellId corners (CRDT-safe).\nAutomatically expands when rows/cols inserted between corners.\nOptional because some charts may have inline data or external sources. */\n  dataRangeIdentity?: CellIdRange;\n  /** Series labels range using CellId corners (CRDT-safe).\nUsed to label each data series in the chart. */\n  seriesRangeIdentity?: CellIdRange;\n  /** Category labels range using CellId corners (CRDT-safe).\nUsed for x-axis labels in most chart types. */\n  categoryRangeIdentity?: CellIdRange;\n}",
      "docstring": "Chart floating object.\n\nIntegrates charts with the FloatingObjectManager to provide:\n- Hit-testing for selection\n- Drag/resize/z-order operations\n- Consistent interaction model with other floating objects\n\nArchitecture Notes:\n- Uses Cell Identity Model with CellIdRange references (CRDT-safe)\n- Full chart configuration lives in the Charts domain module\n- This interface provides the FloatingObject layer for interactions\n- Position resolution happens at render time via CellPositionLookup\n\n@example\n// Chart data range A1:D10\nconst chart: ChartObject = {\n  id: 'chart-1',\n  type: 'chart',\n  sheetId: 'sheet-abc',\n  position: { anchorType: 'oneCell', from: { cellId: '...', xOffset: 0, yOffset: 0 }, width: 400, height: 300 },\n  zIndex: 1,\n  locked: false,\n  printable: true,\n  chartType: 'column',\n  anchorMode: 'oneCell',\n  widthCells: 8,\n  heightCells: 15,\n  chartConfig: { series: [], axes: {} },\n  dataRangeIdentity: { topLeftCellId: '...', bottomRightCellId: '...' }\n};"
    },
    "ChartObjectType": {
      "name": "ChartObjectType",
      "definition": "| 'bar'\n  | 'column'\n  | 'line'\n  | 'area'\n  | 'pie'\n  | 'doughnut'\n  | 'scatter'\n  | 'bubble'\n  | 'combo'\n  | 'radar'\n  | 'stock'\n  | 'funnel'\n  | 'waterfall'",
      "docstring": "Supported chart types for the ChartObject.\nMatches the ChartType from charts package but defined here for contracts."
    },
    "ChartSeriesDimension": {
      "name": "ChartSeriesDimension",
      "definition": "'categories' | 'values' | 'bubbleSizes'",
      "docstring": "Dimension identifiers for series data access."
    },
    "ChartShadow": {
      "name": "ChartShadow",
      "definition": "{\n  visible?: boolean;\n  color?: ChartColor;\n  blur?: number;\n  offsetX?: number;\n  offsetY?: number;\n  transparency?: number;\n}",
      "docstring": "Shadow effect for chart elements."
    },
    "ChartType": {
      "name": "ChartType",
      "definition": "| 'bar'\n  | 'column'\n  | 'line'\n  | 'area'\n  | 'pie'\n  | 'doughnut'\n  | 'scatter'\n  | 'bubble'\n  | 'combo'\n  | 'radar'\n  | 'stock'\n  | 'funnel'\n  | 'waterfall'\n  // OOXML roundtrip types\n  | 'surface'\n  | 'surface3d'\n  | 'ofPie'\n  | 'bar3d'\n  | 'column3d'\n  | 'line3d'\n  | 'pie3d'\n  | 'area3d'\n  // Statistical chart types\n  | 'histogram'\n  | 'boxplot'\n  | 'heatmap'\n  | 'violin'\n  | 'pareto'\n  // Hierarchical chart types\n  | 'treemap'\n  | 'sunburst'\n  // Geographic chart types\n  | 'regionMap'\n  // Exploded pie variants\n  | 'pieExploded'\n  | 'pie3dExploded'\n  | 'doughnutExploded'\n  // Bubble with 3D effect\n  | 'bubble3DEffect'\n  // Surface variants\n  | 'surfaceWireframe'\n  | 'surfaceTopView'\n  | 'surfaceTopViewWireframe'\n  // Line with markers\n  | 'lineMarkers'\n  | 'lineMarkersStacked'\n  | 'lineMarkersStacked100'\n  // Decorative 3D shape charts (cylinder)\n  | 'cylinderColClustered'\n  | 'cylinderColStacked'\n  | 'cylinderColStacked100'\n  | 'cylinderBarClustered'\n  | 'cylinderBarStacked'\n  | 'cylinderBarStacked100'\n  | 'cylinderCol'\n  // Decorative 3D shape charts (cone)\n  | 'coneColClustered'\n  | 'coneColStacked'\n  | 'coneColStacked100'\n  | 'coneBarClustered'\n  | 'coneBarStacked'\n  | 'coneBarStacked100'\n  | 'coneCol'\n  // Decorative 3D shape charts (pyramid)\n  | 'pyramidColClustered'\n  | 'pyramidColStacked'\n  | 'pyramidColStacked100'\n  | 'pyramidBarClustered'\n  | 'pyramidBarStacked'\n  | 'pyramidBarStacked100'\n  | 'pyramidCol'",
      "docstring": "Supported chart types for spreadsheet charts"
    },
    "CheckboxControl": {
      "name": "CheckboxControl",
      "definition": "{\n  type: 'checkbox';\n  /** REQUIRED - Cell that holds the boolean value.\nUses CellId for stability across row/col insert/delete.\n\nExpected cell values:\n- TRUE, true, 1 → checked\n- FALSE, false, 0, empty → unchecked */\n  linkedCellId: CellId;\n  /** Optional label displayed next to checkbox */\n  label?: string;\n  /** Value to write when checked.\nDefault: true (boolean TRUE) */\n  checkedValue?: unknown;\n  /** Value to write when unchecked.\nDefault: false (boolean FALSE) */\n  uncheckedValue?: unknown;\n}",
      "docstring": "Checkbox control - reads/writes boolean to linked cell.\n\nNO local \"checked\" state - value lives in cell.\nThis is critical for single source of truth.\n\nData flow:\n1. Render: Read from cell → `checked = store.getCellValueById(linkedCellId) === true`\n2. Click: Write to cell → `store.setCellValueById(linkedCellId, !checked)`\n3. EventBus fires → component re-renders with new value\n\n@example\n// Cell A1 contains TRUE/FALSE\n// Checkbox linked to A1\n// Formula =IF(A1, \"Yes\", \"No\") works automatically"
    },
    "CheckpointInfo": {
      "name": "CheckpointInfo",
      "definition": "{\n  /** Unique checkpoint ID */\n  id: string;\n  /** Optional human-readable label */\n  label?: string;\n  /** Creation timestamp (Unix ms) */\n  timestamp: number;\n}",
      "docstring": "Information about a saved checkpoint (version snapshot)."
    },
    "Choose": {
      "name": "Choose",
      "definition": "{\n  /** Discriminator for LayoutNodeChild union type */\n  kind: 'choose';\n  /** Optional name for this choose element. */\n  name: string;\n  /** Ordered list of if-clauses.\nEvaluated in document order; first matching clause wins. */\n  ifClauses: readonly IfClause[];\n  /** Optional else clause.\nUsed when no if-clause condition evaluates to true.\nNull if no else clause is defined. */\n  elseClauses: ElseClause | null;\n}",
      "docstring": "OOXML choose element for conditional layout branching.\n\nContains one or more `if` clauses evaluated in order, and an optional\n`else` clause. The first `if` clause whose condition evaluates to true\nhas its children included in the layout tree. If no `if` clause matches,\nthe `else` clause children are used (if present).\n\n@see ECMA-376 Section 21.4.2.4 choose (Choose)"
    },
    "ChromeTheme": {
      "name": "ChromeTheme",
      "definition": "{\n  canvasBackground: string;\n  gridlineColor: string;\n  headerBackground: string;\n  headerText: string;\n  headerBorder: string;\n  headerHighlightBackground: string;\n  headerHighlightText: string;\n  selectionFill: string;\n  selectionBorder: string;\n  activeCellBorder: string;\n  fillHandleColor: string;\n  dragSourceColor: string;\n  dragTargetColor: string;\n  scrollbarTrack: string;\n  scrollbarThumb: string;\n}",
      "docstring": "Data Source Shared Types\n\nTypes shared between `./data-sources.ts` and `./render-context.ts`.\nExtracted to break the cycle between those two modules — both now import\nfrom this leaf file instead of from each other.\n\n@module @mog-sdk/contracts/rendering/data-source-types"
    },
    "ClearApplyTo": {
      "name": "ClearApplyTo",
      "definition": "'all' | 'contents' | 'formats' | 'hyperlinks'",
      "docstring": "Determines which aspects of a range to clear.\nMatches the spreadsheet clear-mode enum."
    },
    "ClearResult": {
      "name": "ClearResult",
      "definition": "{\n  /** Number of cells in the cleared range. */\n  cellCount: number;\n}",
      "docstring": "Confirmation returned by clearData() and clear()."
    },
    "CodeResult": {
      "name": "CodeResult",
      "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}",
      "docstring": "Result of a code execution."
    },
    "ColId": {
      "name": "ColId",
      "definition": "string & { readonly [__colId]: true }",
      "docstring": ""
    },
    "ColumnFilterCriteria": {
      "name": "ColumnFilterCriteria",
      "definition": "{\n  /** Type of filter applied to this column.\n\n- value: Checkbox list of specific values to include\n- condition: Operator-based rules (equals, contains, etc.)\n- color: Filter by cell background or font color\n- top10: Top/bottom N items or percent */\n  type: 'value' | 'condition' | 'color' | 'top10' | 'dynamic' | 'icon';\n  /** For value filters: list of values to INCLUDE (show).\nUnchecked values in the dropdown are excluded (hidden).\nInclude empty string or null to show blank cells. */\n  values?: CellValue[];\n  /** For value filters: explicitly include blank cells.\nWhen present, takes precedence over inferring from values array. */\n  includeBlanks?: boolean;\n  /** For condition filters: one or two filter conditions.\nWhen two conditions are present, conditionLogic determines how they combine. */\n  conditions?: FilterCondition[];\n  /** Logic for combining multiple conditions.\n- 'and': Row must match ALL conditions\n- 'or': Row must match ANY condition\nDefault: 'and' */\n  conditionLogic?: 'and' | 'or';\n  /** For color filters: filter by fill (background) or font color. */\n  colorFilter?: {\n    /**\n     * Which color axis to filter on.\n     *\n     * Vocabulary matches Excel/ECMA-376: `'fill'` is the cell's background\n     * fill color; `'font'` is the text color. (Renamed from `'background'`\n     * to `'fill'` so the filter discriminator lines up with the rest of the\n     * filter/sort surface and the harness probe.)\n     */\n    type: 'fill' | 'font';\n    /** Hex color to match (e.g., '#ff0000') */\n    color: string;\n  };\n  /** For top/bottom N filters: show only the highest or lowest values. */\n  topBottom?: {\n    /** Show top values or bottom values */\n    type: 'top' | 'bottom';\n    /** Number of items or percentage */\n    count: number;\n    /** Whether count is number of items or percentage */\n    by: 'items' | 'percent' | 'sum';\n  };\n  /** For dynamic filters: a pre-defined rule resolved against live data.\nExamples: above average, below average, today, this month, etc. */\n  dynamicFilter?: {\n    /** The dynamic filter rule to apply */\n    rule: DynamicFilterRule;\n  };\n  /** For icon filters: filter by conditional formatting icon.\nRequires an icon set CF rule on the column. Rows are shown only if\nthe evaluated icon matches the specified set + index. */\n  iconFilter?: {\n    /** Icon set name (e.g. \"3Arrows\", \"4Rating\") */\n    iconSet: string;\n    /** Icon index within the set (0-based) */\n    iconIndex: number;\n  };\n}",
      "docstring": "Column filter criteria - what's applied to a single column.\n\nEach column in a filter range can have its own criteria.\nRows must match ALL column filters (AND logic across columns)."
    },
    "ColumnMapping": {
      "name": "ColumnMapping",
      "definition": "{\n  /** Column index to write to (0-indexed) */\n  columnIndex: number;\n  /** JSONPath or field name to extract from data */\n  dataPath: string;\n  /** Optional transform formula (receives value as input) */\n  transform?: string;\n  /** Header text (if headerRow >= 0) */\n  headerText?: string;\n}",
      "docstring": "Column mapping for a sheet data binding."
    },
    "ComboBoxControl": {
      "name": "ComboBoxControl",
      "definition": "{\n  type: 'comboBox';\n  /** REQUIRED - Cell that holds the selected value.\nUses CellId for stability across row/col insert/delete.\n\nStores the selected item VALUE (string), not index.\nThis makes formulas like =VLOOKUP(A1, ...) work naturally. */\n  linkedCellId: CellId;\n  /** Static items list.\nUse this for fixed options that don't change. */\n  items?: string[];\n  /** Dynamic items from a cell range.\nUses IdentityRangeRef (CellId-based) for stability.\nRange values are read at render time.\n\nIf both `items` and `itemsSourceRef` are set, `itemsSourceRef` takes precedence. */\n  itemsSourceRef?: IdentityRangeRef;\n  /** Placeholder text when no value is selected. */\n  placeholder?: string;\n  /** Whether to allow typing to filter items.\nDefault: true */\n  filterable?: boolean;\n}",
      "docstring": "ComboBox control - dropdown selection linked to cell.\n\nNO local \"selectedIndex\" state - value lives in cell.\nCell stores the selected VALUE (string), not the index.\n\nData flow:\n1. Render: Read from cell → find matching item index\n2. Select: Write to cell → `store.setCellValueById(linkedCellId, selectedItem)`\n3. EventBus fires → component re-renders with new selection\n\nItems can be:\n- Static: `items: ['Option A', 'Option B', 'Option C']`\n- Dynamic: `itemsSourceRef: { startId: 'abc', endId: 'xyz' }` (range of cells)"
    },
    "Comment": {
      "name": "Comment",
      "definition": "{\n  id: string;\n  cellRef: string;\n  author: string;\n  authorId?: string;\n  authorEmail?: string;\n  content: string | null;\n  runs: RichTextRun[];\n  threadId: string | null;\n  parentId: string | null;\n  personId?: string;\n  resolved?: boolean;\n  timestamp?: string;\n  createdAt: number | null;\n  modifiedAt: number | null;\n  xrUid?: string;\n  shapeId?: number;\n  extLstXml?: string;\n  contentType?: CommentContentType;\n  mentions?: CommentMention[];\n  commentType: CommentType;\n  visible?: boolean;\n  noteHeight?: number;\n  noteWidth?: number;\n}",
      "docstring": ""
    },
    "CommentContentType": {
      "name": "CommentContentType",
      "definition": "'plain' | 'mention'",
      "docstring": "Distinguishes plain text comments from those containing @mentions."
    },
    "CommentMention": {
      "name": "CommentMention",
      "definition": "{\n  displayText: string;\n  userId: string;\n  email?: string;\n  startIndex: number;\n  length: number;\n}",
      "docstring": "A mention of a user within a comment's rich text content."
    },
    "CommentType": {
      "name": "CommentType",
      "definition": "'note' | 'threadedComment'",
      "docstring": "Whether a comment is a legacy note or a modern threaded comment."
    },
    "CommentUpdate": {
      "name": "CommentUpdate",
      "definition": "{\n  /** New plain-text content for the comment. */\n  text?: string;\n  /** @mentions to embed in the comment (implies content_type = Mention). */\n  mentions?: CommentMention[];\n}",
      "docstring": "Options for updating an existing comment via `comments.update()`."
    },
    "CompoundLine": {
      "name": "CompoundLine",
      "definition": "'sng' | 'dbl' | 'thickThin' | 'thinThick' | 'tri'",
      "docstring": "Compound line type for multi-line strokes. Maps to ST_CompoundLine (ECMA-376, dml-main.xsd). Uses camelCase variants; bridge uses PascalCase."
    },
    "CompoundLineStyle": {
      "name": "CompoundLineStyle",
      "definition": "'single' | 'double' | 'thickThin' | 'thinThick' | 'triple'",
      "docstring": "Compound line style."
    },
    "ComputedConnector": {
      "name": "ComputedConnector",
      "definition": "{\n  /** Source node ID */\n  fromNodeId: NodeId;\n  /** Target node ID */\n  toNodeId: NodeId;\n  /** Connector type */\n  connectorType: ConnectorType;\n  /** Path data for rendering */\n  path: ConnectorPath;\n  /** Stroke color (CSS color string) */\n  stroke: string;\n  /** Stroke width in pixels */\n  strokeWidth: number;\n  /** Arrow head at start of connector */\n  arrowStart?: ArrowHead;\n  /** Arrow head at end of connector */\n  arrowEnd?: ArrowHead;\n}",
      "docstring": "Computed connector between two nodes."
    },
    "ComputedLayout": {
      "name": "ComputedLayout",
      "definition": "{\n  /** Computed shape positions and styles for each node */\n  shapes: ComputedShape[];\n  /** Computed connector paths between nodes */\n  connectors: ComputedConnector[];\n  /** Overall bounds of the rendered diagram */\n  bounds: { width: number; height: number };\n  /** Version number, incremented on each layout change */\n  version: number;\n}",
      "docstring": "Computed layout result (runtime cache, NOT persisted to Yjs).\n\nThis is calculated by layout algorithms and cached by the bridge.\nInvalidated whenever the diagram structure or styling changes.\n\nLayout computation is expensive, so this cache avoids recalculating\npositions on every render."
    },
    "ComputedShape": {
      "name": "ComputedShape",
      "definition": "{\n  /** The node this shape represents */\n  nodeId: NodeId;\n  /** Shape type to render */\n  shapeType: SmartArtShapeType;\n  /** X position in pixels (relative to diagram origin) */\n  x: number;\n  /** Y position in pixels (relative to diagram origin) */\n  y: number;\n  /** Width in pixels */\n  width: number;\n  /** Height in pixels */\n  height: number;\n  /** Rotation angle in degrees */\n  rotation: number;\n  /** Fill color (CSS color string) */\n  fill: string;\n  /** Stroke/border color (CSS color string) */\n  stroke: string;\n  /** Stroke width in pixels */\n  strokeWidth: number;\n  /** Text content to display */\n  text: string;\n  /** Text styling */\n  textStyle: TextStyle;\n  /** Visual effects (shadow, glow, etc.) */\n  effects: ShapeEffects;\n}",
      "docstring": "Computed shape position and style for a single node.\n\nContains all information needed to render a node's shape."
    },
    "ConditionalFormat": {
      "name": "ConditionalFormat",
      "definition": "{\n  /** Unique format identifier. */\n  id: string;\n  /** Sheet this format belongs to. */\n  sheetId?: string;\n  /** Whether this CF was created from a pivot table. */\n  pivot?: boolean;\n  /** Cell ranges this format applies to. */\n  ranges: CellRange[];\n  /** CellId-based range identities for CRDT-safe tracking. */\n  rangeIdentities?: { topLeftCellId: string; bottomRightCellId: string }[];\n  /** Rules to evaluate (sorted by priority). */\n  rules: CFRule[];\n}",
      "docstring": "A conditional format definition — associates rules with cell ranges.\n\nThis is the public API type. The kernel stores additional internal fields\n(CellIdRange for CRDT-safe structure change handling) that are resolved\nto position-based ranges before being returned through the API."
    },
    "ConditionalFormatUpdate": {
      "name": "ConditionalFormatUpdate",
      "definition": "{\n  /** Replace the rules array. */\n  rules?: CFRule[];\n  /** Replace the ranges this format applies to. */\n  ranges?: CellRange[];\n  /** Set stopIfTrue on all rules in this format. */\n  stopIfTrue?: boolean;\n}",
      "docstring": "Update payload for a conditional format."
    },
    "ConnectorHandle": {
      "name": "ConnectorHandle",
      "definition": "{\n  /** Update connector routing, endpoints, fill, outline. ConnectorConfig pending — uses generic record. */\n  update(props: Record<string, unknown>): Promise<void>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<ConnectorHandle>;;\n  getData(): Promise<ConnectorObject>;;\n}",
      "docstring": ""
    },
    "ConnectorObject": {
      "name": "ConnectorObject",
      "definition": "{\n  type: 'connector';\n  /** Connector shape preset (e.g., straightConnector1, bentConnector3) */\n  shapeType: ShapeType;\n  /** Start connection binding (which shape and site index) */\n  startConnection?: { shapeId: string; siteIndex: number };\n  /** End connection binding (which shape and site index) */\n  endConnection?: { shapeId: string; siteIndex: number };\n  /** Fill configuration */\n  fill?: ObjectFill;\n  /** Outline/stroke configuration (includes arrowheads) */\n  outline?: ShapeOutline;\n}",
      "docstring": "Connector floating object.\nA line or connector shape that links two objects (or floats freely).\nConnectors have optional arrowheads and connection site bindings."
    },
    "ConnectorPath": {
      "name": "ConnectorPath",
      "definition": "{\n  /** Path type */\n  type: 'line' | 'bezier' | 'polyline';\n  /** Points along the path */\n  points: Array<{ x: number; y: number }>;\n  /** Control points for bezier curves */\n  controlPoints?: Array<{ x: number; y: number }>;\n}",
      "docstring": "Path data for rendering a connector."
    },
    "ConnectorType": {
      "name": "ConnectorType",
      "definition": "'straight' | 'elbow' | 'curved' | 'none'",
      "docstring": "Type of connector line between nodes."
    },
    "CopyFromOptions": {
      "name": "CopyFromOptions",
      "definition": "{\n  /** What to copy — defaults to 'all'. */\n  copyType?: CopyType;\n  /** Skip blank source cells (preserve target values where source is empty). */\n  skipBlanks?: boolean;\n  /** Transpose rows ↔ columns during copy. */\n  transpose?: boolean;\n}",
      "docstring": "Options for Range.copyFrom() operation."
    },
    "CopyType": {
      "name": "CopyType",
      "definition": "'all' | 'formulas' | 'values' | 'formats'",
      "docstring": "Specifies what data to copy in a range copy operation.\nMaps to the spreadsheet range-copy mode."
    },
    "CreateBindingConfig": {
      "name": "CreateBindingConfig",
      "definition": "{\n  /** Connection providing the data */\n  connectionId: string;\n  /** Maps data fields to columns */\n  columnMappings: ColumnMapping[];\n  /** Auto-insert/delete rows to match data length (default: true) */\n  autoGenerateRows?: boolean;\n  /** Row index for headers (-1 = no header row, default: 0) */\n  headerRow?: number;\n  /** First row of data (0-indexed, default: 1) */\n  dataStartRow?: number;\n  /** Preserve header row formatting on refresh (default: true) */\n  preserveHeaderFormatting?: boolean;\n}",
      "docstring": "Configuration for creating a sheet data binding."
    },
    "CreateCheckboxOptions": {
      "name": "CreateCheckboxOptions",
      "definition": "{\n  /** Sheet to create in */\n  sheetId: SheetId;\n  /** Anchor position (row, col, offsets) - converted to CellId internally */\n  anchor: { row: number; col: number; xOffset?: number; yOffset?: number };\n  /** Cell to link (row, col) - converted to CellId internally */\n  linkedCell: { row: number; col: number };\n  /** Optional label */\n  label?: string;\n  /** Optional size override */\n  width?: number;\n  height?: number;\n}",
      "docstring": "Options for creating a checkbox control."
    },
    "CreateComboBoxOptions": {
      "name": "CreateComboBoxOptions",
      "definition": "{\n  /** Sheet to create in */\n  sheetId: SheetId;\n  /** Anchor position */\n  anchor: { row: number; col: number; xOffset?: number; yOffset?: number };\n  /** Cell to link for selected value */\n  linkedCell: { row: number; col: number };\n  /** Static items list */\n  items?: string[];\n  /** Dynamic items source range (row/col based, converted to CellId) */\n  itemsSource?: {\n    startRow: number;\n    startCol: number;\n    endRow: number;\n    endCol: number;\n  };\n  /** Placeholder text */\n  placeholder?: string;\n  /** Optional size override */\n  width?: number;\n  height?: number;\n}",
      "docstring": "Options for creating a comboBox control."
    },
    "CreateDataTableOptions": {
      "name": "CreateDataTableOptions",
      "definition": "{\n  /** Full A1 range selected for the Data Table, including formula/header cells. */\n  tableRange: string;\n  /** Excel row input cell. It receives top-row header values. */\n  rowInputCell?: string | null;\n  /** Excel column input cell. It receives left-column header values. */\n  colInputCell?: string | null;\n}",
      "docstring": "Persistent Data Table creation options.\n\n`tableRange` is the full anchor-inclusive table selection. The worksheet is\nimplied by the Worksheet API instance."
    },
    "CreateDataTableResult": {
      "name": "CreateDataTableResult",
      "definition": "{\n  regionId: string;\n  tableRange: string;\n  bodyRange: string;\n  rowInputCell?: string | null;\n  colInputCell?: string | null;\n  rowsComputed: number;\n  colsComputed: number;\n  cellCount: number;\n}",
      "docstring": "Result of creating a persistent Data Table region."
    },
    "CreateDrawingOptions": {
      "name": "CreateDrawingOptions",
      "definition": "{\n  /** Optional name for the drawing object */\n  name?: string;\n  /** Alt text for accessibility */\n  altText?: string;\n  /** Whether the drawing is locked */\n  locked?: boolean;\n  /** Whether the drawing appears in print */\n  printable?: boolean;\n  /** Initial background color */\n  backgroundColor?: string;\n  /** Initial tool settings */\n  toolState?: Partial<InkToolState>;\n}",
      "docstring": "Options for creating a new drawing object."
    },
    "CreateNamesFromSelectionOptions": {
      "name": "CreateNamesFromSelectionOptions",
      "definition": "{\n  /** Create names from labels in the top row of the selection. */\n  top?: boolean;\n  /** Create names from labels in the left column of the selection. */\n  left?: boolean;\n  /** Create names from labels in the bottom row of the selection. */\n  bottom?: boolean;\n  /** Create names from labels in the right column of the selection. */\n  right?: boolean;\n}",
      "docstring": "Options for creating named ranges from row/column labels in a selection."
    },
    "CreateNamesResult": {
      "name": "CreateNamesResult",
      "definition": "{\n  /** Number of names successfully created. */\n  success: number;\n  /** Number of names skipped (already exist or invalid). */\n  skipped: number;\n}",
      "docstring": "Result of a create-names-from-selection operation."
    },
    "CreateSparklineGroupOptions": {
      "name": "CreateSparklineGroupOptions",
      "definition": "{\n  /** Whether data is in rows (true) or columns (false) */\n  dataInRows?: boolean;\n  /** Shared visual settings */\n  visual?: Partial<SparklineVisualSettings>;\n  /** Shared axis settings */\n  axis?: Partial<SparklineAxisSettings>;\n}",
      "docstring": "Options for creating a sparkline group."
    },
    "CreateSparklineOptions": {
      "name": "CreateSparklineOptions",
      "definition": "{\n  /** Whether data is in rows (true) or columns (false) */\n  dataInRows?: boolean;\n  /** Visual settings override */\n  visual?: Partial<SparklineVisualSettings>;\n  /** Axis settings override */\n  axis?: Partial<SparklineAxisSettings>;\n}",
      "docstring": "Options for creating a new sparkline."
    },
    "CreateWordArtInput": {
      "name": "CreateWordArtInput",
      "definition": "{\n  /** Text content. */\n  text: string;\n  /** Text warp preset. Missing values are filled by kernel defaults. */\n  warpPreset?: TextWarpPreset;\n  /** Warp adjustment values. */\n  warpAdjustments?: AdjustmentValues;\n  /** Text fill configuration. Missing values are filled by kernel defaults. */\n  fill?: WordArtFill;\n  /** Text outline configuration. Missing values are filled by kernel defaults. */\n  outline?: WordArtOutline;\n  /** Text effects configuration. Missing values are filled by kernel defaults. */\n  effects?: TextEffects;\n  /** Visual text-effect configuration overrides. */\n  wordArt?: Partial<WordArtObjectConfig>;\n  /** X position in pixels. */\n  x?: number;\n  /** Y position in pixels. */\n  y?: number;\n  /** Width in pixels. */\n  width?: number;\n  /** Height in pixels. */\n  height?: number;\n  /** Display name. */\n  name?: string;\n}",
      "docstring": "Configuration for creating new text effects."
    },
    "CreateWorkbookLinkInput": {
      "name": "CreateWorkbookLinkInput",
      "definition": "{\n  linkId?: LinkId;\n  expectedWorkbookId?: WorkbookId | null;\n  target: PersistedLinkTarget;\n  displayName: string;\n  sourceKind: WorkbookLinkSourceKind;\n  importedExcelIdentity?: ImportedExternalLinkIdentity;\n  materializedCacheMetadata?: AuthorizedMaterializedCacheMetadata;\n}",
      "docstring": ""
    },
    "CrossFilterMode": {
      "name": "CrossFilterMode",
      "definition": "'none' | 'showItemsWithDataAtTop' | 'showItemsWithNoData'",
      "docstring": "ST_SlicerCacheCrossFilter mode. Canonical source: compute-types.gen.ts"
    },
    "CultureInfo": {
      "name": "CultureInfo",
      "definition": "{\n  /** IETF language tag (e.g., 'en-US', 'de-DE', 'ja-JP').\nThis is the key used to look up the culture in the registry. */\n  name: string;\n  /** Human-readable display name (e.g., 'English (United States)').\nUsed in UI dropdowns. */\n  displayName: string;\n  /** Native name in the culture's own language (e.g., 'Deutsch (Deutschland)'). */\n  nativeName: string;\n  /** ISO 639-1 two-letter language code (e.g., 'en', 'de', 'ja'). */\n  twoLetterLanguageCode: string;\n  /** Decimal separator character (e.g., '.' for en-US, ',' for de-DE). */\n  decimalSeparator: string;\n  /** Thousands/grouping separator (e.g., ',' for en-US, '.' for de-DE, ' ' for fr-FR). */\n  thousandsSeparator: string;\n  /** Negative sign (usually '-'). */\n  negativeSign: string;\n  /** Positive sign (usually '+' or ''). */\n  positiveSign: string;\n  /** Pattern for negative numbers. */\n  negativeNumberPattern: NegativeNumberPattern;\n  /** Number of digits per group (usually 3).\nSome cultures use variable grouping (e.g., Indian: 3, then 2, 2, 2...).\nFor simplicity, we use a single value in v1. */\n  numberGroupSize: number;\n  /** Percent symbol (usually '%'). */\n  percentSymbol: string;\n  /** Per mille symbol (‰). */\n  perMilleSymbol: string;\n  /** Pattern for positive percentages. */\n  percentPositivePattern: PercentPositivePattern;\n  /** Pattern for negative percentages. */\n  percentNegativePattern: PercentNegativePattern;\n  /** Default currency symbol for this culture (e.g., '$', '€', '¥'). */\n  currencySymbol: string;\n  /** ISO 4217 currency code (e.g., 'USD', 'EUR', 'JPY'). */\n  currencyCode: string;\n  /** Pattern for positive currency values. */\n  currencyPositivePattern: CurrencyPositivePattern;\n  /** Pattern for negative currency values. */\n  currencyNegativePattern: CurrencyNegativePattern;\n  /** Number of decimal digits for currency (e.g., 2 for USD, 0 for JPY). */\n  currencyDecimalDigits: number;\n  /** Date separator (e.g., '/' for en-US, '.' for de-DE). */\n  dateSeparator: string;\n  /** Time separator (e.g., ':'). */\n  timeSeparator: string;\n  /** Short date pattern (e.g., 'M/d/yyyy' for en-US, 'dd.MM.yyyy' for de-DE).\nUsed for format code interpretation. */\n  shortDatePattern: string;\n  /** Long date pattern (e.g., 'dddd, MMMM d, yyyy'). */\n  longDatePattern: string;\n  /** Short time pattern (e.g., 'h:mm tt' for en-US, 'HH:mm' for de-DE). */\n  shortTimePattern: string;\n  /** Long time pattern (e.g., 'h:mm:ss tt' for en-US, 'HH:mm:ss' for de-DE). */\n  longTimePattern: string;\n  /** AM designator (e.g., 'AM' for en-US, '' for 24-hour cultures). */\n  amDesignator: string;\n  /** PM designator (e.g., 'PM' for en-US, '' for 24-hour cultures). */\n  pmDesignator: string;\n  /** First day of the week (0 = Sunday, 1 = Monday). */\n  firstDayOfWeek: DayOfWeek;\n  /** Full month names (12 entries, January = index 0). */\n  monthNames: readonly [\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n  ];\n  /** Abbreviated month names (12 entries, Jan = index 0). */\n  abbreviatedMonthNames: readonly [\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n    string,\n  ];\n  /** Full day names (7 entries, Sunday = index 0). */\n  dayNames: readonly [string, string, string, string, string, string, string];\n  /** Abbreviated day names (7 entries, Sun = index 0). */\n  abbreviatedDayNames: readonly [string, string, string, string, string, string, string];\n  /** Shortest day names (7 entries, typically 1-2 letters).\nUsed in narrow calendar UIs. */\n  shortestDayNames: readonly [string, string, string, string, string, string, string];\n  /** String for TRUE value (e.g., 'TRUE', 'WAHR', 'VRAI'). */\n  trueString: string;\n  /** String for FALSE value (e.g., 'FALSE', 'FALSCH', 'FAUX'). */\n  falseString: string;\n  /** List separator (e.g., ',' for en-US, ';' for de-DE).\nThis affects function argument separators in formulas. */\n  listSeparator: string;\n}",
      "docstring": "Complete culture information for formatting numbers, dates, and currencies.\n\nAll properties are required - no partial cultures allowed.\nUse the culture registry to get complete CultureInfo objects.\n\n@example\n```typescript\nconst culture = getCulture('de-DE');\n// culture.decimalSeparator === ','\n// culture.thousandsSeparator === '.'\n// culture.monthNames[0] === 'Januar'\n```"
    },
    "CurrencyNegativePattern": {
      "name": "CurrencyNegativePattern",
      "definition": "| 0\n  | 1\n  | 2\n  | 3\n  | 4\n  | 5\n  | 6\n  | 7\n  | 8\n  | 9\n  | 10\n  | 11\n  | 12\n  | 13\n  | 14\n  | 15",
      "docstring": "Currency negative pattern (matches .NET NumberFormatInfo).\nDetermines how negative currency values are displayed.\n\n0  = ($n)     - en-US accounting\n1  = -$n      - en-US standard\n2  = $-n\n3  = $n-\n4  = (n$)\n5  = -n$\n6  = n-$\n7  = n$-\n8  = -n $     - de-DE\n9  = -$ n\n10 = n $-\n11 = $ n-\n12 = $ -n\n13 = n- $\n14 = ($ n)\n15 = (n $)"
    },
    "CurrencyPositivePattern": {
      "name": "CurrencyPositivePattern",
      "definition": "0 | 1 | 2 | 3",
      "docstring": "Currency positive pattern (matches .NET NumberFormatInfo).\nDetermines where the currency symbol appears relative to the number.\n\n0 = $n    (symbol before, no space) - en-US\n1 = n$    (symbol after, no space)\n2 = $ n   (symbol before, space)\n3 = n $   (symbol after, space) - de-DE, fr-FR"
    },
    "CustomList": {
      "name": "CustomList",
      "definition": "{\n  /** Unique ID for the list */\n  id: string;\n  /** Display name for the list */\n  name: string;\n  /** The list values in order */\n  values: string[];\n  /** Whether this is a built-in list (cannot be deleted) */\n  isBuiltIn?: boolean;\n}",
      "docstring": "Custom Lists Types\n\nType definitions for user-defined fill lists.\nRuntime constant (BUILT_IN_LISTS) has been moved to\n@mog-sdk/kernel/domain/fill/custom-lists.\n\n@see plans/active/excel-parity/10-FILL-AUTOFILL-PLAN.md"
    },
    "DataLabelConfig": {
      "name": "DataLabelConfig",
      "definition": "{\n  show: boolean;\n  position?: | 'center'\n    | 'insideEnd'\n    | 'insideBase'\n    | 'outsideEnd'\n    | 'left'\n    | 'right'\n    | 'top'\n    | 'bottom'\n    | 'bestFit'\n    | 'callout'\n    | 'outside'\n    | 'inside';\n  format?: string;\n  showValue?: boolean;\n  showCategoryName?: boolean;\n  /** @deprecated Use showCategoryName instead. Alias kept for legacy consumers. */\n  showCategory?: boolean;\n  showSeriesName?: boolean;\n  showPercentage?: boolean;\n  /** @deprecated Use showPercentage instead. Alias kept for legacy consumers. */\n  showPercent?: boolean;\n  showBubbleSize?: boolean;\n  showLegendKey?: boolean;\n  separator?: string;\n  showLeaderLines?: boolean;\n  text?: string;\n  visualFormat?: ChartFormat;\n  numberFormat?: string;\n  /** Text orientation angle in degrees (-90 to 90) */\n  textOrientation?: number;\n  richText?: ChartFormatString[];\n  /** Whether the label auto-generates text from data. */\n  autoText?: boolean;\n  /** Horizontal text alignment. */\n  horizontalAlignment?: 'left' | 'center' | 'right' | 'justify' | 'distributed';\n  /** Vertical text alignment. */\n  verticalAlignment?: 'top' | 'middle' | 'bottom' | 'justify' | 'distributed';\n  /** Whether the number format is linked to the source data cell format. */\n  linkNumberFormat?: boolean;\n  /** Callout shape type (e.g., 'rectangle', 'roundRectangle', 'wedgeRoundRectCallout'). */\n  geometricShapeType?: string;\n  /** Formula-based label text. */\n  formula?: string;\n  /** X position in points (read-only, populated from render engine). */\n  left?: number;\n  /** Y position in points (read-only, populated from render engine). */\n  top?: number;\n  /** Height in points (read-only, populated from render engine). */\n  height?: number;\n  /** Width in points (read-only, populated from render engine). */\n  width?: number;\n  /** Leader line formatting configuration. */\n  leaderLinesFormat?: ChartLeaderLinesFormat;\n}",
      "docstring": "Data label configuration (matches DataLabelData wire type)"
    },
    "DataSourceType": {
      "name": "DataSourceType",
      "definition": "'range' | 'table' | 'external'",
      "docstring": "The type of data source backing a pivot table.\nMirrors the workbook data source type."
    },
    "DataTableConfig": {
      "name": "DataTableConfig",
      "definition": "{\n  showHorzBorder?: boolean;\n  showVertBorder?: boolean;\n  showOutline?: boolean;\n  showKeys?: boolean;\n  format?: ChartFormat;\n  /** Whether to show legend keys in the data table */\n  showLegendKey?: boolean;\n  /** Whether the data table is visible */\n  visible?: boolean;\n}",
      "docstring": "Data table configuration (matches ChartDataTableData wire type)."
    },
    "DataTableResult": {
      "name": "DataTableResult",
      "definition": "{\n  /** 2D array of computed results.\nresults[rowIndex][colIndex] is the value when:\n- rowInputCell = rowValues[rowIndex]\n- colInputCell = colValues[colIndex] */\n  results: CellValue[][];\n  /** Total number of cells computed. */\n  cellCount: number;\n  /** Time taken in milliseconds. */\n  elapsedMs: number;\n  /** Whether the operation was cancelled. */\n  cancelled?: boolean;\n}",
      "docstring": "Result of Data Table operation."
    },
    "DatePeriod": {
      "name": "DatePeriod",
      "definition": "| 'yesterday'\n  | 'today'\n  | 'tomorrow'\n  | 'last7Days'\n  | 'lastWeek'\n  | 'thisWeek'\n  | 'nextWeek'\n  | 'lastMonth'\n  | 'thisMonth'\n  | 'nextMonth'\n  | 'lastQuarter'\n  | 'thisQuarter'\n  | 'nextQuarter'\n  | 'lastYear'\n  | 'thisYear'\n  | 'nextYear'",
      "docstring": "Date periods for timePeriod rules."
    },
    "DateUnit": {
      "name": "DateUnit",
      "definition": "'day' | 'weekday' | 'month' | 'year'",
      "docstring": "Unit for date-based series fills."
    },
    "DayOfWeek": {
      "name": "DayOfWeek",
      "definition": "0 | 1 | 2 | 3 | 4 | 5 | 6",
      "docstring": "Culture/Locale types for internationalized number, date, and currency formatting.\n\nStream G: Culture & Localization\n\nDesign principles:\n1. CultureInfo is immutable and complete - no partial definitions\n2. Culture is workbook-level state (persisted in WorkbookSettings.culture)\n3. Format codes are culture-agnostic; culture applies at render time\n4. Uses IETF language tags (en-US, de-DE) not Windows locale IDs"
    },
    "DeleteCellsReceipt": {
      "name": "DeleteCellsReceipt",
      "definition": "{\n  kind: 'deleteCells';\n  sheetId: string;\n  range: { startRow: number; startCol: number; endRow: number; endCol: number };\n  direction: 'left' | 'up';\n}",
      "docstring": "Receipt for a deleteCellsWithShift mutation."
    },
    "DeleteColumnsReceipt": {
      "name": "DeleteColumnsReceipt",
      "definition": "{\n  kind: 'deleteColumns';\n  sheetId: string;\n  deletedAt: number;\n  count: number;\n}",
      "docstring": "Receipt for a deleteColumns mutation."
    },
    "DeleteRowsReceipt": {
      "name": "DeleteRowsReceipt",
      "definition": "{\n  kind: 'deleteRows';\n  sheetId: string;\n  deletedAt: number;\n  count: number;\n}",
      "docstring": "Receipt for a deleteRows mutation."
    },
    "DelimiterNode": {
      "name": "DelimiterNode",
      "definition": "{\n  type: 'd';\n  /** Beginning character (default '(') */\n  begChr?: string;\n  /** Separator character (default '|') */\n  sepChr?: string;\n  /** Ending character (default ')') */\n  endChr?: string;\n  /** Grow with content */\n  grow?: boolean;\n  /** Shape: 'centered' or 'match' */\n  shp?: 'centered' | 'match';\n  /** Content elements (separated by sepChr) */\n  e: MathNode[][];\n}",
      "docstring": "Delimiter - <m:d>\nParentheses, brackets, braces, etc."
    },
    "Direction": {
      "name": "Direction",
      "definition": "'up' | 'down' | 'left' | 'right'",
      "docstring": "Cardinal directions for keyboard navigation and commit actions."
    },
    "DocumentId": {
      "name": "DocumentId",
      "definition": "string",
      "docstring": ""
    },
    "DocumentProperties": {
      "name": "DocumentProperties",
      "definition": "{\n  title?: string;\n  creator?: string;\n  description?: string;\n  subject?: string;\n  created?: string;\n  modified?: string;\n  lastModifiedBy?: string;\n  category?: string;\n  keywords?: string;\n  company?: string;\n  manager?: string;\n}",
      "docstring": ""
    },
    "DrawingHandle": {
      "name": "DrawingHandle",
      "definition": "{\n  addStroke(stroke: InkStroke): Promise<void>;;\n  eraseStrokes(strokeIds: StrokeId[]): Promise<void>;;\n  clearStrokes(): Promise<void>;;\n  moveStrokes(strokeIds: StrokeId[], dx: number, dy: number): Promise<void>;;\n  transformStrokes(strokeIds: StrokeId[], transform: StrokeTransformParams): Promise<void>;;\n  findStrokesAtPoint(x: number, y: number, tolerance?: number): Promise<StrokeId[]>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<DrawingHandle>;;\n  getData(): Promise<DrawingObject>;;\n}",
      "docstring": ""
    },
    "DrawingObject": {
      "name": "DrawingObject",
      "definition": "{\n  type: 'drawing';\n  /** Strokes in this drawing, keyed by StrokeId.\n\nUsing Map<StrokeId, InkStroke> instead of array for CRDT safety:\n- No ordering conflicts when concurrent users add strokes\n- O(1) lookup/delete by ID\n- Stable references across edits\n\nRender order is determined by stroke createdAt timestamps. */\n  strokes: Map<StrokeId, InkStroke>;\n  /** Current tool settings for this drawing.\nPersisted per-drawing to remember user preferences. */\n  toolState: InkToolState;\n  /** Recognition results for strokes in this drawing.\nMaps from a \"recognition ID\" to the result.\nA recognition can be:\n- A shape recognized from one or more strokes\n- Text recognized from handwriting strokes */\n  recognitions: Map<string, RecognitionResult>;\n  /** Background color of the drawing canvas.\n- undefined = transparent (shows sheet grid)\n- CSS color string = solid background */\n  backgroundColor?: string;\n}",
      "docstring": "Drawing object floating on the spreadsheet.\n\nExtends FloatingObjectBase to integrate with the existing floating\nobject system (selection, drag, resize, z-order, etc.).\n\nCRDT-SAFE DESIGN:\n- Strokes stored as Map<StrokeId, InkStroke> to avoid array ordering conflicts\n- Uses CellId for anchors (survives row/col insert/delete)\n- Y.Map under the hood for concurrent editing support"
    },
    "DynamicFilterRule": {
      "name": "DynamicFilterRule",
      "definition": "| 'aboveAverage'\n  | 'belowAverage'\n  | 'today'\n  | 'yesterday'\n  | 'tomorrow'\n  | 'thisWeek'\n  | 'lastWeek'\n  | 'nextWeek'\n  | 'thisMonth'\n  | 'lastMonth'\n  | 'nextMonth'\n  | 'thisQuarter'\n  | 'lastQuarter'\n  | 'nextQuarter'\n  | 'thisYear'\n  | 'lastYear'\n  | 'nextYear'",
      "docstring": "Dynamic filter rule — pre-defined filter rules that resolve against\nlive data (e.g. above average, date-relative).\n\nMirrors the Rust DynamicFilterRule enum in compute-core."
    },
    "ElseClause": {
      "name": "ElseClause",
      "definition": "{\n  /** Optional name for this else-clause. */\n  name: string;\n  /** Child layout elements included when no if-clause matches. */\n  children: readonly LayoutNodeChild[];\n}",
      "docstring": "OOXML else-clause within a choose element.\n\nContains layout children that are used when no if-clause condition\nevaluates to true. Acts as the default/fallback branch.\n\n@see ECMA-376 Section 21.4.2.11 else (Else)"
    },
    "EmptyCellDisplay": {
      "name": "EmptyCellDisplay",
      "definition": "\"gaps\" | \"zero\" | \"connect\"",
      "docstring": ""
    },
    "EnterKeyDirection": {
      "name": "EnterKeyDirection",
      "definition": "'down' | 'right' | 'up' | 'left' | 'none'",
      "docstring": "Direction for enter key movement after committing an edit.\nIssue 8: Settings Panel"
    },
    "EqArrayNode": {
      "name": "EqArrayNode",
      "definition": "{\n  type: 'eqArr';\n  /** Base justification */\n  baseJc?: 'top' | 'center' | 'bottom';\n  /** Maximum distribution */\n  maxDist?: boolean;\n  /** Object distribution */\n  objDist?: boolean;\n  /** Row spacing rule */\n  rSpRule?: 0 | 1 | 2 | 3 | 4;\n  /** Row spacing value */\n  rSp?: number;\n  /** Array rows */\n  e: MathNode[][];\n}",
      "docstring": "Equation Array - <m:eqArr>\nVertically aligned equations"
    },
    "Equation": {
      "name": "Equation",
      "definition": "{\n  /** Unique equation identifier */\n  id: EquationId;\n  /** OMML XML string - the canonical storage format.\nThis is what gets written to XLSX files.\nExample: <m:oMath><m:f><m:num>...</m:num><m:den>...</m:den></m:f></m:oMath> */\n  omml: string;\n  /** LaTeX source (optional, for display/editing).\nNot stored in XLSX - regenerated from OMML on import if needed. */\n  latex?: string;\n  /** Parsed AST (computed, not persisted).\nUsed for rendering. Regenerated from OMML when needed. */\n  ast?: MathNode;\n  /** Cached rendered image as data URL.\nInvalidated when equation changes. */\n  _cachedImageData?: string;\n  /** Style options */\n  style: EquationStyle;\n}",
      "docstring": "Main equation data model"
    },
    "EquationConfig": {
      "name": "EquationConfig",
      "definition": "{\n  /** LaTeX source for the equation. */\n  latex: string;\n  /** Anchor cell as `{row, col}`. When set, `x`/`y` are offsets from this\ncell instead of from cell `(0, 0)`. */\n  anchorCell?: { row: number; col: number };\n  /** X position in pixels. */\n  x?: number;\n  /** Y position in pixels. */\n  y?: number;\n  /** Width in pixels. */\n  width?: number;\n  /** Height in pixels. */\n  height?: number;\n  /** Equation style options. */\n  style?: EquationStyleConfig;\n}",
      "docstring": "Configuration for creating a new equation."
    },
    "EquationDefaults": {
      "name": "EquationDefaults",
      "definition": "{\n  /** Fully populated default equation style. */\n  style: EquationStyle;\n  /** Default equation object width in pixels. */\n  width: number;\n  /** Default equation object height in pixels. */\n  height: number;\n}",
      "docstring": "Fully normalized equation defaults used by Worksheet equation creation."
    },
    "EquationHandle": {
      "name": "EquationHandle",
      "definition": "{\n  update(props: EquationUpdates): Promise<void>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<EquationHandle>;;\n  getData(): Promise<EquationObject>;;\n}",
      "docstring": ""
    },
    "EquationId": {
      "name": "EquationId",
      "definition": "string & { readonly __brand: 'EquationId' }",
      "docstring": "Unique identifier for an equation"
    },
    "EquationJustification": {
      "name": "EquationJustification",
      "definition": "'left' | 'center' | 'right' | 'centerGroup'",
      "docstring": "Equation justification within its bounding box"
    },
    "EquationObject": {
      "name": "EquationObject",
      "definition": "{\n  type: 'equation';\n  /** The equation data */\n  equation: Equation;\n}",
      "docstring": "Equation floating object.\nContains a mathematical equation rendered as a floating object."
    },
    "EquationStyle": {
      "name": "EquationStyle",
      "definition": "{\n  /** Math font family */\n  fontFamily: MathFont;\n  /** Base font size in points */\n  fontSize: number;\n  /** Text color (CSS color string) */\n  color: string;\n  /** Background color (CSS color string, 'transparent' for none) */\n  backgroundColor: string;\n  /** Justification */\n  justification: EquationJustification;\n  /** Display mode (block) vs inline mode */\n  displayMode: boolean;\n  /** Use small fractions (numerator/denominator same size as surrounding) */\n  smallFractions: boolean;\n}",
      "docstring": "Equation rendering style options"
    },
    "EquationStyleConfig": {
      "name": "EquationStyleConfig",
      "definition": "Partial<EquationStyle>",
      "docstring": "Styling overrides for an equation. Missing fields are filled by kernel defaults."
    },
    "EquationUpdates": {
      "name": "EquationUpdates",
      "definition": "{\n  /** Updated LaTeX source. */\n  latex?: string;\n  /** Updated OMML XML. */\n  omml?: string;\n  /** Updated style options. */\n  style?: Partial<EquationStyleConfig>;\n}",
      "docstring": "Updates for an existing equation."
    },
    "ErrorBarConfig": {
      "name": "ErrorBarConfig",
      "definition": "{\n  visible?: boolean;\n  direction?: string;\n  barType?: string;\n  valueType?: string;\n  value?: number;\n  noEndCap?: boolean;\n  lineFormat?: ChartLineFormat;\n}",
      "docstring": "Error bar configuration for series (matches ErrorBarData wire type)"
    },
    "ExecuteOptions": {
      "name": "ExecuteOptions",
      "definition": "{\n  /** Maximum execution time in milliseconds */\n  timeout?: number;\n  /** Whether to run in a sandboxed environment */\n  sandbox?: boolean;\n}",
      "docstring": "Options for code execution via `workbook.executeCode()`."
    },
    "FieldDef": {
      "name": "FieldDef",
      "definition": "{\n  /** The Yjs type or primitive indicator.\n- 'Y.Map': Creates new Y.Map()\n- 'Y.Array': Creates new Y.Array()\n- 'Y.Text': Creates new Y.Text()\n- 'primitive': Uses the default value directly */\n  type: 'Y.Map' | 'Y.Array' | 'Y.Text' | 'primitive';\n  /** Documentation of the value type for Y.Map and Y.Array.\nExample: 'SerializedCellData' for cells map, 'number' for heights map.\nThis is for documentation only - TypeScript cannot enforce Yjs internals. */\n  valueType?: string;\n  /** Short name for CRDT storage efficiency (optional).\nUsed by Cell Data schema where 'raw' -> 'r', 'formula' -> 'f', etc.\nIf not specified, the long name (schema key) is used as-is.\n\nThis is for documentation/mapping purposes. The actual Yjs storage\nuses the short name, while the API/runtime uses the long name (schema key). */\n  shortName?: string;\n  /** Whether this field is required during structure creation.\n- true: Created by createFromSchema()\n- false: Only created on demand or via lazyInit */\n  required: boolean;\n  /** Copy strategy for this field.\n- 'deep': Deep copy (JSON.parse/stringify for plain objects, recursive for Yjs)\n- 'shallow': Shallow reference copy (same object)\n- 'skip': Don't copy this field (omit from result) */\n  copy: 'deep' | 'shallow' | 'skip';\n  /** Whether to auto-create this field if missing.\nUsed for migration: old documents may lack new fields.\nensureLazyFields() creates fields where lazyInit=true and field is missing. */\n  lazyInit: boolean;\n  /** Default value for primitive fields.\nOnly used when type='primitive'. */\n  default?: unknown;\n}",
      "docstring": "Schema-Driven Initialization Types\n\nThese types define how Yjs structures are specified declaratively.\nAll creation, copying, and lazy-init is derived from schemas.\n\nARCHITECTURE: Single Source of Truth\n- Field definitions are declared ONCE in a schema\n- createFromSchema() derives structure initialization\n- copyFromSchema() derives copy behavior\n- ensureLazyFields() derives migration behavior\n\nThis eliminates:\n- Manual field enumeration in multiple places\n- Divergent copy vs init logic\n- Missing fields in new code paths\n\n@see plans/active/refactor/SCHEMA-DRIVEN-INITIALIZATION.md"
    },
    "FillDirection": {
      "name": "FillDirection",
      "definition": "'down' | 'right' | 'up' | 'left'",
      "docstring": "Direction of a fill operation relative to the source range."
    },
    "FillPatternType": {
      "name": "FillPatternType",
      "definition": "| 'copy'\n  | 'linear'\n  | 'growth'\n  | 'date'\n  | 'time'\n  | 'weekday'\n  | 'weekdayShort'\n  | 'month'\n  | 'monthShort'\n  | 'quarter'\n  | 'ordinal'\n  | 'textWithNumber'\n  | 'customList'",
      "docstring": "Pattern type detected by the fill engine."
    },
    "FillSeriesOptions": {
      "name": "FillSeriesOptions",
      "definition": "{\n  direction: FillDirection;\n  seriesType: 'linear' | 'growth' | 'date';\n  stepValue: number;\n  stopValue?: number;\n  dateUnit?: DateUnit;\n  trend?: boolean;\n}",
      "docstring": "Options for the Fill Series dialog (Edit > Fill > Series)."
    },
    "FillType": {
      "name": "FillType",
      "definition": "'solid' | 'gradient' | 'pattern' | 'pictureAndTexture' | 'none'",
      "docstring": "Fill type for shapes, text boxes, and connectors.\nMatches the Rust `FillType` enum in `domain-types`."
    },
    "FilterByColorOptions": {
      "name": "FilterByColorOptions",
      "definition": "{\n  /** Whether to filter by background fill color or font color. */\n  colorType: 'fill' | 'font';\n  /** Hex color to match (e.g. '#FFFF00'). Case-insensitive. */\n  color: string;\n  /** Optional filter ID; defaults to the first auto-filter on the sheet. */\n  filterId?: string;\n}",
      "docstring": "Options for {@link WorksheetFilters.byColor}.\n\nExcel/ECMA-376 vocabulary: `'fill'` matches the cell background fill color;\n`'font'` matches the cell font color. Both compare the resolved per-cell\neffective format (direct cell formatting; CF-derived colors are not yet\nsupported — see plans/active/ux/filter/round-1/)."
    },
    "FilterCondition": {
      "name": "FilterCondition",
      "definition": "{\n  /** The comparison operator */\n  operator: FilterOperator;\n  /** Primary comparison value (not used for isBlank/isNotBlank) */\n  value?: CellValue;\n  /** Secondary value for 'between' operator (inclusive range) */\n  value2?: CellValue;\n}",
      "docstring": "A single filter condition with operator and value(s).\n\nUsed in condition filters where users specify rules like\n\"greater than 100\" or \"contains 'error'\"."
    },
    "FilterDetailInfo": {
      "name": "FilterDetailInfo",
      "definition": "{\n  /** Filter ID */\n  id: string;\n  /** Filter kind. */\n  filterKind: FilterKind;\n  /** Resolved numeric range of the filter */\n  range: { startRow: number; startCol: number; endRow: number; endCol: number };\n  /** Per-column filter criteria, keyed by header cell ID */\n  columnFilters: Record<string, ColumnFilterCriteria>;\n  /** Table ID if this filter is associated with a table. */\n  tableId?: string;\n  /** Advanced Filter metadata, present for advanced filters. */\n  advancedFilter?: AdvancedFilterDetailInfo;\n}",
      "docstring": "Detailed filter information including resolved numeric range and column filters."
    },
    "FilterInfo": {
      "name": "FilterInfo",
      "definition": "{\n  /** Filter ID */\n  id: string;\n  /** Filter kind. */\n  filterKind: FilterKind;\n  /** The filtered range */\n  range?: string;\n  /** Per-column filter criteria */\n  columns?: Record<string, unknown>;\n  /** Table ID if this filter is associated with a table. */\n  tableId?: string;\n  /** Per-column filter criteria, keyed by column identifier. */\n  columnFilters?: Record<string, unknown>;\n}",
      "docstring": ""
    },
    "FilterKind": {
      "name": "FilterKind",
      "definition": "'autoFilter' | 'tableFilter' | 'advancedFilter'",
      "docstring": "Information about a filter applied to a sheet."
    },
    "FilterOperator": {
      "name": "FilterOperator",
      "definition": "| 'equals'\n  | 'not_equals'\n  | 'contains'\n  | 'starts_with'\n  | 'ends_with'\n  | 'greater_than'\n  | 'greater_than_or_equals'\n  | 'less_than'\n  | 'less_than_or_equals'\n  | 'in'\n  | 'not_in'\n  | 'is_null'\n  | 'is_not_null'",
      "docstring": "Filter operators for record triggers."
    },
    "FilterSortState": {
      "name": "FilterSortState",
      "definition": "{\n  /** Column index or header cell ID to sort by */\n  column: string | number;\n  /** Sort direction */\n  direction: 'asc' | 'desc';\n  /** Sort criteria (optional, for advanced sorting) */\n  criteria?: any;\n}",
      "docstring": "Sort state for a filter."
    },
    "FilterState": {
      "name": "FilterState",
      "definition": "{\n  /** The range the auto-filter is applied to (A1 notation) */\n  range: string;\n  /** Per-column filter criteria, keyed by column identifier (string) */\n  columnFilters: Record<string, ColumnFilterCriteria>;\n}",
      "docstring": "API filter state — derived from Rust FilterState with A1-notation range."
    },
    "FindInRangeOptions": {
      "name": "FindInRangeOptions",
      "definition": "Omit<SearchOptions, 'range'>",
      "docstring": "Options for findInRange — range is provided as a separate method parameter."
    },
    "FloatingObject": {
      "name": "FloatingObject",
      "definition": "| PictureObject\n  | TextBoxObject\n  | ShapeObject\n  | ConnectorObject\n  | ChartObject\n  | DrawingObject\n  | EquationObject\n  | SmartArtObject\n  | OleObjectObject",
      "docstring": "Union of all floating object types.\nUse type narrowing on the 'type' discriminator to access specific properties."
    },
    "FloatingObjectHandle": {
      "name": "FloatingObjectHandle",
      "definition": "{\n  /** Stable object ID. */\n  id: string;\n  /** Discriminator for type narrowing. */\n  type: FloatingObjectKind;\n  /** Move by delta. dx/dy are pixel offsets (relative).\nRust resolves to new cell anchor. */\n  move(dx: number, dy: number): Promise<FloatingObjectMutationReceipt>;;\n  /** Set absolute dimensions in pixels. */\n  resize(width: number, height: number): Promise<FloatingObjectMutationReceipt>;;\n  /** Set absolute rotation angle in degrees. */\n  rotate(angle: number): Promise<void>;;\n  /** Flip horizontally or vertically. */\n  flip(axis: 'horizontal' | 'vertical'): Promise<void>;;\n  bringToFront(): Promise<void>;;\n  sendToBack(): Promise<void>;;\n  bringForward(): Promise<void>;;\n  sendBackward(): Promise<void>;;\n  delete(): Promise<FloatingObjectRemoveReceipt>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<FloatingObjectHandle>;;\n  /** Sync pixel bounds from scene graph. Null if not rendered yet. */\n  getBounds(): ObjectBounds | null;;\n  /** Full object data (async — reads from store). */\n  getData(): Promise<FloatingObject>;;\n}",
      "docstring": ""
    },
    "FloatingObjectInfo": {
      "name": "FloatingObjectInfo",
      "definition": "{\n  /** Unique object ID. */\n  id: string;\n  /** Object type discriminator. */\n  type: FloatingObjectType;\n  /** Optional display name. */\n  name?: string;\n  /** X position in pixels. */\n  x: number;\n  /** Y position in pixels. */\n  y: number;\n  /** Width in pixels. */\n  width: number;\n  /** Height in pixels. */\n  height: number;\n  /** Rotation angle in degrees. */\n  rotation?: number;\n  /** Flipped horizontally. */\n  flipH?: boolean;\n  /** Flipped vertically. */\n  flipV?: boolean;\n  /** Z-order index. */\n  zIndex?: number;\n  /** Whether the object is visible. */\n  visible?: boolean;\n  /** ID of the parent group (if this object is grouped). */\n  groupId?: string;\n  /** Anchor mode (twoCell/oneCell/absolute). */\n  anchorType?: ObjectAnchorType;\n  /** Alt text for accessibility. */\n  altText?: string;\n}",
      "docstring": "Summary information about a floating object (returned by listFloatingObjects)."
    },
    "FloatingObjectKind": {
      "name": "FloatingObjectKind",
      "definition": "| 'shape'\n  | 'connector'\n  | 'picture'\n  | 'textbox'\n  | 'chart'\n  | 'camera'\n  | 'equation'\n  | 'smartart'\n  | 'drawing'\n  | 'oleObject'\n  | 'formControl'\n  | 'slicer'",
      "docstring": "Object type discriminator.\nUsed for type narrowing in union types.\n\nExtends CanvasObjectType (which is `string`) with a specific union for\nspreadsheet object types. This ensures backward compatibility: any code\nexpecting FloatingObjectKind still gets the specific union, while\nCanvasObjectType-based code accepts it as a string.\n\nStorage-layer discriminant for floating objects. Mirrors Rust FloatingObjectKind.\nSee also FloatingObjectType in api/types.ts (API-layer superset that adds 'wordart').\n\nNote: 'slicer' is defined here for the FloatingObjectKind union,\nbut the full SlicerConfig type is in contracts/src/slicers.ts\nbecause slicers have significant additional properties."
    },
    "FloatingObjectMutationReceipt": {
      "name": "FloatingObjectMutationReceipt",
      "definition": "{\n  domain: 'floatingObject';\n  action: 'create' | 'update';\n  id: string;\n  object: FloatingObject;\n  bounds: ObjectBounds;\n}",
      "docstring": "Receipt for a floating object creation or update mutation."
    },
    "FloatingObjectRemoveReceipt": {
      "name": "FloatingObjectRemoveReceipt",
      "definition": "{\n  domain: 'floatingObject';\n  action: 'remove';\n  id: string;\n}",
      "docstring": "Receipt for a floating object removal mutation."
    },
    "FloatingObjectType": {
      "name": "FloatingObjectType",
      "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'",
      "docstring": "Type discriminator for floating objects (API layer).\nSuperset of FloatingObjectKind (12 storage-layer variants) + 'wordart' (API-only ergonomic alias).\ntext-effect objects are stored as Textbox with word_art config; this type lets consumers reference them directly."
    },
    "FormControl": {
      "name": "FormControl",
      "definition": "CheckboxControl | ButtonControl | ComboBoxControl",
      "docstring": "Union of all implemented form control types.\n\nCurrently: Checkbox, Button, ComboBox\nFuture: RadioButton, Slider, Spinner"
    },
    "FormControlAnchorUpdate": {
      "name": "FormControlAnchorUpdate",
      "definition": "{\n  row: number;\n  col: number;\n  xOffset?: number;\n  yOffset?: number;\n}",
      "docstring": ""
    },
    "FormControlUpdate": {
      "name": "FormControlUpdate",
      "definition": "Partial<Omit<FormControl, 'id' | 'type' | 'sheetId'>>",
      "docstring": ""
    },
    "FormatChangeResult": {
      "name": "FormatChangeResult",
      "definition": "{\n  /** Number of cells whose formatting was changed */\n  cellCount: number;\n}",
      "docstring": "Result of a format set/setRange operation."
    },
    "FormatEntry": {
      "name": "FormatEntry",
      "definition": "{\n  /** Cell value descriptor */\n  value: { type: string; value?: unknown };\n  /** Number format code (e.g., \"#,##0.00\") */\n  formatCode: string;\n}",
      "docstring": "Entry for batch format-values call."
    },
    "FormulaA1": {
      "name": "FormulaA1",
      "definition": "string & { readonly [formulaA1Brand]: true }",
      "docstring": "A formula string WITH the `=` prefix: `\"=SUM(A1:B10)\"`, `\"=A1+A2\"`.\n\nThis is the display/input format used at the Rust-TS boundary and in the UI."
    },
    "FormulaSyntaxValidationError": {
      "name": "FormulaSyntaxValidationError",
      "definition": "{\n  errorMessage: string;\n  errorPosition?: number;\n}",
      "docstring": "Result returned when formula syntax validation rejects an input.\n\n`errorPosition` is a zero-based character offset into the authored formula\ntext, when the parser can locate one."
    },
    "FractionNode": {
      "name": "FractionNode",
      "definition": "{\n  type: 'f';\n  /** Fraction type: bar (stacked), skw (skewed), lin (linear), noBar (no bar) */\n  fractionType: 'bar' | 'skw' | 'lin' | 'noBar';\n  /** Numerator */\n  num: MathNode[];\n  /** Denominator */\n  den: MathNode[];\n}",
      "docstring": "Fraction - <m:f>\nNumerator over denominator\n\nIMPORTANT: Uses `fractionType` field (NOT `type_`)\nMaps to OMML <m:fPr><m:type m:val=\"...\"/></m:fPr>"
    },
    "FunctionArgument": {
      "name": "FunctionArgument",
      "definition": "{\n  name: string;\n  description: string;\n  type: FunctionArgumentType;\n  optional: boolean;\n  repeating?: boolean;\n}",
      "docstring": ""
    },
    "FunctionArgumentType": {
      "name": "FunctionArgumentType",
      "definition": "| 'number'\n  | 'text'\n  | 'logical'\n  | 'reference'\n  | 'array'\n  | 'any'\n  | 'date'",
      "docstring": "Function Registry -- Lightweight metadata registry for Excel functions.\n\nTypes remain here in contracts.\n\nMigrated from @mog/calculator."
    },
    "FunctionInfo": {
      "name": "FunctionInfo",
      "definition": "{\n  /** Function name (uppercase, e.g., \"SUM\") */\n  name: string;\n  /** Description of what the function does */\n  description: string;\n  /** Function category (e.g., \"Math & Trig\", \"Lookup & Reference\") */\n  category: string;\n  /** Syntax example (e.g., \"SUM(number1, [number2], ...)\") */\n  syntax: string;\n  /** Usage examples */\n  examples?: string[];\n  /** Function argument metadata for IntelliSense/argument hints */\n  arguments?: FunctionArgument[];\n}",
      "docstring": "Information about a spreadsheet function (e.g., SUM, VLOOKUP)."
    },
    "FunctionNode": {
      "name": "FunctionNode",
      "definition": "{\n  type: 'func';\n  /** Function name */\n  fName: MathNode[];\n  /** Argument */\n  e: MathNode[];\n}",
      "docstring": "Function - <m:func>\nNamed function like sin, cos, lim"
    },
    "GlowEffect": {
      "name": "GlowEffect",
      "definition": "{\n  /** Glow color (CSS color string) */\n  color: string;\n  /** Glow radius in pixels */\n  radius: number;\n  /** Opacity (0 = transparent, 1 = opaque) */\n  opacity: number;\n}",
      "docstring": "Glow effect configuration."
    },
    "GoalSeekResult": {
      "name": "GoalSeekResult",
      "definition": "{\n  /** Whether a solution was found */\n  found: boolean;\n  /** The value found for the changing cell (if found) */\n  value?: number;\n  /** Number of iterations performed */\n  iterations?: number;\n}",
      "docstring": "Result of a goal seek operation."
    },
    "GradientFill": {
      "name": "GradientFill",
      "definition": "{\n  /** Type of gradient.\n- 'linear': Straight line gradient at specified degree\n- 'path': Radial/rectangular gradient from center point */\n  type: 'linear' | 'path';\n  /** Angle of linear gradient in degrees (0-359).\n0 = left-to-right, 90 = bottom-to-top, etc.\nOnly used when type is 'linear'. */\n  degree?: number;\n  /** Center point for path gradients (0.0 to 1.0 for each axis).\n{ left: 0.5, top: 0.5 } = center of cell.\nOnly used when type is 'path'. */\n  center?: {\n    left: number;\n    top: number;\n  };\n  /** Gradient color stops.\nMust have at least 2 stops. Stops should be ordered by position. */\n  stops: GradientStop[];\n}",
      "docstring": "Gradient fill configuration.\n\nExcel supports two gradient types:\n- linear: Color transitions along a line at a specified angle\n- path: Color transitions radially from a center point\n\nGradients require at least 2 stops (start and end colors)."
    },
    "GradientStop": {
      "name": "GradientStop",
      "definition": "{\n  /** Position along the gradient (0.0 to 1.0).\n0.0 = start of gradient, 1.0 = end of gradient. */\n  position: number;\n  /** Color at this position.\nCan be absolute hex or theme reference. */\n  color: string;\n}",
      "docstring": "GradientStop — Core contracts layer. Maps to CT_GradientStop (dml-main.xsd:1539) with position + color for cell formatting."
    },
    "GroupCharNode": {
      "name": "GroupCharNode",
      "definition": "{\n  type: 'groupChr';\n  /** Character (default is underbrace) */\n  chr?: string;\n  /** Position: 'top' or 'bot' */\n  pos?: 'top' | 'bot';\n  /** Vertical justification */\n  vertJc?: 'top' | 'bot';\n  /** Content */\n  e: MathNode[];\n}",
      "docstring": "Group Character - <m:groupChr>\nGrouping symbol (underbrace, overbrace)"
    },
    "GroupState": {
      "name": "GroupState",
      "definition": "{\n  /** All row groups */\n  rowGroups: any[];\n  /** All column groups */\n  columnGroups: any[];\n  /** Maximum outline level for rows */\n  maxRowLevel: number;\n  /** Maximum outline level for columns */\n  maxColLevel: number;\n}",
      "docstring": "State of all row/column groups on a sheet."
    },
    "HeaderFooter": {
      "name": "HeaderFooter",
      "definition": "{\n  oddHeader: string | null;\n  oddFooter: string | null;\n  evenHeader: string | null;\n  evenFooter: string | null;\n  firstHeader: string | null;\n  firstFooter: string | null;\n  differentOddEven: boolean;\n  differentFirst: boolean;\n  scaleWithDoc: boolean;\n  alignWithMargins: boolean;\n}",
      "docstring": "Header/footer configuration (OOXML CT_HeaderFooter)."
    },
    "HeaderFooterImageInfo": {
      "name": "HeaderFooterImageInfo",
      "definition": "{\n  position: HfImagePosition;\n  /** Image source — resolved path for imported, or data-URL for API-created */\n  src: string;\n  /** Descriptive title */\n  title: string;\n  /** Width in points */\n  widthPt: number;\n  /** Height in points */\n  heightPt: number;\n}",
      "docstring": "Header/footer image metadata.\nStores image references (path or data-URL), not binary blobs."
    },
    "HeatmapConfig": {
      "name": "HeatmapConfig",
      "definition": "{\n  colorScale?: string[];\n  showLabels?: boolean;\n  minColor?: string;\n  maxColor?: string;\n}",
      "docstring": "Heatmap configuration"
    },
    "HfImagePosition": {
      "name": "HfImagePosition",
      "definition": "| 'leftHeader'\n  | 'centerHeader'\n  | 'rightHeader'\n  | 'leftFooter'\n  | 'centerFooter'\n  | 'rightFooter'",
      "docstring": "Position of a header/footer image in the page layout."
    },
    "HistogramConfig": {
      "name": "HistogramConfig",
      "definition": "{\n  binCount?: number;\n  binWidth?: number;\n  cumulative?: boolean;\n}",
      "docstring": "Histogram configuration"
    },
    "IDisposable": {
      "name": "IDisposable",
      "definition": "{\n  dispose(): void;;\n  [Symbol.dispose](): void;;\n}",
      "docstring": "Disposable — Handle-based lifecycle management.\n\nThree primitives for consumer-scoped stateful APIs:\n\n1. `IDisposable` — interface for any resource with explicit lifecycle.\n2. `DisposableBase` — abstract class with idempotent dispose + Symbol.dispose.\n3. `DisposableStore` — tracks child disposables; disposing the store disposes all children.\n\nSupports TC39 Explicit Resource Management (TS 5.2+):\n  using region = wb.viewport.createRegion(sheetId, bounds);\n  // auto-disposed at block exit\n\n@see plans/archive/kernel/round-5/02-HANDLE-BASED-API-PATTERN.md"
    },
    "IObjectBoundsReader": {
      "name": "IObjectBoundsReader",
      "definition": "{\n  /** Pixel bounds in document space. Null if object not in scene graph. */\n  getBounds(objectId: string): ObjectBounds | null;;\n  /** Union bounds of all objects in a group. */\n  getGroupBounds(groupId: string): ObjectBounds | null;;\n  /** Bounds for multiple objects. Skips objects not in scene graph. */\n  getBoundsMany(objectIds: readonly string[]): Map<string, ObjectBounds>;;\n}",
      "docstring": ""
    },
    "IdentifiedCellData": {
      "name": "IdentifiedCellData",
      "definition": "{\n  /** Stable cell identity (CRDT-safe, survives structural changes). */\n  cellId: string;\n  /** Row index (0-based). */\n  row: number;\n  /** Column index (0-based). */\n  col: number;\n  /** The computed cell value (null for empty cells). */\n  value: CellValue | null;\n  /** Formula text (e.g., \"=A1+B1\") when the cell contains a formula. */\n  formulaText?: string;\n  /** Pre-formatted display string (e.g., \"$1,234.56\" for a currency-formatted number). */\n  displayString: string;\n}",
      "docstring": "Cell data enriched with stable CellId identity.\n\nUsed by operations that need to reference cells by identity (not position),\nsuch as find-replace, clipboard, and cell relocation. The CellId is a CRDT-safe\nidentifier that survives row/column insert/delete operations.\n\nUnlike `CellData` (position-implied), `IdentifiedCellData` includes explicit\nposition and identity for flat iteration over non-empty cells in a range."
    },
    "IdentityRangeRef": {
      "name": "IdentityRangeRef",
      "definition": "{\n  type: 'range';\n  /** Start cell (top-left corner) identity */\n  startId: CellId;\n  /** End cell (bottom-right corner) identity */\n  endId: CellId;\n  /** Absolute flags for start cell display */\n  startRowAbsolute: boolean;\n  startColAbsolute: boolean;\n  /** Absolute flags for end cell display */\n  endRowAbsolute: boolean;\n  endColAbsolute: boolean;\n}",
      "docstring": "Reference to a range by corner cell identities (for formula storage).\n\nRanges are defined by their corner cells. When rows/columns are inserted\nbetween the corners, the range automatically expands because the corner\ncells' positions change."
    },
    "IfClause": {
      "name": "IfClause",
      "definition": "{\n  /** Optional name for this if-clause. */\n  name: string;\n  /** Function to evaluate against the current context.\nDetermines what property of the context is being tested.\n\n@see ST_FunctionType */\n  func: ST_FunctionType;\n  /** Argument for the function.\nPrimarily used with `func='var'` to specify which variable to look up.\n\n@see ST_FunctionArgument */\n  arg: ST_FunctionArgument;\n  /** Comparison operator for the condition.\n\n@see ST_FunctionOperator */\n  op: ST_FunctionOperator;\n  /** Value to compare the function result against.\nFor numeric functions (cnt, pos, depth, etc.), this is a number as string.\nFor variable functions (var), this is the expected variable value. */\n  val: string;\n  /** Axis type(s) for navigation context.\nUsed when the function needs to navigate the data model\n(e.g., counting children along a specific axis).\n\n@see ST_AxisType */\n  axis: string;\n  /** Point type filter(s) for navigation.\n\n@see ST_ElementType */\n  ptType: string;\n  /** Maximum count of points for axis navigation.\n0 means no limit. Defaults to 0. */\n  cnt: number;\n  /** Starting index (1-based) for axis navigation subsequence.\nDefaults to 1. */\n  st: number;\n  /** Step value for axis navigation.\nDefaults to 1. */\n  step: number;\n  /** Whether to hide the last sibling transition during navigation.\nDefaults to true. */\n  hideLastTrans: boolean;\n  /** Child layout elements included when this condition is true. */\n  children: readonly LayoutNodeChild[];\n}",
      "docstring": "OOXML if-clause within a choose element.\n\nEvaluates a condition based on the current iteration context:\n  `func(arg)` `op` `val`\n\nWhere:\n- `func` determines what value to compute (count, position, variable, etc.)\n- `arg` provides additional context for the function (used with 'var' function)\n- `op` is the comparison operator\n- `val` is the value to compare against\n\nThe if-clause also supports axis/ptType navigation for context-sensitive\nevaluation (similar to forEach).\n\n@see ECMA-376 Section 21.4.2.14 if (If)"
    },
    "ImageColorType": {
      "name": "ImageColorType",
      "definition": "'automatic' | 'grayScale' | 'blackAndWhite' | 'watermark'",
      "docstring": "Image color transform type."
    },
    "ImageExportFormat": {
      "name": "ImageExportFormat",
      "definition": "'png' | 'jpeg' | 'svg'",
      "docstring": "Image export format options"
    },
    "ImageExportOptions": {
      "name": "ImageExportOptions",
      "definition": "{\n  /** Image format (default: 'png') */\n  format?: ImageExportFormat;\n  /** Pixel ratio for higher resolution (default: 2) */\n  pixelRatio?: number;\n  /** Background color (default: '#ffffff') */\n  backgroundColor?: string;\n  /** Target width in pixels (default: 640) */\n  width?: number;\n  /** Target height in pixels (default: 480) */\n  height?: number;\n  /** JPEG quality 0-1 (default: 0.92, only used when format is 'jpeg') */\n  quality?: number;\n  /** Fitting mode (default: 'fill') */\n  fittingMode?: ImageFittingMode;\n}",
      "docstring": "Image export options"
    },
    "ImageFittingMode": {
      "name": "ImageFittingMode",
      "definition": "'fill' | 'fit' | 'fitAndCenter'",
      "docstring": "Image fitting mode for exports:\n- 'fill': scale the chart to fill the entire target canvas (may crop)\n- 'fit': scale the chart to fit within the target dimensions (preserves aspect ratio)\n- 'fitAndCenter': same as 'fit' but centers the chart within the target canvas"
    },
    "ImportedExternalLinkIdentity": {
      "name": "ImportedExternalLinkIdentity",
      "definition": "{\n  excelOrdinal: number;\n  workbookRelId: string;\n  partName: string;\n  externalBookRid?: string;\n  target?: string;\n  targetMode?: 'External' | 'Internal';\n}",
      "docstring": ""
    },
    "InkPoint": {
      "name": "InkPoint",
      "definition": "{\n  /** X coordinate in drawing object local space (pixels) */\n  x: number;\n  /** Y coordinate in drawing object local space (pixels) */\n  y: number;\n  /** Pen pressure normalized to [0, 1].\n- 0 = minimum pressure (or mouse with no pressure support)\n- 1 = maximum pressure\n- undefined = no pressure data (mouse, touch without pressure)\n\nUsed for variable stroke width rendering. */\n  pressure?: number;\n  /** Tilt angle in radians [0, PI/2].\n- 0 = perpendicular to surface\n- PI/2 = parallel to surface\n- undefined = no tilt data\n\nUsed for brush shape and texture effects. */\n  tilt?: number;\n  /** Timestamp when this point was captured (ms since stroke start).\nUsed for velocity calculations and replay animations.\n- undefined = no timing data */\n  timestamp?: number;\n}",
      "docstring": "A single point in a stroke with pressure and tilt support.\n\nCoordinates are in local drawing object space (pixels relative to\ndrawing object bounds). Transform to sheet coordinates happens at render time.\n\nPressure and tilt are normalized to [0, 1] ranges for consistent\nrendering regardless of input device."
    },
    "InkStroke": {
      "name": "InkStroke",
      "definition": "{\n  /** Unique identifier for this stroke */\n  id: StrokeId;\n  /** Ordered array of points composing the stroke */\n  points: InkPoint[];\n  /** Tool used to create this stroke */\n  tool: InkTool;\n  /** Stroke color in CSS color format (hex, rgb, hsl) */\n  color: string;\n  /** Base stroke width in pixels.\nActual rendered width may vary with pressure. */\n  width: number;\n  /** Stroke opacity [0, 1].\n- 0 = fully transparent\n- 1 = fully opaque\n\nDifferent tools have different default opacities\n(e.g., highlighter defaults to ~0.4). */\n  opacity: number;\n  /** User ID who created this stroke.\nUsed for:\n- Collaboration: Show who drew what\n- Permissions: Only creator can modify their strokes\n- Undo: Per-user undo stacks */\n  createdBy: string;\n  /** Timestamp when stroke was created (Unix ms).\nUsed for ordering and undo/redo. */\n  createdAt: number;\n  /** Whether this stroke is currently selected.\nThis is a transient UI state, not persisted. */\n  selected?: boolean;\n}",
      "docstring": "A complete ink stroke with all rendering properties.\n\nStrokes are immutable once created - modifications create new strokes\nwith the same ID (for CRDT merge semantics)."
    },
    "InkTool": {
      "name": "InkTool",
      "definition": "'pen' | 'pencil' | 'highlighter' | 'marker' | 'brush' | 'eraser'",
      "docstring": "Available ink tools for drawing.\n\nEach tool has different rendering characteristics:\n- pen: Solid line, pressure-sensitive width\n- pencil: Textured line, slight transparency\n- highlighter: Wide, semi-transparent, blends with background\n- marker: Bold, opaque, consistent width\n- brush: Artistic brush effects, pressure-sensitive\n- eraser: Removes strokes (not a drawing tool, but handled similarly)"
    },
    "InkToolSettings": {
      "name": "InkToolSettings",
      "definition": "{\n  /** Default stroke width in pixels */\n  width: number;\n  /** Default opacity [0, 1] */\n  opacity: number;\n  /** Default color (CSS color string) */\n  color: string;\n  /** Whether this tool supports pressure sensitivity.\nSome tools (e.g., highlighter) ignore pressure. */\n  supportsPressure: boolean;\n}",
      "docstring": "Default settings for a specific ink tool.\n\nEach tool can have different defaults for width, opacity, etc.\nThese are used when creating new strokes."
    },
    "InkToolState": {
      "name": "InkToolState",
      "definition": "{\n  /** Currently selected tool */\n  activeTool: InkTool;\n  /** Per-tool settings (user preferences) */\n  toolSettings: Record<InkTool, InkToolSettings>;\n}",
      "docstring": "Current tool state for a drawing session.\n\nTracks the active tool and its settings."
    },
    "InnerShadowEffect": {
      "name": "InnerShadowEffect",
      "definition": "{\n  /** Blur radius in EMUs.\nControls how soft/diffuse the inner shadow appears. */\n  blurRadius: number;\n  /** Shadow distance from the text edge in EMUs.\nHow far the shadow extends inward from the edge. */\n  distance: number;\n  /** Shadow direction in degrees.\nAngle measured clockwise from the positive x-axis.\nDetermines which edge of the text the shadow appears on. */\n  direction: number;\n  /** Shadow color (CSS color string). */\n  color: string;\n  /** Shadow opacity (0-1).\n0 = fully transparent, 1 = fully opaque. */\n  opacity: number;\n}",
      "docstring": "Inner shadow effect (shadow cast inside the text).\n\nCreates a shadow effect along the inside edges of the text,\ngiving the appearance that the text is embossed or inset.\nUnlike outer shadows, inner shadows are rendered within the text bounds.\n\n@example\n// Subtle inner shadow for depth\nconst innerShadow: InnerShadowEffect = {\n  blurRadius: 25400,  // 2pt blur\n  distance: 12700,    // 1pt offset\n  direction: 225,     // Light from top-left\n  color: '#000000',\n  opacity: 0.3\n};\n\n@see ECMA-376 Part 1, Section 20.1.8.40 (innerShdw)"
    },
    "InsertCellsReceipt": {
      "name": "InsertCellsReceipt",
      "definition": "{\n  kind: 'insertCells';\n  sheetId: string;\n  range: { startRow: number; startCol: number; endRow: number; endCol: number };\n  direction: 'right' | 'down';\n}",
      "docstring": "Receipt for an insertCellsWithShift mutation."
    },
    "InsertColumnsReceipt": {
      "name": "InsertColumnsReceipt",
      "definition": "{\n  kind: 'insertColumns';\n  sheetId: string;\n  insertedAt: number;\n  count: number;\n}",
      "docstring": "Receipt for an insertColumns mutation."
    },
    "InsertRowsReceipt": {
      "name": "InsertRowsReceipt",
      "definition": "{\n  kind: 'insertRows';\n  sheetId: string;\n  insertedAt: number;\n  count: number;\n}",
      "docstring": "Receipt for an insertRows mutation."
    },
    "InsertWorksheetOptions": {
      "name": "InsertWorksheetOptions",
      "definition": "{\n  /** Which sheets to import by name. Default: all sheets. */\n  sheetNamesToInsert?: string[];\n  /** Where to insert relative to existing sheets. Default: 'end'. */\n  positionType?: 'before' | 'after' | 'beginning' | 'end';\n  /** Sheet name to position relative to (required for 'before'/'after'). */\n  relativeTo?: string;\n}",
      "docstring": "Options for insertWorksheetsFromBase64 — controls which sheets to import\nand where to place them in the workbook."
    },
    "Issue": {
      "name": "Issue",
      "definition": "{\n  id: string;\n  title: string;\n  description?: string;\n  status: 'open' | 'in_progress' | 'review' | 'done' | 'closed';\n  priority: 'low' | 'medium' | 'high' | 'critical';\n  type: 'bug' | 'feature' | 'task' | 'improvement';\n  assignee?: { id: string; name: string; email: string };\n  labels: string[];\n  createdAt: string;\n  updatedAt: string;\n  closedAt?: string;\n}",
      "docstring": ""
    },
    "LayoutForm": {
      "name": "LayoutForm",
      "definition": "'compact' | 'outline' | 'tabular'",
      "docstring": ""
    },
    "LayoutNodeChild": {
      "name": "LayoutNodeChild",
      "definition": "ForEach | Choose | LayoutNodeChildRef",
      "docstring": "Discriminated union type for children of a layout node.\n\nA layout node's children can be:\n- A nested `LayoutNode` (static child)\n- A `ForEach` element (data-driven iteration)\n- A `Choose` element (conditional branching)\n\nDiscriminated via the `kind` field:\n- `kind: 'layoutNode'` → LayoutNode (defined in ooxml-layout-types.ts)\n- `kind: 'forEach'` → ForEach\n- `kind: 'choose'` → Choose\n\nNote: The actual LayoutNode type with `kind: 'layoutNode'` is defined\nin the layout definition types (managed by Agent 1). This union is\ndesigned to be extended via intersection when all types are combined."
    },
    "LegendConfig": {
      "name": "LegendConfig",
      "definition": "{\n  show: boolean;\n  position: string;\n  visible: boolean;\n  overlay?: boolean;\n  font?: ChartFont;\n  format?: ChartFormat;\n  entries?: LegendEntryConfig[];\n  /** Custom legend X position (0-1, fraction of chart area) when position is 'custom' */\n  customX?: number;\n  /** Custom legend Y position (0-1, fraction of chart area) when position is 'custom' */\n  customY?: number;\n  shadow?: ChartShadow;\n  /** Show drop shadow on legend box. */\n  showShadow?: boolean;\n  /** Legend height in points (read-only, populated from render engine). */\n  height?: number;\n  /** Legend width in points (read-only, populated from render engine). */\n  width?: number;\n  /** Legend left position in points (read-only, populated from render engine). */\n  left?: number;\n  /** Legend top position in points (read-only, populated from render engine). */\n  top?: number;\n}",
      "docstring": "Legend configuration (matches LegendData wire type)"
    },
    "LegendEntryConfig": {
      "name": "LegendEntryConfig",
      "definition": "{\n  idx: number;\n  delete?: boolean;\n  format?: ChartFormat;\n  /** Whether this legend entry is visible */\n  visible?: boolean;\n}",
      "docstring": "Legend entry override (show/hide individual entries)."
    },
    "LimLowNode": {
      "name": "LimLowNode",
      "definition": "{\n  type: 'limLow';\n  /** Base expression */\n  e: MathNode[];\n  /** Limit expression */\n  lim: MathNode[];\n}",
      "docstring": "Lower Limit - <m:limLow>\nBase with limit below"
    },
    "LimUppNode": {
      "name": "LimUppNode",
      "definition": "{\n  type: 'limUpp';\n  /** Base expression */\n  e: MathNode[];\n  /** Limit expression */\n  lim: MathNode[];\n}",
      "docstring": "Upper Limit - <m:limUpp>\nBase with limit above"
    },
    "LineCap": {
      "name": "LineCap",
      "definition": "| 'flat' // Flat end (ends exactly at the endpoint)\n  | 'round' // Rounded end (semicircle at the endpoint)\n  | 'square'",
      "docstring": "Line cap style. Maps to ST_LineCap (ECMA-376, dml-main.xsd). Uses lowercase variants; bridge uses PascalCase."
    },
    "LineDash": {
      "name": "LineDash",
      "definition": "| 'solid'\n  | 'dot'\n  | 'dash'\n  | 'dashDot'\n  | 'lgDash'\n  | 'lgDashDot'\n  | 'lgDashDotDot'\n  | 'sysDash'\n  | 'sysDot'\n  | 'sysDashDot'\n  | 'sysDashDotDot'",
      "docstring": "Detailed line dash pattern.\nMatches OOXML line dash styles and Rust `LineDash` enum.\nUses the same 11 variants as OOXML ST_PresetLineDashVal."
    },
    "LineEndSize": {
      "name": "LineEndSize",
      "definition": "'sm' | 'med' | 'lg'",
      "docstring": "Arrowhead/line-end size for connector endpoints. Maps to ST_LineEndLength/ST_LineEndWidth (ECMA-376, dml-main.xsd). Canonical source; re-exported by drawing-canvas scene/types."
    },
    "LineEndType": {
      "name": "LineEndType",
      "definition": "'none' | 'triangle' | 'stealth' | 'diamond' | 'oval' | 'arrow'",
      "docstring": "Arrowhead/line-end type for connector endpoints. Maps to ST_LineEndType (ECMA-376, dml-main.xsd). Canonical source; re-exported by drawing-canvas scene/types."
    },
    "LineJoin": {
      "name": "LineJoin",
      "definition": "| 'bevel' // Beveled corner (flat cut at the join)\n  | 'miter' // Mitered corner (sharp pointed join)\n  | 'round'",
      "docstring": "Line join style. Maps to EG_LineJoinProperties (ECMA-376, dml-main.xsd). Uses lowercase variants; bridge uses tagged union."
    },
    "LineSubType": {
      "name": "LineSubType",
      "definition": "| 'straight'\n  | 'smooth'\n  | 'stepped'\n  | 'stacked'\n  | 'percentStacked'\n  | 'markers'\n  | 'markersStacked'\n  | 'markersPercentStacked'",
      "docstring": ""
    },
    "LinkId": {
      "name": "LinkId",
      "definition": "string",
      "docstring": ""
    },
    "LinkStatus": {
      "name": "LinkStatus",
      "definition": "| 'unresolved'\n  | 'loading'\n  | 'ready'\n  | 'stale'\n  | 'denied'\n  | 'broken'\n  | 'ambiguous'",
      "docstring": ""
    },
    "LinkStatusReason": {
      "name": "LinkStatusReason",
      "definition": "| 'wrongWorkbookId'\n  | 'missingTarget'\n  | 'unsupportedLinkKind'\n  | 'permissionDenied'\n  | 'sourceUnavailable'",
      "docstring": ""
    },
    "LinkStatusView": {
      "name": "LinkStatusView",
      "definition": "{\n  linkId: LinkId;\n  status: LinkStatus;\n  statusReason?: LinkStatusReason;\n  lastResolvedAt?: string;\n  cachedValuesVersion?: string;\n}",
      "docstring": ""
    },
    "MarkerStyle": {
      "name": "MarkerStyle",
      "definition": "| 'circle'\n  | 'dash'\n  | 'diamond'\n  | 'dot'\n  | 'none'\n  | 'picture'\n  | 'plus'\n  | 'square'\n  | 'star'\n  | 'triangle'\n  | 'x'\n  | 'auto'",
      "docstring": "Marker style for scatter/line chart markers."
    },
    "MathFont": {
      "name": "MathFont",
      "definition": "| 'Cambria Math' // Default Excel math font\n  | 'Latin Modern' // TeX-style\n  | 'STIX Two Math' // Scientific publishing\n  | 'XITS Math' // Based on STIX\n  | string",
      "docstring": "Math font for equation rendering\nExcel uses Cambria Math by default"
    },
    "MathNode": {
      "name": "MathNode",
      "definition": "| OMath\n  | OMathPara\n  | AccentNode\n  | BarNode\n  | BoxNode\n  | BorderBoxNode\n  | DelimiterNode\n  | EqArrayNode\n  | FractionNode\n  | FunctionNode\n  | GroupCharNode\n  | LimLowNode\n  | LimUppNode\n  | MatrixNode\n  | NaryNode\n  | PhantomNode\n  | RadicalNode\n  | PreScriptNode\n  | SubscriptNode\n  | SubSupNode\n  | SuperscriptNode\n  | MathRun",
      "docstring": "Any math AST node"
    },
    "MathRun": {
      "name": "MathRun",
      "definition": "{\n  type: 'r';\n  /** Text content */\n  text: string;\n  /** Run properties */\n  rPr?: MathRunProperties;\n}",
      "docstring": "Text Run - <m:r>\nActual text/symbol content"
    },
    "MatrixNode": {
      "name": "MatrixNode",
      "definition": "{\n  type: 'm';\n  /** Base justification */\n  baseJc?: 'top' | 'center' | 'bottom';\n  /** Hide placeholder */\n  plcHide?: boolean;\n  /** Row spacing rule */\n  rSpRule?: 0 | 1 | 2 | 3 | 4;\n  /** Column gap rule */\n  cGpRule?: 0 | 1 | 2 | 3 | 4;\n  /** Row spacing */\n  rSp?: number;\n  /** Column spacing */\n  cSp?: number;\n  /** Column gap */\n  cGp?: number;\n  /** Column properties */\n  mcs?: Array<{ count?: number; mcJc?: 'left' | 'center' | 'right' }>;\n  /** Matrix rows - each row is an array of cells, each cell is an array of nodes */\n  mr: MathNode[][][];\n}",
      "docstring": "Matrix - <m:m>\nMathematical matrix"
    },
    "MergeReceipt": {
      "name": "MergeReceipt",
      "definition": "{\n  kind: 'merge';\n  range: string;\n}",
      "docstring": "Receipt for a merge mutation."
    },
    "MergedRegion": {
      "name": "MergedRegion",
      "definition": "{\n  /** The merged range in A1 notation (e.g., \"A1:B2\") */\n  range: string;\n  /** Start row (0-based) */\n  startRow: number;\n  /** Start column (0-based) */\n  startCol: number;\n  /** End row (0-based, inclusive) */\n  endRow: number;\n  /** End column (0-based, inclusive) */\n  endCol: number;\n  /** Row span (endRow - startRow + 1) */\n  rowSpan: number;\n  /** Column span (endCol - startCol + 1) */\n  colSpan: number;\n}",
      "docstring": "Information about a merged cell region."
    },
    "NameAddReceipt": {
      "name": "NameAddReceipt",
      "definition": "{\n  kind: 'nameAdd';\n  name: string;\n  reference: string;\n}",
      "docstring": "Receipt for a named range add mutation."
    },
    "NameRemoveReceipt": {
      "name": "NameRemoveReceipt",
      "definition": "{\n  kind: 'nameRemove';\n  name: string;\n}",
      "docstring": "Receipt for a named range remove mutation."
    },
    "NamedItemType": {
      "name": "NamedItemType",
      "definition": "| 'String'\n  | 'Integer'\n  | 'Double'\n  | 'Boolean'\n  | 'Range'\n  | 'Error'\n  | 'Array'",
      "docstring": "API type classification for a named item's value.\n\n@see https://learn.microsoft.com/en-us/javascript/api/excel/excel.nameditemtype"
    },
    "NamedRangeInfo": {
      "name": "NamedRangeInfo",
      "definition": "{\n  /** The defined name */\n  name: string;\n  /** The reference formula (e.g., \"Sheet1!$A$1:$B$10\") */\n  reference: string;\n  /** Scope: undefined or sheet name (undefined = workbook scope) */\n  scope?: string;\n  /** Optional descriptive comment */\n  comment?: string;\n  /** Whether the name is visible in Name Manager. Hidden names are typically system-generated. */\n  visible?: boolean;\n}",
      "docstring": "Information about a defined name / named range."
    },
    "NamedRangeReference": {
      "name": "NamedRangeReference",
      "definition": "{\n  /** The sheet name (e.g., \"Sheet1\") */\n  sheetName: string;\n  /** The range portion (e.g., \"$A$1:$B$10\") */\n  range: string;\n}",
      "docstring": "Parsed reference for a named range that refers to a simple sheet!range."
    },
    "NamedRangeUpdateOptions": {
      "name": "NamedRangeUpdateOptions",
      "definition": "{\n  /** New name (for renaming) */\n  name?: string;\n  /** New reference (A1-style) */\n  reference?: string;\n  /** New comment */\n  comment?: string;\n  /** Whether the name is visible in Name Manager */\n  visible?: boolean;\n}",
      "docstring": "Options for updating a named range."
    },
    "NamedSlicerStyle": {
      "name": "NamedSlicerStyle",
      "definition": "{\n  name: string;\n  readOnly: boolean;\n  style: SlicerCustomStyle;\n}",
      "docstring": "A named slicer style stored in the workbook (custom or built-in)."
    },
    "NamedTimelineStyle": {
      "name": "NamedTimelineStyle",
      "definition": "{\n  name: string;\n  readOnly: boolean;\n  style: SlicerCustomStyle;\n}",
      "docstring": "A named timeline style stored in the workbook (custom or built-in)."
    },
    "NaryNode": {
      "name": "NaryNode",
      "definition": "{\n  type: 'nary';\n  /** Operator character (sum, integral, product, etc.) */\n  chr?: string;\n  /** Limit location: 'undOvr' (above/below) or 'subSup' (sub/superscript) */\n  limLoc?: 'undOvr' | 'subSup';\n  /** Grow with content */\n  grow?: boolean;\n  /** Hide subscript */\n  subHide?: boolean;\n  /** Hide superscript */\n  supHide?: boolean;\n  /** Subscript (lower limit) */\n  sub: MathNode[];\n  /** Superscript (upper limit) */\n  sup: MathNode[];\n  /** Content (integrand, summand) */\n  e: MathNode[];\n}",
      "docstring": "N-ary Operator - <m:nary>\nSummation, integral, product, etc."
    },
    "NegativeNumberPattern": {
      "name": "NegativeNumberPattern",
      "definition": "0 | 1 | 2 | 3 | 4",
      "docstring": "Negative number pattern.\nDetermines how negative numbers are displayed (outside of currency context).\n\n0 = (n)      - parentheses\n1 = -n       - leading minus (most common)\n2 = - n      - leading minus with space\n3 = n-       - trailing minus\n4 = n -      - trailing minus with space"
    },
    "NoFill": {
      "name": "NoFill",
      "definition": "{\n  type: 'none';\n}",
      "docstring": "No fill (transparent).\nText will be rendered without any fill color.\n\n@see ECMA-376 Part 1, Section 20.1.8.45 (CT_NoFillProperties)"
    },
    "NodeId": {
      "name": "NodeId",
      "definition": "string & { readonly __brand: 'SmartArtNodeId' }",
      "docstring": "Unique identifier for a diagram node.\n\nThis is a branded type for type safety - prevents accidental use of\narbitrary strings as NodeIds. Uses UUID v4 format."
    },
    "NodeMoveDirection": {
      "name": "NodeMoveDirection",
      "definition": "'promote' | 'demote' | 'move-up' | 'move-down'",
      "docstring": "Hierarchical movement direction for a diagram node.\nUsed by bridges, api/worksheet/smartart, and editor actions."
    },
    "NodePosition": {
      "name": "NodePosition",
      "definition": "'before' | 'after' | 'above' | 'below' | 'child'",
      "docstring": "Node insertion position relative to a target diagram node.\nUsed by bridges, api/worksheet/smartart, and editor actions."
    },
    "Note": {
      "name": "Note",
      "definition": "{\n  content: string;\n  author: string;\n  cellAddress: string;\n  /** Visible state of the note shape. */\n  visible?: boolean;\n  /** Note callout box height in points. */\n  height?: number;\n  /** Note callout box width in points. */\n  width?: number;\n}",
      "docstring": "A cell note (simple, single string per cell). API-only type (no Rust equivalent)."
    },
    "Notification": {
      "name": "Notification",
      "definition": "{\n  /** Unique ID for the notification */\n  id: NotificationId;\n  /** Notification type/severity */\n  type: NotificationType;\n  /** Short title (optional) */\n  title?: string;\n  /** Main message content */\n  message: string;\n  /** Timestamp when created */\n  timestamp: number;\n  /** Auto-dismiss after this many ms (null = manual dismiss only) */\n  duration: number | null;\n  /** Whether the notification can be dismissed */\n  dismissible: boolean;\n  /** Optional action button */\n  action?: {\n    label: string;\n    onClick: () => void;\n  };\n}",
      "docstring": "A single notification"
    },
    "NotificationId": {
      "name": "NotificationId",
      "definition": "string & { readonly __brand: 'NotificationId' }",
      "docstring": "Branded type for notification IDs — prevents accidental use of arbitrary strings."
    },
    "NotificationOptions": {
      "name": "NotificationOptions",
      "definition": "{\n  /** Notification type/severity (default: 'info') */\n  type?: NotificationType;\n  /** Short title */\n  title?: string;\n  /** Auto-dismiss duration in ms (default: 5000, null for no auto-dismiss) */\n  duration?: number | null;\n  /** Whether dismissible (default: true) */\n  dismissible?: boolean;\n  /** Optional action button */\n  action?: {\n    label: string;\n    onClick: () => void;\n  };\n}",
      "docstring": "Options for creating a notification"
    },
    "NotificationType": {
      "name": "NotificationType",
      "definition": "'info' | 'success' | 'warning' | 'error'",
      "docstring": "Notification severity levels"
    },
    "NumberFormatCategory": {
      "name": "NumberFormatCategory",
      "isEnum": true,
      "values": {
        "General": "'General'",
        "Number": "'Number'",
        "Currency": "'Currency'",
        "Accounting": "'Accounting'",
        "Date": "'Date'",
        "Time": "'Time'",
        "Percentage": "'Percentage'",
        "Fraction": "'Fraction'",
        "Scientific": "'Scientific'",
        "Text": "'Text'",
        "Special": "'Special'",
        "Custom": "'Custom'"
      },
      "docstring": "Number format category classification.\nMatches the FormatType enum from Rust compute-formats."
    },
    "NumberFormatType": {
      "name": "NumberFormatType",
      "definition": "| 'general'\n  | 'number'\n  | 'currency'\n  | 'accounting'\n  | 'date'\n  | 'time'\n  | 'percentage'\n  | 'fraction'\n  | 'scientific'\n  | 'text'\n  | 'special'\n  | 'custom'",
      "docstring": ""
    },
    "OMath": {
      "name": "OMath",
      "definition": "{\n  type: 'oMath';\n  children: MathNode[];\n}",
      "docstring": "Root math container - <m:oMath>"
    },
    "OMathPara": {
      "name": "OMathPara",
      "definition": "{\n  type: 'oMathPara';\n  justification?: 'left' | 'right' | 'center' | 'centerGroup';\n  equations: OMath[];\n}",
      "docstring": "Math paragraph - <m:oMathPara>"
    },
    "ObjectAnchorType": {
      "name": "ObjectAnchorType",
      "definition": "| 'twoCell' // Anchored to two cells (moves and resizes with cells)\n  | 'oneCell' // Anchored to one cell (moves but doesn't resize)\n  | 'absolute'",
      "docstring": "How the object anchors to the sheet.\nDetermines behavior when rows/columns are resized."
    },
    "ObjectBorder": {
      "name": "ObjectBorder",
      "definition": "{\n  /** Border line style */\n  style: 'none' | 'solid' | 'dashed' | 'dotted';\n  /** Border color (CSS color string) */\n  color: string;\n  /** Border width in pixels */\n  width: number;\n}",
      "docstring": "Border style for floating objects."
    },
    "ObjectBounds": {
      "name": "ObjectBounds",
      "definition": "{\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  rotation: number;\n}",
      "docstring": "Pure-primitive rendering bounds types\n\nLeaf types (zero intra-contracts deps) that describe geometric/visual\nrecords. Promoted to Tier 1 during Phase C: they are consumed by both\nTier 2 machines/actors and Tier 2 rendering, so hosting them here\nbreaks what would otherwise be a types-machines ↔ types-rendering cycle.\n\n@module @mog/types-viewport/rendering/bounds"
    },
    "ObjectFill": {
      "name": "ObjectFill",
      "definition": "{\n  /** Fill type */\n  type: FillType;\n  /** Solid fill color (CSS color string) */\n  color?: string;\n  /** Gradient configuration */\n  gradient?: GradientFill;\n  /** Fill transparency (0 = opaque, 1 = fully transparent). */\n  transparency?: number;\n  /** Pattern fill configuration (for type='pattern') */\n  pattern?: PatternFill;\n  /** Picture/texture fill configuration (for type='pictureAndTexture') */\n  blip?: BlipFill;\n}",
      "docstring": "Fill configuration for shapes and text boxes.\nMatches the Rust `ObjectFill` struct in `domain-types`."
    },
    "ObjectPosition": {
      "name": "ObjectPosition",
      "definition": "{\n  /** Anchor type determines how object moves/resizes with cells */\n  anchorType: ObjectAnchorType;\n  /** Start anchor (top-left corner) - required for all anchor types */\n  from: CellAnchor;\n  /** End anchor (bottom-right corner) - only for twoCell anchor */\n  to?: CellAnchor;\n  /** Absolute X position in pixels (only for absolute anchor) */\n  x?: number;\n  /** Absolute Y position in pixels (only for absolute anchor) */\n  y?: number;\n  /** Width in pixels (for oneCell and absolute anchors) */\n  width?: number;\n  /** Height in pixels (for oneCell and absolute anchors) */\n  height?: number;\n  /** Rotation angle in degrees (0-360) */\n  rotation?: number;\n  /** Flip horizontally (mirror along vertical axis) */\n  flipH?: boolean;\n  /** Flip vertically (mirror along horizontal axis) */\n  flipV?: boolean;\n}",
      "docstring": "Object position configuration.\nSupports cell-anchored and absolute positioning modes."
    },
    "OleObjectObject": {
      "name": "OleObjectObject",
      "definition": "{\n  type: 'oleObject';\n  /** OLE ProgID identifying the source application (e.g., \"Word.Document.12\") */\n  progId: string;\n  /** Display aspect: 'content' renders the object preview, 'icon' shows an application icon */\n  dvAspect: 'content' | 'icon';\n  /** Whether the object links to an external file */\n  isLinked: boolean;\n  /** Whether the object data is embedded in the workbook */\n  isEmbedded: boolean;\n  /** Blob URL for the preview image (PNG/JPEG), null for EMF/WMF or missing previews */\n  previewImageSrc: string | null;\n  /** Descriptive text for accessibility */\n  altText: string;\n}",
      "docstring": "OLE (Object Linking and Embedding) floating object.\n\nRepresents embedded or linked objects from other applications (e.g., Word\ndocuments, PDF files, Visio drawings). The object may have a preview image\n(PNG/JPEG) or display as an icon. EMF/WMF previews are not supported and\nwill have a null previewImageSrc.\n\nArchitecture Notes:\n- Preview image is extracted during OOXML parsing and stored as a blob URL\n- Linked objects reference external files (isLinked); embedded objects are self-contained\n- dvAspect determines whether the object renders as content or as an icon\n- progId identifies the source application (e.g., \"Word.Document.12\", \"AcroExch.Document\")"
    },
    "OperationWarning": {
      "name": "OperationWarning",
      "definition": "{\n  /** Machine-readable warning code */\n  code: string;\n  /** Human-readable description */\n  message: string;\n  /** Optional structured context for programmatic handling */\n  context?: Record<string, unknown>;\n}",
      "docstring": "Non-fatal warning attached to an operation result."
    },
    "OriginalCellValue": {
      "name": "OriginalCellValue",
      "definition": "{\n  sheetId: SheetId;\n  cellId: string;\n  value: string | number | boolean | null;\n  /** Original formula, if the cell had one. */\n  formula?: string;\n}",
      "docstring": "A saved original cell value from before scenario application."
    },
    "OuterShadowEffect": {
      "name": "OuterShadowEffect",
      "definition": "{\n  /** Blur radius in EMUs (English Metric Units).\nHigher values create a softer, more diffuse shadow.\n1 point = 12700 EMUs.\n\n@example 50800 // 4pt blur */\n  blurRadius: number;\n  /** Shadow distance from text in EMUs.\nHow far the shadow is offset from the text.\n\n@example 38100 // 3pt offset */\n  distance: number;\n  /** Shadow direction in degrees.\nAngle measured clockwise from the positive x-axis.\n- 0 = right\n- 90 = down\n- 180 = left\n- 270 = up */\n  direction: number;\n  /** Shadow color (CSS color string).\nTypically black or dark gray for standard shadows.\n\n@example '#000000' */\n  color: string;\n  /** Shadow opacity (0-1).\n0 = fully transparent, 1 = fully opaque.\nTypical values range from 0.3 to 0.6 for natural-looking shadows. */\n  opacity: number;\n  /** Horizontal scale factor for perspective shadows.\nValues less than 1.0 compress the shadow horizontally.\nValues greater than 1.0 stretch the shadow horizontally.\n\n@default 1.0 (no scaling) */\n  scaleX?: number;\n  /** Vertical scale factor for perspective shadows.\nValues less than 1.0 compress the shadow vertically.\nValues greater than 1.0 stretch the shadow vertically.\n\n@default 1.0 (no scaling) */\n  scaleY?: number;\n  /** Skew angle X in degrees (for perspective shadows).\nShears the shadow horizontally.\n\n@default 0 (no skew) */\n  skewX?: number;\n  /** Skew angle Y in degrees (for perspective shadows).\nShears the shadow vertically.\n\n@default 0 (no skew) */\n  skewY?: number;\n  /** Shadow alignment relative to the text bounding box.\nDetermines the anchor point for shadow positioning.\n\n@default 'b' (bottom) */\n  alignment?: ShadowAlignment;\n  /** Whether shadow rotates with text when text is rotated.\nIf true, the shadow direction is relative to the text.\nIf false, the shadow direction is absolute (relative to the page).\n\n@default true */\n  rotateWithShape?: boolean;\n}",
      "docstring": "Outer shadow effect (shadow cast outside the text).\n\nCreates a shadow behind the text that appears to be cast by a light source.\nThe shadow can be positioned, blurred, scaled, and skewed for various effects\nincluding simple drop shadows and perspective shadows.\n\n@example\n// Simple drop shadow (bottom-right)\nconst shadow: OuterShadowEffect = {\n  blurRadius: 50800,  // 4pt blur\n  distance: 38100,    // 3pt offset\n  direction: 45,      // 45 degrees (down-right)\n  color: '#000000',\n  opacity: 0.4\n};\n\n@see ECMA-376 Part 1, Section 20.1.8.52 (outerShdw)"
    },
    "OutlineSettings": {
      "name": "OutlineSettings",
      "definition": "{\n  /** Whether outline symbols (+/-) are visible */\n  showOutlineSymbols: boolean;\n  /** Whether outline level buttons (1,2,3...) are visible */\n  showOutlineLevelButtons: boolean;\n  /** Whether summary rows appear below detail rows */\n  summaryRowsBelow: boolean;\n  /** Whether summary columns appear to the right of detail */\n  summaryColumnsRight: boolean;\n}",
      "docstring": "Outline display settings for grouping."
    },
    "PageMargins": {
      "name": "PageMargins",
      "definition": "{\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  header: number;\n  footer: number;\n}",
      "docstring": "Page margins in inches.\nFull OOXML representation including header/footer margins."
    },
    "Path": {
      "name": "Path",
      "definition": "{\n  segments: PathSegment[];\n  closed: boolean;\n  subPaths?: SubPath[];\n}",
      "docstring": "A geometric path composed of segments."
    },
    "PathSegment": {
      "name": "PathSegment",
      "definition": "MoveTo | LineTo | CurveTo | QuadraticTo | ClosePath",
      "docstring": "A single segment in a path."
    },
    "PatternFill": {
      "name": "PatternFill",
      "definition": "{\n  preset: string;\n  foregroundColor?: string;\n  backgroundColor?: string;\n}",
      "docstring": "Pattern fill definition."
    },
    "PatternType": {
      "name": "PatternType",
      "definition": "| 'none'\n  | 'solid'\n  | 'darkGray'\n  | 'mediumGray'\n  | 'lightGray'\n  | 'gray125'\n  | 'gray0625'\n  | 'darkHorizontal'\n  | 'darkVertical'\n  | 'darkDown'\n  | 'darkUp'\n  | 'darkGrid'\n  | 'darkTrellis'\n  | 'lightHorizontal'\n  | 'lightVertical'\n  | 'lightDown'\n  | 'lightUp'\n  | 'lightGrid'\n  | 'lightTrellis'",
      "docstring": "Spreadsheet pattern fill types.\n\nXLSX supports 18 pattern types for cell backgrounds. These patterns\ncombine a foreground color (the pattern) with a background color.\n\nPattern visualization (8x8 pixels):\n- none: No fill (transparent)\n- solid: Solid fill (fgColor only)\n- darkGray/mediumGray/lightGray/gray125/gray0625: Dot density patterns\n- darkHorizontal/lightHorizontal: Horizontal stripe patterns\n- darkVertical/lightVertical: Vertical stripe patterns\n- darkDown/lightDown: Diagonal stripes (top-left to bottom-right)\n- darkUp/lightUp: Diagonal stripes (bottom-left to top-right)\n- darkGrid/lightGrid: Grid patterns (horizontal + vertical)\n- darkTrellis/lightTrellis: Cross-hatch patterns (both diagonals)"
    },
    "PercentNegativePattern": {
      "name": "PercentNegativePattern",
      "definition": "0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11",
      "docstring": "Percent negative pattern.\n\n0 = -n %\n1 = -n%\n2 = -%n\n3 = %-n\n4 = %n-\n5 = n-%\n6 = n%-\n7 = -% n\n8 = n %-\n9 = % n-\n10 = % -n\n11 = n- %"
    },
    "PercentPositivePattern": {
      "name": "PercentPositivePattern",
      "definition": "0 | 1 | 2 | 3",
      "docstring": "Percent positive pattern.\n\n0 = n %      - number, space, percent\n1 = n%       - number, percent (most common)\n2 = %n       - percent, number\n3 = % n      - percent, space, number"
    },
    "PersistedLinkTarget": {
      "name": "PersistedLinkTarget",
      "definition": "| { readonly kind: 'document-ref'; readonly documentId: DocumentId }\n  | { readonly kind: 'open-session'; readonly sessionId: WorkbookSessionId }\n  | { readonly kind: 'path'; readonly path: string }\n  | { readonly kind: 'url'; readonly url: string }\n  | { readonly kind: 'excel-external-path'; readonly target: string }\n  | { readonly kind: 'opaque-host-ref'; readonly provider: string; readonly ref: string }",
      "docstring": ""
    },
    "PersistedWorkbookLinkRecord": {
      "name": "PersistedWorkbookLinkRecord",
      "definition": "{\n  linkId: LinkId;\n  expectedWorkbookId: WorkbookId | null;\n  target: PersistedLinkTarget;\n  displayName: string;\n  sourceKind: WorkbookLinkSourceKind;\n  importedExcelIdentity?: ImportedExternalLinkIdentity;\n  materializedCacheMetadata?: AuthorizedMaterializedCacheMetadata;\n}",
      "docstring": ""
    },
    "PhantomNode": {
      "name": "PhantomNode",
      "definition": "{\n  type: 'phant';\n  /** Show content (false = invisible) */\n  show?: boolean;\n  /** Zero width */\n  zeroWid?: boolean;\n  /** Zero ascent */\n  zeroAsc?: boolean;\n  /** Zero descent */\n  zeroDesc?: boolean;\n  /** Transparent (show but don't contribute to size) */\n  transp?: boolean;\n  /** Content */\n  e: MathNode[];\n}",
      "docstring": "Phantom - <m:phant>\nInvisible element for spacing"
    },
    "PictureAdjustments": {
      "name": "PictureAdjustments",
      "definition": "{\n  /** Brightness adjustment (-100 to 100, 0 = normal) */\n  brightness?: number;\n  /** Contrast adjustment (-100 to 100, 0 = normal) */\n  contrast?: number;\n  /** Transparency (0 = opaque, 100 = fully transparent) */\n  transparency?: number;\n}",
      "docstring": "Image adjustment settings.\nValues mirror Excel's picture format options."
    },
    "PictureConfig": {
      "name": "PictureConfig",
      "definition": "{\n  /** Image source: data URL, blob URL, or file path. */\n  src: string;\n  /** X position in pixels. */\n  x?: number;\n  /** Y position in pixels. */\n  y?: number;\n  /** Width in pixels (defaults to original image width). */\n  width?: number;\n  /** Height in pixels (defaults to original image height). */\n  height?: number;\n  /** Accessibility alt text. */\n  altText?: string;\n  /** Display name. */\n  name?: string;\n  /** Image crop settings (percentage from each edge). */\n  crop?: PictureCrop;\n  /** Image adjustments (brightness, contrast, transparency). */\n  adjustments?: PictureAdjustments;\n  /** Border around the picture. */\n  border?: ObjectBorder;\n  /** Full floating-object position update. Used by Format Picture dialogs. */\n  position?: Partial<ObjectPosition>;\n  /** Whether the picture is locked when sheet protection is active. */\n  locked?: boolean;\n  /** Whether the picture prints with the worksheet. */\n  printable?: boolean;\n  /** Anchor cell as `{row, col}`. When set, `x`/`y` become offsets from this\ncell instead of from cell `(0, 0)`. Used by paste-image to anchor at the\nactive cell. */\n  anchorCell?: { row: number; col: number };\n}",
      "docstring": "Configuration for creating a new picture."
    },
    "PictureCrop": {
      "name": "PictureCrop",
      "definition": "{\n  /** Percentage to crop from top (0-100) */\n  top: number;\n  /** Percentage to crop from right (0-100) */\n  right: number;\n  /** Percentage to crop from bottom (0-100) */\n  bottom: number;\n  /** Percentage to crop from left (0-100) */\n  left: number;\n}",
      "docstring": "Image crop settings.\nValues are percentages (0-100) of original dimension to crop from each side."
    },
    "PictureHandle": {
      "name": "PictureHandle",
      "definition": "{\n  update(props: Partial<PictureConfig>): Promise<void>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<PictureHandle>;;\n  getData(): Promise<PictureObject>;;\n}",
      "docstring": ""
    },
    "PictureObject": {
      "name": "PictureObject",
      "definition": "{\n  type: 'picture';\n  /** Image source (data URL, blob URL, or external URL) */\n  src: string;\n  /** Original image width in pixels (before scaling) */\n  originalWidth: number;\n  /** Original image height in pixels (before scaling) */\n  originalHeight: number;\n  /** Crop settings (percentage-based) */\n  crop?: PictureCrop;\n  /** Image adjustments (brightness, contrast, transparency) */\n  adjustments?: PictureAdjustments;\n  /** Border around the image */\n  border?: ObjectBorder;\n  /** Image color transform type */\n  colorType?: ImageColorType;\n}",
      "docstring": "Picture/image floating object.\nSupports images from various sources with cropping and adjustments."
    },
    "PieSliceConfig": {
      "name": "PieSliceConfig",
      "definition": "{\n  explosion?: number;\n  explodedIndices?: number[];\n  explodeOffset?: number;\n  /** Explode all slices simultaneously */\n  explodeAll?: boolean;\n}",
      "docstring": "Pie/doughnut slice configuration (matches PieSliceData wire type)"
    },
    "PivotCalculatedFieldSpec": {
      "name": "PivotCalculatedFieldSpec",
      "definition": "{\n  calculatedFieldId?: CalculatedFieldId;\n  name: string;\n  formula: string;\n}",
      "docstring": ""
    },
    "PivotChartOptions": {
      "name": "PivotChartOptions",
      "definition": "{\n  /** Show axis field buttons on the chart. */\n  showAxisFieldButtons?: boolean;\n  /** Show legend field buttons on the chart. */\n  showLegendFieldButtons?: boolean;\n  /** Show report filter field buttons on the chart. */\n  showReportFilterFieldButtons?: boolean;\n  /** Show value field buttons on the chart. */\n  showValueFieldButtons?: boolean;\n}",
      "docstring": "Pivot chart display options (field button visibility)."
    },
    "PivotColumnHeader": {
      "name": "PivotColumnHeader",
      "definition": "{\n  headers: PivotHeader[];\n  fieldId: string;\n}",
      "docstring": ""
    },
    "PivotCommandReceipt": {
      "name": "PivotCommandReceipt",
      "definition": "{\n  receiptId: string;\n  kernelReceiptId: string;\n  action: string;\n  pivotId: string;\n  effects: PivotMutationEffect[];\n  updateReason: string;\n  refreshPolicy: 'dirtyOnly' | 'refreshAndMaterialize';\n  materialized: boolean;\n  configRevision: number;\n  resultRevision: number;\n  projectionRevision: number;\n  materializedRevision?: number;\n  renderFrame: number;\n  status: 'complete' | 'failed' | 'cancelled' | 'timeout';\n  error?: PivotKernelMutationError | { code: 'UI_TIMEOUT' | 'UI_CANCELLED'; message: string };\n}",
      "docstring": ""
    },
    "PivotCreateConfig": {
      "name": "PivotCreateConfig",
      "definition": "| SimplePivotTableConfig\n  | Omit<PivotTableConfig, 'id' | 'createdAt' | 'updatedAt' | 'schemaVersion'>",
      "docstring": "Input config for pivot creation — accepts either the simple ergonomic format\n(dataSource string + field name arrays) or the full wire format (sourceSheetName,\nsourceRange, fields[], placements[]).\n\nSimple format example:\n```ts\n{ name: \"Sales\", dataSource: \"Sheet1!A1:D100\", rowFields: [\"Region\"],\n  columnFields: [\"Year\"], valueFields: [{ field: \"Amount\", aggregation: \"sum\" }] }\n```\n\nFull format example:\n```ts\n{ name: \"Sales\", sourceSheetName: \"Sheet1\",\n  sourceRange: { startRow: 0, startCol: 0, endRow: 99, endCol: 3 },\n  outputSheetName: \"Sheet1\", outputLocation: { row: 0, col: 5 },\n  fields: [...], placements: [...], filters: [] }\n```"
    },
    "PivotDataHierarchyInfo": {
      "name": "PivotDataHierarchyInfo",
      "definition": "{\n  /** The field ID of the value field. */\n  fieldId: string;\n  /** Stable placement ID of the value field. */\n  measurePlacementId?: PlacementId;\n  /** The display name of the value field (e.g., \"Sum of Sales\"). */\n  displayName: string;\n  /** The aggregate function applied. */\n  aggregateFunction: AggregateFunction;\n  /** The 0-based index of this value field in the value placements. */\n  index: number;\n}",
      "docstring": "Identifies which data hierarchy (value field) a pivot cell belongs to."
    },
    "PivotExpansionKey": {
      "name": "PivotExpansionKey",
      "definition": "{\n  axis: 'row' | 'column';\n  axisPlacementId: PlacementId;\n  memberPath: PivotMemberKey[];\n}",
      "docstring": ""
    },
    "PivotExpansionState": {
      "name": "PivotExpansionState",
      "definition": "{\n  keys?: PivotExpansionKey[];\n  /** @deprecated Legacy expansion map keyed by rendered header strings. */\n  expandedRows: Record<string, boolean>;\n  /** @deprecated Legacy expansion map keyed by rendered header strings. */\n  expandedColumns: Record<string, boolean>;\n}",
      "docstring": "Tracks which headers are expanded/collapsed.\nUses Record<string, boolean> for TS ergonomics; Rust side uses HashSet<String>\nwith custom serde that accepts both array and map formats."
    },
    "PivotFieldArea": {
      "name": "PivotFieldArea",
      "definition": "'row' | 'column' | 'value' | 'filter'",
      "docstring": ""
    },
    "PivotFieldItems": {
      "name": "PivotFieldItems",
      "definition": "{\n  fieldId: string;\n  fieldName: string;\n  area: PivotFieldArea;\n  items: PivotItemInfo[];\n}",
      "docstring": "Collection of pivot items for a single field.\nMirrors the Rust PivotFieldItems type."
    },
    "PivotFilter": {
      "name": "PivotFilter",
      "definition": "{\n  fieldId: string;\n  includeValues?: CellValue[];\n  excludeValues?: CellValue[];\n  condition?: PivotFilterConditionFlat;\n  topBottom?: PivotTopBottomFilter;\n  showItemsWithNoData?: boolean;\n}",
      "docstring": ""
    },
    "PivotFilterConditionFlat": {
      "name": "PivotFilterConditionFlat",
      "definition": "{\n  operator: FilterOperator;\n  value?: CellValue;\n  value2?: CellValue;\n}",
      "docstring": ""
    },
    "PivotGrandTotals": {
      "name": "PivotGrandTotals",
      "definition": "{\n  row?: CellValue[];\n  column?: CellValue[][];\n  grand?: CellValue[];\n  rowLabel?: string;\n}",
      "docstring": ""
    },
    "PivotHeader": {
      "name": "PivotHeader",
      "definition": "{\n  key: PivotMemberKey;\n  value: CellValue;\n  fieldId: string;\n  axisPlacementId?: PlacementId;\n  depth: number;\n  span: number;\n  isExpandable: boolean;\n  isExpanded: boolean;\n  isSubtotal: boolean;\n  isGrandTotal: boolean;\n  parentKey?: PivotMemberKey;\n  childKeys?: PivotMemberKey[];\n}",
      "docstring": ""
    },
    "PivotItemInfo": {
      "name": "PivotItemInfo",
      "definition": "{\n  key: PivotMemberKey;\n  value: CellValue;\n  fieldId: string;\n  axisPlacementId?: PlacementId;\n  area: PivotFieldArea;\n  depth: number;\n  isExpandable: boolean;\n  isExpanded: boolean;\n  isVisible: boolean;\n  isSubtotal: boolean;\n  isGrandTotal: boolean;\n  childKeys?: PivotMemberKey[];\n  parentKey?: PivotMemberKey;\n}",
      "docstring": "A PivotItem represents a unique value within a pivot field.\nMirrors the Rust PivotItemInfo type."
    },
    "PivotItemLocation": {
      "name": "PivotItemLocation",
      "definition": "{\n  /** The field ID. */\n  fieldId: string;\n  /** Stable placement ID of the axis field, when available. */\n  axisPlacementId?: PlacementId;\n  /** The display value of the item. */\n  value: CellValue;\n  /** The compound key identifying this item in the pivot result tree. */\n  key: PivotMemberKey;\n}",
      "docstring": "Identifies which pivot items (row/column group values) intersect at a given cell."
    },
    "PivotKernelMutationError": {
      "name": "PivotKernelMutationError",
      "definition": "{\n  code: | 'PIVOT_NOT_FOUND'\n    | 'PLACEMENT_NOT_FOUND'\n    | 'DUPLICATE_PLACEMENT_ID'\n    | 'AMBIGUOUS_SELECTOR'\n    | 'INVALID_PLACEMENT_SOURCE'\n    | 'CALCULATED_FIELD_NOT_FOUND'\n    | 'DUPLICATE_CALCULATED_FIELD_ID'\n    | 'DUPLICATE_CALCULATED_FIELD_NAME'\n    | 'INVALID_CALCULATED_FIELD_FORMULA'\n    | 'INVALID_CALCULATED_FIELD_REFERENCE'\n    | 'CALCULATED_FIELD_DEPENDENCY_CYCLE'\n    | 'INVALID_CALCULATED_FIELD_STATE'\n    | 'INVALID_EXPANSION_KEY'\n    | 'UNRESOLVABLE_EXPANSION_KEY'\n    | 'STALE_EXPANSION_TARGET'\n    | 'REFRESH_FAILED'\n    | 'MATERIALIZATION_FAILED';\n  stage: PivotMutationStage;\n  message: string;\n}",
      "docstring": ""
    },
    "PivotKernelMutationReceipt": {
      "name": "PivotKernelMutationReceipt",
      "definition": "{\n  kernelReceiptId: string;\n  pivotId: string;\n  effects: PivotMutationEffect[];\n  mutationResult: unknown;\n  updateReason: string;\n  refreshPolicy: 'dirtyOnly' | 'refreshAndMaterialize';\n  materialized: boolean;\n  configRevision: number;\n  resultRevision?: number;\n  materializedRevision?: number;\n  status: PivotMutationStatus;\n  error?: PivotKernelMutationError;\n}",
      "docstring": ""
    },
    "PivotMeasureDescriptor": {
      "name": "PivotMeasureDescriptor",
      "definition": "{\n  placementId: PlacementId;\n  source: | { type: 'field'; fieldId: string }\n    | { type: 'calculatedField'; calculatedFieldId: CalculatedFieldId };\n  aggregateFunction: AggregateFunction;\n  name: string;\n  numberFormat?: string;\n}",
      "docstring": ""
    },
    "PivotMemberKey": {
      "name": "PivotMemberKey",
      "definition": "string & { readonly __brand: 'PivotMemberKey' }",
      "docstring": ""
    },
    "PivotMemberRef": {
      "name": "PivotMemberRef",
      "definition": "{\n  key: PivotMemberKey;\n  value: CellValue;\n  displayText: string;\n  fieldId?: string;\n  groupingBucketId?: string;\n}",
      "docstring": ""
    },
    "PivotMutationEffect": {
      "name": "PivotMutationEffect",
      "definition": "{\n  type: | 'placementAdded'\n    | 'placementUpdated'\n    | 'placementRemoved'\n    | 'calculatedFieldAdded'\n    | 'calculatedFieldUpdated'\n    | 'calculatedFieldRemoved'\n    | 'calculatedFieldInvalidated'\n    | 'expansionChanged'\n    | 'expansionKeyDropped';\n  placementId?: PlacementId;\n  calculatedFieldId?: CalculatedFieldId;\n  expansionKey?: PivotExpansionKey;\n}",
      "docstring": ""
    },
    "PivotMutationStage": {
      "name": "PivotMutationStage",
      "definition": "| 'validate'\n  | 'configWrite'\n  | 'refresh'\n  | 'materialize'",
      "docstring": ""
    },
    "PivotMutationStatus": {
      "name": "PivotMutationStatus",
      "definition": "'applied' | 'noOp' | 'failed'",
      "docstring": ""
    },
    "PivotPlacementMutationReceipt": {
      "name": "PivotPlacementMutationReceipt",
      "definition": "| (PivotKernelMutationReceipt & { status: 'applied'; placementId: PlacementId })\n  | (PivotKernelMutationReceipt & { status: 'noOp' | 'failed'; placementId?: never })",
      "docstring": ""
    },
    "PivotPlacementPatch": {
      "name": "PivotPlacementPatch",
      "definition": "Partial<Omit<PivotPlacementSpec, 'placementId' | 'area' | 'source'>>",
      "docstring": ""
    },
    "PivotPlacementSpec": {
      "name": "PivotPlacementSpec",
      "definition": "{\n  placementId?: PlacementId;\n  fieldId?: string;\n  area: PivotFieldArea;\n  position?: number;\n  source?: { type: 'field'; fieldId: string } | { type: 'calculatedField'; calculatedFieldId: CalculatedFieldId };\n  aggregateFunction?: AggregateFunction;\n  sortOrder?: SortOrder;\n  displayName?: string;\n  showValuesAs?: ShowValuesAsConfig;\n  numberFormat?: string;\n}",
      "docstring": ""
    },
    "PivotQueryRecord": {
      "name": "PivotQueryRecord",
      "definition": "{\n  /** Dimension values keyed by field name (e.g., { Region: \"North\", Year: 2021 }) */\n  dimensions: Record<string, CellValue>;\n  /** Aggregated values keyed by value field label (e.g., { \"Sum of Amount\": 110 }) */\n  values: Record<string, CellValue>;\n  /** Measure-aware values with stable placement provenance. */\n  valueRecords?: PivotValueRecord[];\n  rowMemberPath?: PivotMemberRef[];\n  columnMemberPath?: PivotMemberRef[];\n}",
      "docstring": "A single flat record from a pivot query result."
    },
    "PivotQueryResult": {
      "name": "PivotQueryResult",
      "definition": "{\n  /** Pivot table name */\n  pivotName: string;\n  /** Row dimension field names */\n  rowFields: string[];\n  /** Column dimension field names */\n  columnFields: string[];\n  /** Value field labels */\n  valueFields: string[];\n  /** Flat records — one per data intersection, excluding subtotals and grand totals */\n  records: PivotQueryRecord[];\n  /** Total source row count */\n  sourceRowCount: number;\n}",
      "docstring": "Result of queryPivot() — flat, agent-friendly records instead of hierarchy trees."
    },
    "PivotRefreshReceipt": {
      "name": "PivotRefreshReceipt",
      "definition": "{\n  kind: 'pivotRefresh';\n  pivotId: string;\n}",
      "docstring": "Receipt for a pivot table refresh mutation."
    },
    "PivotRenderedBounds": {
      "name": "PivotRenderedBounds",
      "definition": "{\n  totalRows: number;\n  totalCols: number;\n  firstDataRow: number;\n  firstDataCol: number;\n  /** Number of data columns reserved for the pivot body — `column_leaves * max(v, 1)`.\nDistinct from `totalCols`, which adds row-header columns and grand-total columns.\nComputed from the column-axis structure (sum of depth-0 column-header spans),\nnot from per-row value vectors, so it stays correct when measures or rows are empty. */\n  numDataCols: number;\n}",
      "docstring": ""
    },
    "PivotRow": {
      "name": "PivotRow",
      "definition": "{\n  key: PivotTupleKey;\n  headers: PivotHeader[];\n  values: CellValue[];\n  valueRecords?: PivotValueRecord[];\n  depth: number;\n  isSubtotal: boolean;\n  isGrandTotal: boolean;\n  /** Source row indices from the original data that contribute to this row's values.\nIndices are 0-based into the source data rows (excluding the header row). */\n  sourceRowIndices?: number[];\n}",
      "docstring": ""
    },
    "PivotTableConfig": {
      "name": "PivotTableConfig",
      "definition": "{\n  /** Pivot table name */\n  name: string;\n  /** Source data range in A1 notation (e.g., \"Sheet1!A1:E100\") */\n  dataSource: string;\n  /** Target sheet name (defaults to a new sheet) */\n  targetSheet?: string;\n  /** Target cell address (defaults to A1) */\n  targetAddress?: string;\n  /** Field names for the row area */\n  rowFields?: string[];\n  /** Field names for the column area */\n  columnFields?: string[];\n  /** Value field configurations */\n  valueFields?: PivotValueField[];\n  /** Field names for the filter area */\n  filterFields?: string[];\n  /** When true, allows multiple filter criteria on a single field. */\n  allowMultipleFiltersPerField?: boolean;\n  /** Controls whether the pivot table auto-formats when refreshed. */\n  autoFormat?: boolean;\n  /** Controls whether custom formatting is preserved on refresh. */\n  preserveFormatting?: boolean;\n}",
      "docstring": "Configuration for creating or describing a pivot table."
    },
    "PivotTableHandle": {
      "name": "PivotTableHandle",
      "definition": "{\n  /** Unique pivot table identifier (readonly) */\n  id: string;\n  /** Get the pivot table name */\n  getName(): string;;\n  /** Get the current configuration including all fields */\n  getConfig(): PivotTableConfig;;\n  /** Add a field to the row, column, or filter area */\n  addField(field: string, area: 'row' | 'column' | 'filter', position?: number): void;;\n  /** Add a value field with aggregation */\n  addValueField(field: string, aggregation: PivotValueField['aggregation'], label?: string): void;;\n  /** Remove a field by name */\n  removeField(fieldName: string): void;;\n  /** Change the aggregation function of a value field */\n  changeAggregation(valueFieldLabel: string, newAggregation: PivotValueField['aggregation']): void;;\n  /** Rename a value field's display label */\n  renameValueField(currentLabel: string, newLabel: string): void;;\n  /** Refresh the pivot table from its data source */\n  refresh(): Promise<void>;;\n  /** Get all items for all non-value fields */\n  getAllItems(): Promise<PivotFieldItems[]>;;\n  /** Set the \"Show Values As\" calculation for a value field. Pass null to clear. */\n  setShowValuesAs(valueFieldLabel: string, showValuesAs: ShowValuesAsConfig | null): void;;\n  /** Set item visibility by value string -> boolean map */\n  setItemVisibility(fieldId: string, visibleItems: Record<string, boolean>): void;;\n  /** Get the data source type (range, table, or external). */\n  getDataSourceType(): DataSourceType;;\n  /** Change the source data range without refreshing/materializing. */\n  setDataSource(dataSource: string): Promise<void>;;\n}",
      "docstring": "Handle for interacting with an existing pivot table.\n\nReturned by `worksheet.getPivotTable()`. Provides methods to query\nand modify the pivot table's field configuration."
    },
    "PivotTableInfo": {
      "name": "PivotTableInfo",
      "definition": "{\n  /** Pivot table name */\n  name: string;\n  /** Source data range (e.g., \"Sheet1!A1:D100\") */\n  dataSource: string;\n  /** Range occupied by the pivot table content */\n  contentArea: string;\n  /** Range occupied by filter dropdowns (if any) */\n  filterArea?: string;\n  /** Output anchor location as A1 reference (e.g., \"G1\") */\n  location?: string;\n  /** Row dimension field names */\n  rowFields?: string[];\n  /** Column dimension field names */\n  columnFields?: string[];\n  /** Value fields with aggregation info */\n  valueFields?: PivotValueField[];\n  /** Filter field names */\n  filterFields?: string[];\n}",
      "docstring": "Summary information about an existing pivot table."
    },
    "PivotTableLayout": {
      "name": "PivotTableLayout",
      "definition": "{\n  showRowGrandTotals?: boolean;\n  showColumnGrandTotals?: boolean;\n  layoutForm?: LayoutForm;\n  subtotalLocation?: SubtotalLocation;\n  repeatRowLabels?: boolean;\n  insertBlankRowAfterItem?: boolean;\n  showRowHeaders?: boolean;\n  showColumnHeaders?: boolean;\n  classicLayout?: boolean;\n  grandTotalCaption?: string;\n  rowHeaderCaption?: string;\n  colHeaderCaption?: string;\n  dataCaption?: string;\n  gridDropZones?: boolean;\n  errorCaption?: string;\n  showError?: boolean;\n  missingCaption?: string;\n  showMissing?: boolean;\n}",
      "docstring": ""
    },
    "PivotTableResult": {
      "name": "PivotTableResult",
      "definition": "{\n  columnHeaders: PivotColumnHeader[];\n  rows: PivotRow[];\n  records?: PivotQueryRecord[];\n  grandTotals: PivotGrandTotals;\n  sourceRowCount: number;\n  renderedBounds: PivotRenderedBounds;\n  measureDescriptors?: PivotMeasureDescriptor[];\n  valueRecords?: PivotValueRecord[];\n  errors?: string[];\n}",
      "docstring": ""
    },
    "PivotTableStyle": {
      "name": "PivotTableStyle",
      "definition": "{\n  styleName?: string;\n  showRowStripes?: boolean;\n  showColumnStripes?: boolean;\n}",
      "docstring": ""
    },
    "PivotTableStyleInfo": {
      "name": "PivotTableStyleInfo",
      "definition": "{\n  name: string;\n  isDefault: boolean;\n}",
      "docstring": "WorkbookPivotTableStyles -- Pivot table style presets and default style management.\n\nProvides access to the workbook-level default pivot table style preset.\nEquivalent API shape: `workbook.pivotTableStyles`."
    },
    "PivotTopBottomFilter": {
      "name": "PivotTopBottomFilter",
      "definition": "{\n  type: TopBottomType;\n  n: number;\n  by: TopBottomBy;\n  valueFieldId?: string;\n}",
      "docstring": ""
    },
    "PivotTupleKey": {
      "name": "PivotTupleKey",
      "definition": "string & { readonly __brand: 'PivotTupleKey' }",
      "docstring": ""
    },
    "PivotValueField": {
      "name": "PivotValueField",
      "definition": "{\n  /** Stable value placement ID once the field is placed. */\n  placementId?: PlacementId;\n  /** Source field name */\n  field: string;\n  /** Aggregation function */\n  aggregation: 'sum' | 'count' | 'average' | 'max' | 'min';\n  /** Custom label for the value field */\n  label?: string;\n}",
      "docstring": "A value field in a pivot table."
    },
    "PivotValueRecord": {
      "name": "PivotValueRecord",
      "definition": "{\n  rowKey: PivotTupleKey;\n  columnKey: PivotTupleKey;\n  measureIndex: number;\n  value: CellValue;\n  sourceRowIndices?: number[];\n}",
      "docstring": ""
    },
    "PlacementId": {
      "name": "PlacementId",
      "definition": "string & { readonly __brand: 'PlacementId' }",
      "docstring": ""
    },
    "Platform": {
      "name": "Platform",
      "definition": "'macos' | 'windows' | 'linux'",
      "docstring": "Supported operating system platforms.\n\nCanonical type for OS identity — used by PlatformIdentity, keyboard shortcut\nresolution, and any code that branches on the host OS."
    },
    "PlotAreaConfig": {
      "name": "PlotAreaConfig",
      "definition": "{\n  fill?: ChartFill;\n  border?: ChartBorder;\n  format?: ChartFormat;\n}",
      "docstring": "Plot area configuration"
    },
    "PointFormat": {
      "name": "PointFormat",
      "definition": "{\n  idx: number;\n  fill?: string;\n  border?: ChartBorder;\n  dataLabel?: DataLabelConfig;\n  visualFormat?: ChartFormat;\n  /** Readonly: computed value at this point (populated by get, ignored on set). */\n  value?: number | string;\n  /** Per-point marker fill color. */\n  markerBackgroundColor?: ChartColor;\n  /** Per-point marker border color. */\n  markerForegroundColor?: ChartColor;\n  /** Per-point marker size (2-72 points). */\n  markerSize?: number;\n  /** Per-point marker style. */\n  markerStyle?: MarkerStyle;\n}",
      "docstring": "Per-point formatting for individual data points (matches PointFormatData wire type)"
    },
    "PolicyId": {
      "name": "PolicyId",
      "definition": "string & { readonly __brand?: 'PolicyId' }",
      "docstring": "Branded policy identifier."
    },
    "PreScriptNode": {
      "name": "PreScriptNode",
      "definition": "{\n  type: 'sPre';\n  /** Subscript */\n  sub: MathNode[];\n  /** Superscript */\n  sup: MathNode[];\n  /** Base */\n  e: MathNode[];\n}",
      "docstring": "Pre-scripts - <m:sPre>\nSubscript and superscript before base"
    },
    "PresetShadowType": {
      "name": "PresetShadowType",
      "definition": "| 'shdw1' // Outer offset diagonal bottom right\n  | 'shdw2' // Outer offset bottom\n  | 'shdw3' // Outer offset diagonal bottom left\n  | 'shdw4' // Outer offset right\n  | 'shdw5' // Outer offset center\n  | 'shdw6' // Outer offset left\n  | 'shdw7' // Outer offset diagonal top right\n  | 'shdw8' // Outer offset top\n  | 'shdw9' // Outer offset diagonal top left\n  | 'shdw10' // Perspective diagonal upper left\n  | 'shdw11' // Perspective diagonal upper right\n  | 'shdw12' // Perspective diagonal lower left\n  | 'shdw13' // Perspective diagonal lower right\n  | 'shdw14' // Perspective below\n  | 'shdw15' // Perspective above\n  | 'shdw16' // Perspective left\n  | 'shdw17' // Perspective right\n  | 'shdw18' // Perspective upper left\n  | 'shdw19' // Perspective upper right\n  | 'shdw20'",
      "docstring": "Preset shadow types (20 predefined shadows).\n\nThese map to DrawingML's preset shadow definitions (shdw1-shdw20).\nEach preset defines a complete shadow configuration including distance,\ndirection, blur, color, and opacity. Use these for consistent, quick\nshadow application rather than configuring OuterShadowEffect manually.\n\nPreset categories:\n- shdw1-shdw4: Outer shadows (basic drop shadows)\n- shdw5-shdw8: Perspective shadows (cast at an angle)\n- shdw9-shdw12: Offset shadows (shifted significantly from text)\n- shdw13-shdw16: Inner shadows (shadow inside text edges)\n- shdw17-shdw20: Special effects (reflection-like, soft shadows)\n\n@see ECMA-376 Part 1, Section 20.1.10.56 (ST_PresetShadowVal)"
    },
    "PrintSettings": {
      "name": "PrintSettings",
      "definition": "{\n  /** OOXML paper size code (1=Letter, 9=A4, etc.), null = not set */\n  paperSize: number | null;\n  /** Page orientation, null = not set (defaults to portrait) */\n  orientation: string | null;\n  /** Scale percentage (10-400), null = not set */\n  scale: number | null;\n  /** Fit to N pages wide, null = not set */\n  fitToWidth: number | null;\n  /** Fit to N pages tall, null = not set */\n  fitToHeight: number | null;\n  /** Print cell gridlines */\n  gridlines: boolean;\n  /** Print row/column headings */\n  headings: boolean;\n  /** Center content horizontally on page */\n  hCentered: boolean;\n  /** Center content vertically on page */\n  vCentered: boolean;\n  /** Page margins in inches (with header/footer margins) */\n  margins: PageMargins | null;\n  /** Header/footer configuration */\n  headerFooter: HeaderFooter | null;\n  /** Print in black and white */\n  blackAndWhite: boolean;\n  /** Draft quality */\n  draft: boolean;\n  /** First page number override, null = auto */\n  firstPageNumber: number | null;\n  /** Page order: \"downThenOver\" or \"overThenDown\", null = default */\n  pageOrder: string | null;\n  /** Use printer defaults */\n  usePrinterDefaults: boolean | null;\n  /** Horizontal DPI, null = not set */\n  horizontalDpi: number | null;\n  /** Vertical DPI, null = not set */\n  verticalDpi: number | null;\n  /** Relationship ID for printer settings binary, null = not set */\n  rId: string | null;\n  /** Whether the sheet had printOptions element in OOXML */\n  hasPrintOptions: boolean;\n  /** Whether the sheet had pageSetup element in OOXML */\n  hasPageSetup: boolean;\n  /** Whether to use firstPageNumber (vs auto) */\n  useFirstPageNumber: boolean;\n  /** How to print cell comments: \"none\" | \"atEnd\" | \"asDisplayed\", null = not set (defaults to none) */\n  printComments: string | null;\n  /** How to print cell errors: \"displayed\" | \"blank\" | \"dash\" | \"NA\", null = not set (defaults to displayed) */\n  printErrors: string | null;\n}",
      "docstring": "Full print settings for a sheet, matching the Rust domain-types canonical type.\n\nReplaces the old lossy SheetPrintSettings. All fields are nullable where the\nunderlying OOXML attribute is optional, using `null` to mean \"not set / use default\".\n\nDistinct from PrintOptions (runtime-only configuration in print-export)."
    },
    "ProtectionConfig": {
      "name": "ProtectionConfig",
      "definition": "{\n  /** Whether the sheet is protected */\n  isProtected: boolean;\n  /** Whether a password is set for protection (does not expose the hash) */\n  hasPasswordSet?: boolean;\n  /** Allow selecting locked cells */\n  allowSelectLockedCells?: boolean;\n  /** Allow selecting unlocked cells */\n  allowSelectUnlockedCells?: boolean;\n  /** Allow formatting cells */\n  allowFormatCells?: boolean;\n  /** Allow formatting columns */\n  allowFormatColumns?: boolean;\n  /** Allow formatting rows */\n  allowFormatRows?: boolean;\n  /** Allow inserting columns */\n  allowInsertColumns?: boolean;\n  /** Allow inserting rows */\n  allowInsertRows?: boolean;\n  /** Allow inserting hyperlinks */\n  allowInsertHyperlinks?: boolean;\n  /** Allow deleting columns */\n  allowDeleteColumns?: boolean;\n  /** Allow deleting rows */\n  allowDeleteRows?: boolean;\n  /** Allow sorting */\n  allowSort?: boolean;\n  /** Allow using auto-filter */\n  allowAutoFilter?: boolean;\n  /** Allow using pivot tables */\n  allowPivotTables?: boolean;\n  /** Allow editing objects such as charts, shapes, and images */\n  allowEditObjects?: boolean;\n  /** Allow editing scenarios */\n  allowEditScenarios?: boolean;\n}",
      "docstring": "Full protection configuration for a sheet."
    },
    "ProtectionOperation": {
      "name": "ProtectionOperation",
      "definition": "| 'insertRows'\n  | 'insertColumns'\n  | 'deleteRows'\n  | 'deleteColumns'\n  | 'formatCells'\n  | 'formatRows'\n  | 'formatColumns'\n  | 'sort'\n  | 'filter'\n  | 'editObject'",
      "docstring": "Valid operations for structural protection checks."
    },
    "ProtectionOptions": {
      "name": "ProtectionOptions",
      "definition": "{\n  /** Allow selecting locked cells */\n  allowSelectLockedCells?: boolean;\n  /** Allow selecting unlocked cells */\n  allowSelectUnlockedCells?: boolean;\n  /** Allow formatting cells */\n  allowFormatCells?: boolean;\n  /** Allow formatting columns */\n  allowFormatColumns?: boolean;\n  /** Allow formatting rows */\n  allowFormatRows?: boolean;\n  /** Allow inserting columns */\n  allowInsertColumns?: boolean;\n  /** Allow inserting rows */\n  allowInsertRows?: boolean;\n  /** Allow inserting hyperlinks */\n  allowInsertHyperlinks?: boolean;\n  /** Allow deleting columns */\n  allowDeleteColumns?: boolean;\n  /** Allow deleting rows */\n  allowDeleteRows?: boolean;\n  /** Allow sorting */\n  allowSort?: boolean;\n  /** Allow using auto-filter */\n  allowAutoFilter?: boolean;\n  /** Allow using pivot tables */\n  allowPivotTables?: boolean;\n  /** Allow editing objects such as charts, shapes, and images */\n  allowEditObjects?: boolean;\n  /** Allow editing scenarios */\n  allowEditScenarios?: boolean;\n}",
      "docstring": "Granular options for sheet protection."
    },
    "RadarSubType": {
      "name": "RadarSubType",
      "definition": "'basic' | 'filled'",
      "docstring": "Radar chart sub-types"
    },
    "RadicalNode": {
      "name": "RadicalNode",
      "definition": "{\n  type: 'rad';\n  /** Hide degree (for square root) */\n  degHide?: boolean;\n  /** Degree (n in n-th root) */\n  deg: MathNode[];\n  /** Radicand (content under root) */\n  e: MathNode[];\n}",
      "docstring": "Radical - <m:rad>\nSquare root or n-th root"
    },
    "RangePixelPosition": {
      "name": "RangePixelPosition",
      "definition": "{\n  /** Pixel offset of the range's top edge from the worksheet origin */\n  top: number;\n  /** Pixel offset of the range's left edge from the worksheet origin */\n  left: number;\n  /** Height of the range in pixels */\n  height: number;\n  /** Width of the range in pixels */\n  width: number;\n}",
      "docstring": "Pixel bounds of a range (top/left offset from worksheet origin, height, width)."
    },
    "RangeValueType": {
      "name": "RangeValueType",
      "isEnum": true,
      "values": {
        "Empty": "'Empty'",
        "String": "'String'",
        "Double": "'Double'",
        "Boolean": "'Boolean'",
        "Error": "'Error'"
      },
      "docstring": "Per-cell value type classification.\nMatches the workbook range value-type enum values."
    },
    "RawCellData": {
      "name": "RawCellData",
      "definition": "{\n  /** The computed cell value */\n  value: CellValue;\n  /** The formula string with \"=\" prefix, if the cell contains a formula */\n  formula?: FormulaA1;\n  /** Cell formatting */\n  format?: CellFormat;\n  /** Cell borders */\n  borders?: CellBorders;\n  /** Cell comment/note text */\n  comment?: string;\n  /** Hyperlink URL */\n  hyperlink?: string;\n  /** Whether the cell is part of a merged region */\n  isMerged?: boolean;\n  /** The merged region this cell belongs to (A1 notation, e.g., \"A1:B2\") */\n  mergedRegion?: string;\n}",
      "docstring": "Complete raw cell data including formula, formatting, and metadata.\n\nUnlike `CellData` from core (which is the minimal read type), `RawCellData`\nincludes all optional cell metadata useful for bulk reads and LLM presentation."
    },
    "RecognitionResult": {
      "name": "RecognitionResult",
      "definition": "RecognizedShape | RecognizedText",
      "docstring": "Union type for all recognition results."
    },
    "RecognizedShape": {
      "name": "RecognizedShape",
      "definition": "{\n  /** Type discriminator */\n  type: 'shape';\n  /** Recognized shape type */\n  shapeType: RecognizedShapeType;\n  /** Shape parameters (position, dimensions, etc.) */\n  params: ShapeParams;\n  /** IDs of the source strokes that were recognized as this shape.\nUsed for:\n- Undo: Can restore original strokes\n- Styling: Shape inherits color/width from source strokes */\n  sourceStrokeIds: StrokeId[];\n  /** Confidence score [0, 1] for the recognition */\n  confidence: number;\n  /** Timestamp when recognition occurred */\n  recognizedAt: number;\n}",
      "docstring": "A shape recognized from one or more ink strokes.\n\nRecognition converts freehand strokes into clean geometric shapes\nwhile preserving the original strokes for undo/redo."
    },
    "RecognizedText": {
      "name": "RecognizedText",
      "definition": "{\n  /** Type discriminator */\n  type: 'text';\n  /** Primary recognized text (highest confidence) */\n  text: string;\n  /** Alternative interpretations ranked by confidence.\nFirst element is same as `text` field. */\n  alternatives: TextAlternative[];\n  /** IDs of the source strokes that were recognized as this text.\nUsed for undo and re-recognition. */\n  sourceStrokeIds: StrokeId[];\n  /** Bounding box for the recognized text */\n  bounds: {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  };\n  /** Timestamp when recognition occurred */\n  recognizedAt: number;\n}",
      "docstring": "Text recognized from handwritten ink strokes.\n\nHandwriting recognition converts ink to text with multiple\nalternative interpretations ranked by confidence."
    },
    "RedoReceipt": {
      "name": "RedoReceipt",
      "definition": "{\n  kind: 'redo';\n  success: boolean;\n}",
      "docstring": "Receipt for a redo operation."
    },
    "ReflectionEffect": {
      "name": "ReflectionEffect",
      "definition": "{\n  /** Blur amount for the reflection */\n  blur: number;\n  /** Distance from the shape to the reflection */\n  distance: number;\n  /** Opacity of the reflection (0 = transparent, 1 = opaque) */\n  opacity: number;\n  /** Size of the reflection relative to the shape (0-1) */\n  size: number;\n}",
      "docstring": "Reflection effect configuration."
    },
    "RegionBounds": {
      "name": "RegionBounds",
      "definition": "{\n  rows: number;\n  cols: number;\n}",
      "docstring": "Region rectangle dimensions in cells. Together with `anchorRow` /\n`anchorCol` describes the full region rectangle."
    },
    "RegionKind": {
      "name": "RegionKind",
      "definition": "'arraySpill' | 'cseArray' | 'dataTable'",
      "docstring": "Region kind discriminant — string union matching Rust's\n`serde(rename_all = \"camelCase\")` serialization of `enum RegionKind`.\n\n- `arraySpill` — modern dynamic-array spill (e.g. `=SEQUENCE(5)`).\n  The formula bar does NOT brace-wrap members.\n- `cseArray` — legacy Ctrl+Shift+Enter array formula. Formula bar\n  brace-wraps (`{=…}`).\n- `dataTable` — XLSX `<f t=\"dataTable\">`. Formula bar brace-wraps\n  (`{=TABLE(…)}`).\n\nMirrors `kernel/src/bridges/compute/types.ts::RegionKind` and Rust's\n`snapshot_types::properties::RegionKind`. Re-exported from the bridge\nto keep the wire types in one place."
    },
    "RegionMapConfig": {
      "name": "RegionMapConfig",
      "definition": "{\n  /** Geographic region scope */\n  region?: 'world' | 'us' | 'europe' | 'asia' | 'africa' | 'oceania' | 'southAmerica';\n  /** Color scale for region fills */\n  colorScale?: string[];\n  /** Show region labels */\n  showLabels?: boolean;\n  /** Projection type */\n  projection?: 'mercator' | 'equalEarth' | 'naturalEarth';\n}",
      "docstring": "Region map chart configuration"
    },
    "RegionMeta": {
      "name": "RegionMeta",
      "definition": "{\n  kind: RegionKind;\n  isAnchor: boolean;\n  anchorRow: number;\n  anchorCol: number;\n  bounds: RegionBounds;\n}",
      "docstring": "Region membership shape carried on `StoreCellData.region`.\n\n`isAnchor` distinguishes the formula-owning cell (CSE anchor / Data\nTable master) from members. **No `source` field** — formula text lives\non `StoreCellData.formula`; brace policy is a per-`kind` switch."
    },
    "RemoveDuplicatesResult": {
      "name": "RemoveDuplicatesResult",
      "definition": "{\n  /** Number of duplicate rows removed */\n  removedCount: number;\n  /** Number of unique rows remaining */\n  remainingCount: number;\n}",
      "docstring": "Result of a remove-duplicates operation."
    },
    "RenderScheduler": {
      "name": "RenderScheduler",
      "definition": "{\n  /** Cell value or format changed — mark cells layer dirty. */\n  markCellsDirty(cells?: { row: number; col: number }[]): void;;\n  /** Row/col dimensions changed — mark cells + headers + selection dirty. */\n  markGeometryDirty(): void;;\n  /** Full buffer swap or theme change — mark all layers dirty. */\n  markAllDirty(): void;;\n}",
      "docstring": "Scheduler that bridges buffer writes to canvas layer invalidation.\n\nImplements the \"Write = Invalidate\" contract: when viewport buffers\nreceive patches, they call these methods to mark the appropriate canvas\nlayers dirty and wake the render loop.\n\nThis is a contracts-level mirror of the canvas-engine RenderScheduler\nso that contracts does not depend on @mog/canvas-engine at runtime."
    },
    "ResolvedCellFormat": {
      "name": "ResolvedCellFormat",
      "definition": "{\n  [K in keyof CellFormat]-?: CellFormat[K] | null;\n}",
      "docstring": "Dense cell format where every property is explicitly present (null when unset). Returned by formats.get()."
    },
    "RetargetWorkbookLinkInput": {
      "name": "RetargetWorkbookLinkInput",
      "definition": "{\n  target: PersistedLinkTarget;\n  expectedWorkbookId?: WorkbookId | null;\n  displayName?: string;\n  sourceKind?: WorkbookLinkSourceKind;\n  materializedCacheMetadata?: AuthorizedMaterializedCacheMetadata;\n}",
      "docstring": ""
    },
    "RichTextRun": {
      "name": "RichTextRun",
      "definition": "{\n  text: string;\n  fontName: string | null;\n  fontSize: number | null;\n  bold: boolean;\n  italic: boolean;\n  underline: boolean;\n  strikethrough: boolean;\n  color: string | null;\n  colorIndexed?: number;\n  colorTheme?: number;\n  colorTint?: number;\n  charset: number | null;\n  family: number | null;\n  scheme: string | null;\n  vertAlign?: string;\n  preserveSpace?: boolean;\n}",
      "docstring": ""
    },
    "Scenario": {
      "name": "Scenario",
      "definition": "{\n  /** Unique scenario ID */\n  id: string;\n  /** Creation timestamp (Unix ms) */\n  createdAt: number;\n}",
      "docstring": "A saved scenario with metadata."
    },
    "ScenarioConfig": {
      "name": "ScenarioConfig",
      "definition": "{\n  /** Scenario name */\n  name: string;\n  /** Cell addresses that change (A1 notation) */\n  changingCells: string[];\n  /** Values for the changing cells, in the same order */\n  values: (string | number | boolean | null)[];\n  /** Optional description */\n  comment?: string;\n}",
      "docstring": "Configuration for creating a what-if scenario."
    },
    "Schema": {
      "name": "Schema",
      "definition": "Record<string, FieldDef>",
      "docstring": "A schema is a record of field names to their definitions.\nThis is the single source of truth for a Yjs structure's shape.\n\nExample:\n```typescript\nconst SHEET_MAPS_SCHEMA = {\n  meta: { type: 'Y.Map', required: true, copy: 'deep', lazyInit: false },\n  cells: { type: 'Y.Map', valueType: 'SerializedCellData', required: true, copy: 'deep', lazyInit: false },\n  // ... etc\n} as const satisfies Schema;\n```"
    },
    "ScreenshotOptions": {
      "name": "ScreenshotOptions",
      "definition": "{\n  /** Device pixel ratio (1 = standard, 2 = Retina). Default: 1. */\n  dpr?: number;\n  /** Whether to render row/column headers. Default: true. */\n  showHeaders?: boolean;\n  /** Whether to render gridlines. Default: true. */\n  showGridlines?: boolean;\n  /** Maximum pixel width — scales down if exceeded. */\n  maxWidth?: number;\n  /** Maximum pixel height — scales down if exceeded. */\n  maxHeight?: number;\n}",
      "docstring": "Options for capturing a sheet screenshot as a PNG image."
    },
    "ScrollPosition": {
      "name": "ScrollPosition",
      "definition": "{\n  /** Top visible row index (0-based). */\n  topRow: number;\n  /** Left visible column index (0-based). */\n  leftCol: number;\n}",
      "docstring": "Scroll position (cell-level, not pixel-level)."
    },
    "SearchOptions": {
      "name": "SearchOptions",
      "definition": "{\n  /** Whether the search is case-sensitive */\n  matchCase?: boolean;\n  /** Whether to match the entire cell value */\n  entireCell?: boolean;\n  /** Whether to search formula text instead of computed values */\n  searchFormulas?: boolean;\n  /** Limit search to this range (A1 notation). Used by regexSearch; ignored by findInRange (use its range parameter instead). */\n  range?: string;\n}",
      "docstring": "Options for cell search operations."
    },
    "SearchResult": {
      "name": "SearchResult",
      "definition": "{\n  /** Cell address in A1 notation */\n  address: string;\n  /** The cell's display value */\n  value: string;\n  /** The cell's formula (if any) */\n  formula?: string;\n}",
      "docstring": "A single search result."
    },
    "SerializedCellData": {
      "name": "SerializedCellData",
      "definition": "{\n  /** Stable cell identity */\n  id: CellId;\n  /** Row position */\n  row: number;\n  /** Column position */\n  col: number;\n  /** Raw value (CellRawValue).\nCan be a primitive (string, number, boolean, null) or RichText array.\nRich text is only valid for literal values, not formula results.\nUse isRichText() from @mog-sdk/contracts to discriminate.\nUse rawToCellValue() to convert to CellValue when needed. */\n  r: CellRawValue;\n  /** A1-style formula string without '=' prefix (backward compatible) */\n  f?: string;\n  /** Parsed identity formula */\n  idf?: IdentityFormula;\n  /** Computed value (omit if same as raw) */\n  c?: CellValue;\n  /** Note (omit if empty) */\n  n?: string;\n  /** Hyperlink URL (omit if none) */\n  h?: string;\n  /** For spill anchor cells: the dimensions of the spill range.\n{ rows, cols } where rows >= 1 and cols >= 1.\nOnly present on the cell containing the array formula. */\n  spillRange?: { rows: number; cols: number };\n  /** For spill member cells: CellId of the anchor cell containing the formula.\nPoints back to the cell that owns this spill range.\nUsed for:\n- Determining if editing this cell should be blocked\n- Finding the formula when clicking a spill cell\n- Clearing old spill when anchor formula result changes size */\n  spillAnchor?: CellId;\n  /** True if this is a legacy CSE (Ctrl+Shift+Enter) array formula.\nCSE formulas have fixed size and show {=formula} in the formula bar.\nOnly present on anchor cells when isCSE is true. */\n  isCSE?: boolean;\n}",
      "docstring": "Serialized cell data for Yjs storage.\nUses short keys for compact CRDT storage.\n\nNOTE: The DiffCellData type (previously in contracts/src/versioning.ts)\nwas removed when the versioning package was deleted."
    },
    "SeriesConfig": {
      "name": "SeriesConfig",
      "definition": "{\n  name?: string;\n  type?: string;\n  color?: string;\n  values?: string;\n  categories?: string;\n  bubbleSize?: string;\n  smooth?: boolean;\n  explosion?: number;\n  invertIfNegative?: boolean;\n  yAxisIndex?: number;\n  showMarkers?: boolean;\n  markerSize?: number;\n  markerStyle?: string;\n  lineWidth?: number;\n  points?: PointFormat[];\n  dataLabels?: DataLabelConfig;\n  trendlines?: TrendlineConfig[];\n  errorBars?: ErrorBarConfig;\n  xErrorBars?: ErrorBarConfig;\n  yErrorBars?: ErrorBarConfig;\n  idx?: number;\n  order?: number;\n  format?: ChartFormat;\n  barShape?: string;\n  /** Color to use when a data point is inverted (negative) */\n  invertColor?: ChartColor;\n  /** Marker fill color. */\n  markerBackgroundColor?: ChartColor;\n  /** Marker border color. */\n  markerForegroundColor?: ChartColor;\n  /** Whether this series is hidden/filtered from the chart. */\n  filtered?: boolean;\n  /** Show drop shadow on series. */\n  showShadow?: boolean;\n  /** Show connector lines between pie slices (bar-of-pie, pie-of-pie). */\n  showConnectorLines?: boolean;\n  /** Gap width between bars/columns as percentage (per-series override) */\n  gapWidth?: number;\n  /** Overlap between bars/columns (-100 to 100, per-series override) */\n  overlap?: number;\n  /** Hole size for doughnut charts as percentage (per-series override) */\n  doughnutHoleSize?: number;\n  /** First slice angle for pie/doughnut charts in degrees (per-series override) */\n  firstSliceAngle?: number;\n  /** Split type for of-pie charts (per-series override) */\n  splitType?: string;\n  /** Split value threshold for of-pie charts (per-series override) */\n  splitValue?: number;\n  /** Bubble scale as percentage (per-series override) */\n  bubbleScale?: number;\n  leaderLineFormat?: ChartFormat;\n  showLeaderLines?: boolean;\n  /** Per-series histogram bin options (overrides chart-level histogram config) */\n  binOptions?: HistogramConfig;\n  /** Per-series box/whisker options (overrides chart-level boxplot config) */\n  boxwhiskerOptions?: BoxplotConfig;\n  /** @deprecated Use trendlines[] instead */\n  trendline?: TrendlineConfig;\n}",
      "docstring": "Individual series configuration (matches ChartSeriesData wire type)"
    },
    "SeriesOrientation": {
      "name": "SeriesOrientation",
      "definition": "'rows' | 'columns'",
      "docstring": "Data series orientation"
    },
    "SetCellsResult": {
      "name": "SetCellsResult",
      "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}",
      "docstring": "Result of a bulk setCells() operation."
    },
    "ShadowAlignment": {
      "name": "ShadowAlignment",
      "definition": "| 'tl' // Top-left\n  | 't' // Top-center\n  | 'tr' // Top-right\n  | 'l' // Middle-left\n  | 'ctr' // Center\n  | 'r' // Middle-right\n  | 'bl' // Bottom-left\n  | 'b' // Bottom-center\n  | 'br'",
      "docstring": "Shadow alignment options.\n\nSpecifies the alignment of the shadow relative to the text.\nThe shadow is positioned based on this anchor point.\n\n@see ECMA-376 Part 1, Section 20.1.10.3 (ST_RectAlignment)"
    },
    "ShadowEffect": {
      "name": "ShadowEffect",
      "definition": "{\n  /** Shadow color (CSS color string) */\n  color: string;\n  /** Blur radius in pixels */\n  blur: number;\n  /** Horizontal offset in pixels */\n  offsetX: number;\n  /** Vertical offset in pixels */\n  offsetY: number;\n  /** Opacity (0 = transparent, 1 = opaque) */\n  opacity: number;\n}",
      "docstring": "Drop shadow effect configuration."
    },
    "Shape": {
      "name": "Shape",
      "definition": "{\n  /** Unique shape ID */\n  id: string;\n  /** Sheet ID the shape belongs to */\n  sheetId: string;\n  /** Z-order within the sheet */\n  zIndex: number;\n  /** Creation timestamp (Unix ms) */\n  createdAt?: number;\n  /** Last update timestamp (Unix ms) */\n  updatedAt?: number;\n}",
      "docstring": "Shape as returned by get/list operations.\n\nExtends ShapeConfig with identity and metadata fields.\nSame pattern as Chart extends ChartConfig."
    },
    "ShapeConfig": {
      "name": "ShapeConfig",
      "definition": "{\n  /** Shape type (rect, ellipse, triangle, etc.) */\n  type: ShapeType;\n  /** Anchor row (0-based) */\n  anchorRow: number;\n  /** Anchor column (0-based) */\n  anchorCol: number;\n  /** X offset from anchor cell in pixels */\n  xOffset?: number;\n  /** Y offset from anchor cell in pixels */\n  yOffset?: number;\n  /** Width in pixels */\n  width: number;\n  /** Height in pixels */\n  height: number;\n  /** Absolute pixel X on the sheet. When set, Rust resolves to anchorCol + xOffset. */\n  pixelX?: number;\n  /** Absolute pixel Y on the sheet. When set, Rust resolves to anchorRow + yOffset. */\n  pixelY?: number;\n  /** Optional name for the shape */\n  name?: string;\n  /** Fill configuration (solid, gradient with stops/angle, or none) */\n  fill?: ObjectFill;\n  /** Outline/stroke configuration (with optional arrowheads) */\n  outline?: ShapeOutline;\n  /** Rich text content inside the shape (with CellFormat) */\n  text?: ShapeText;\n  /** Shadow effect */\n  shadow?: OuterShadowEffect;\n  /** Rotation angle in degrees (0-360) */\n  rotation?: number;\n  /** Whether the shape is locked */\n  locked?: boolean;\n  /** Shape-specific adjustments (e.g., cornerRadius for roundRect) */\n  adjustments?: Record<string, number>;\n  /** Whether the shape is visible (default: true). */\n  visible?: boolean;\n  /** Anchor mode: how the shape anchors to cells (twoCell/oneCell/absolute). */\n  anchorMode?: ObjectAnchorType;\n  /** Whether to preserve aspect ratio when resizing */\n  lockAspectRatio?: boolean;\n  /** Accessibility title for the shape (distinct from alt text description) */\n  altTextTitle?: string;\n  /** User-visible display name (may differ from internal name) */\n  displayName?: string;\n}",
      "docstring": "Shape configuration for creating/updating shapes.\n\nUses simple integer positions (anchorRow/anchorCol) for the public API.\nInternal storage uses CellId-based ObjectPosition.\nPreserves full fidelity: gradient fills, arrowhead outlines, rich text."
    },
    "ShapeEffects": {
      "name": "ShapeEffects",
      "definition": "{\n  /** Drop shadow effect */\n  shadow?: ShadowEffect;\n  /** Glow effect around the shape */\n  glow?: GlowEffect;\n  /** Reflection effect below the shape */\n  reflection?: ReflectionEffect;\n  /** 3D bevel effect */\n  bevel?: BevelEffect;\n  /** 3D transformation effect */\n  transform3D?: Transform3DEffect;\n}",
      "docstring": "Visual effects that can be applied to shapes."
    },
    "ShapeHandle": {
      "name": "ShapeHandle",
      "definition": "{\n  shapeType: ShapeType;\n  update(props: Partial<ShapeConfig>): Promise<FloatingObjectMutationReceipt>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<ShapeHandle>;;\n  getData(): Promise<ShapeObject>;;\n}",
      "docstring": ""
    },
    "ShapeObject": {
      "name": "ShapeObject",
      "definition": "{\n  type: 'shape';\n  /** Type of shape to render */\n  shapeType: ShapeType;\n  /** Fill configuration */\n  fill?: ObjectFill;\n  /** Outline/stroke configuration */\n  outline?: ShapeOutline;\n  /** Text content inside the shape */\n  text?: ShapeText;\n  /** Shadow effect (outer shadow / drop shadow) */\n  shadow?: OuterShadowEffect;\n  /** Shape-specific adjustments.\nKeys depend on shape type (e.g., 'cornerRadius' for roundRect,\n'arrowHeadSize' for arrows, 'starPoints' for stars). */\n  adjustments?: Record<string, number>;\n}",
      "docstring": "Shape floating object.\nA geometric shape with optional fill, outline, and text."
    },
    "ShapeOutline": {
      "name": "ShapeOutline",
      "definition": "{\n  /** Outline style */\n  style: 'none' | 'solid' | 'dashed' | 'dotted';\n  /** Outline color (CSS color string) */\n  color: string;\n  /** Outline width in pixels */\n  width: number;\n  /** Head (start) arrowhead configuration */\n  headEnd?: { type: LineEndType; width?: LineEndSize; length?: LineEndSize };\n  /** Tail (end) arrowhead configuration */\n  tailEnd?: { type: LineEndType; width?: LineEndSize; length?: LineEndSize };\n  /** Detailed dash pattern (overrides coarse `style` when set). Matches OOXML dash styles. */\n  dash?: LineDash;\n  /** Outline transparency (0 = opaque, 1 = fully transparent). */\n  transparency?: number;\n  /** Compound line style (e.g., double, thickThin). */\n  compound?: CompoundLineStyle;\n  /** Whether the outline is visible. */\n  visible?: boolean;\n}",
      "docstring": "Shape outline/stroke configuration."
    },
    "ShapeText": {
      "name": "ShapeText",
      "definition": "{\n  /** Text content */\n  content: string;\n  /** Text formatting */\n  format?: CellFormat;\n  /** Rich text runs for per-run formatting. When present, authoritative over content+format. */\n  runs?: TextRun[];\n  /** Vertical alignment of text within shape */\n  verticalAlign?: 'top' | 'middle' | 'bottom' | 'justified' | 'distributed';\n  /** Horizontal alignment of text within shape */\n  horizontalAlign?: 'left' | 'center' | 'right' | 'justify' | 'distributed';\n  /** Text margins within the container */\n  margins?: TextMargins;\n  /** Auto-size behavior */\n  autoSize?: TextAutoSize;\n  /** Text orientation */\n  orientation?: TextOrientation;\n  /** Reading order / directionality */\n  readingOrder?: TextReadingOrder;\n  /** Horizontal overflow behavior */\n  horizontalOverflow?: TextOverflow;\n  /** Vertical overflow behavior */\n  verticalOverflow?: TextOverflow;\n}",
      "docstring": ""
    },
    "ShapeType": {
      "name": "ShapeType",
      "definition": "| 'rect'\n  | 'roundRect'\n  | 'ellipse'\n  | 'triangle'\n  | 'rtTriangle'\n  | 'diamond'\n  | 'pentagon'\n  | 'hexagon'\n  | 'octagon'\n  | 'parallelogram'\n  | 'trapezoid'\n  | 'nonIsoscelesTrapezoid'\n  | 'heptagon'\n  | 'decagon'\n  | 'dodecagon'\n  | 'teardrop'\n  | 'pie'\n  | 'pieWedge'\n  | 'blockArc'\n  | 'donut'\n  | 'noSmoking'\n  | 'plaque'\n  // Rectangle variants (rounded/snipped)\n  | 'round1Rect'\n  | 'round2SameRect'\n  | 'round2DiagRect'\n  | 'snip1Rect'\n  | 'snip2SameRect'\n  | 'snip2DiagRect'\n  | 'snipRoundRect'\n  // Arrows\n  | 'rightArrow'\n  | 'leftArrow'\n  | 'upArrow'\n  | 'downArrow'\n  | 'leftRightArrow'\n  | 'upDownArrow'\n  | 'quadArrow'\n  | 'chevron'\n  // Arrow Callouts\n  | 'leftArrowCallout'\n  | 'rightArrowCallout'\n  | 'upArrowCallout'\n  | 'downArrowCallout'\n  | 'leftRightArrowCallout'\n  | 'upDownArrowCallout'\n  | 'quadArrowCallout'\n  // Curved/Special Arrows\n  | 'bentArrow'\n  | 'uturnArrow'\n  | 'circularArrow'\n  | 'leftCircularArrow'\n  | 'leftRightCircularArrow'\n  | 'curvedRightArrow'\n  | 'curvedLeftArrow'\n  | 'curvedUpArrow'\n  | 'curvedDownArrow'\n  | 'swooshArrow'\n  // Stars and banners\n  | 'star4'\n  | 'star5'\n  | 'star6'\n  | 'star7'\n  | 'star8'\n  | 'star10'\n  | 'star12'\n  | 'star16'\n  | 'star24'\n  | 'star32'\n  | 'ribbon'\n  | 'ribbon2'\n  | 'ellipseRibbon'\n  | 'ellipseRibbon2'\n  | 'leftRightRibbon'\n  | 'banner'\n  // Callouts\n  | 'wedgeRectCallout'\n  | 'wedgeRoundRectCallout'\n  | 'wedgeEllipseCallout'\n  | 'cloud'\n  | 'callout1'\n  | 'callout2'\n  | 'callout3'\n  | 'borderCallout1'\n  | 'borderCallout2'\n  | 'borderCallout3'\n  | 'accentCallout1'\n  | 'accentCallout2'\n  | 'accentCallout3'\n  | 'accentBorderCallout1'\n  | 'accentBorderCallout2'\n  | 'accentBorderCallout3'\n  // Lines and connectors\n  | 'line'\n  | 'lineArrow'\n  | 'lineDoubleArrow'\n  | 'curve'\n  | 'arc'\n  | 'connector'\n  | 'bentConnector2'\n  | 'bentConnector3'\n  | 'bentConnector4'\n  | 'bentConnector5'\n  | 'curvedConnector2'\n  | 'curvedConnector3'\n  | 'curvedConnector4'\n  | 'curvedConnector5'\n  // Flowchart shapes\n  | 'flowChartProcess'\n  | 'flowChartDecision'\n  | 'flowChartInputOutput'\n  | 'flowChartPredefinedProcess'\n  | 'flowChartInternalStorage'\n  | 'flowChartDocument'\n  | 'flowChartMultidocument'\n  | 'flowChartTerminator'\n  | 'flowChartPreparation'\n  | 'flowChartManualInput'\n  | 'flowChartManualOperation'\n  | 'flowChartConnector'\n  | 'flowChartPunchedCard'\n  | 'flowChartPunchedTape'\n  | 'flowChartSummingJunction'\n  | 'flowChartOr'\n  | 'flowChartCollate'\n  | 'flowChartSort'\n  | 'flowChartExtract'\n  | 'flowChartMerge'\n  | 'flowChartOfflineStorage'\n  | 'flowChartOnlineStorage'\n  | 'flowChartMagneticTape'\n  | 'flowChartMagneticDisk'\n  | 'flowChartMagneticDrum'\n  | 'flowChartDisplay'\n  | 'flowChartDelay'\n  | 'flowChartAlternateProcess'\n  | 'flowChartOffpageConnector'\n  // Decorative symbols\n  | 'heart'\n  | 'lightningBolt'\n  | 'sun'\n  | 'moon'\n  | 'smileyFace'\n  | 'foldedCorner'\n  | 'bevel'\n  | 'frame'\n  | 'halfFrame'\n  | 'corner'\n  | 'diagStripe'\n  | 'chord'\n  | 'can'\n  | 'cube'\n  | 'plus'\n  | 'cross'\n  | 'irregularSeal1'\n  | 'irregularSeal2'\n  | 'homePlate'\n  | 'funnel'\n  | 'verticalScroll'\n  | 'horizontalScroll'\n  // Action Buttons\n  | 'actionButtonBlank'\n  | 'actionButtonHome'\n  | 'actionButtonHelp'\n  | 'actionButtonInformation'\n  | 'actionButtonForwardNext'\n  | 'actionButtonBackPrevious'\n  | 'actionButtonEnd'\n  | 'actionButtonBeginning'\n  | 'actionButtonReturn'\n  | 'actionButtonDocument'\n  | 'actionButtonSound'\n  | 'actionButtonMovie'\n  // Brackets and Braces\n  | 'leftBracket'\n  | 'rightBracket'\n  | 'leftBrace'\n  | 'rightBrace'\n  | 'bracketPair'\n  | 'bracePair'\n  // Math shapes\n  | 'mathPlus'\n  | 'mathMinus'\n  | 'mathMultiply'\n  | 'mathDivide'\n  | 'mathEqual'\n  | 'mathNotEqual'\n  // Miscellaneous\n  | 'gear6'\n  | 'gear9'\n  | 'cornerTabs'\n  | 'squareTabs'\n  | 'plaqueTabs'\n  | 'chartX'\n  | 'chartStar'\n  | 'chartPlus'",
      "docstring": "Available shape types.\nMatches common common spreadsheet shape categories.\n\nExtracted here (rather than in `floating-objects.ts`) so that diagram\nand other subtype modules can reference a subset without creating a\ncycle back into `floating-objects.ts`."
    },
    "Sheet": {
      "name": "Sheet",
      "definition": "{\n  /** Array of floating objects on the sheet (deserialized from Y.Map) */\n  floatingObjects?: FloatingObject[];\n}",
      "docstring": "Minimal Sheet interface for selector functions.\n\nThis represents the deserialized view of sheet data used by selectors.\nThe floatingObjects array is the deserialized form of the Y.Map storage."
    },
    "SheetDataBindingInfo": {
      "name": "SheetDataBindingInfo",
      "definition": "{\n  /** Unique binding identifier */\n  id: string;\n  /** Connection providing the data */\n  connectionId: string;\n  /** Maps data fields to columns */\n  columnMappings: ColumnMapping[];\n  /** Auto-insert/delete rows to match data length */\n  autoGenerateRows: boolean;\n  /** Row index for headers (-1 = no header row) */\n  headerRow: number;\n  /** First row of data (0-indexed) */\n  dataStartRow: number;\n  /** Preserve header row formatting on refresh */\n  preserveHeaderFormatting: boolean;\n  /** Last refresh timestamp */\n  lastRefresh?: number;\n}",
      "docstring": "Information about an existing sheet data binding."
    },
    "SheetHideReceipt": {
      "name": "SheetHideReceipt",
      "definition": "{\n  kind: 'sheetHide';\n  name: string;\n}",
      "docstring": "Receipt for a sheet hide mutation."
    },
    "SheetId": {
      "name": "SheetId",
      "definition": "string & { readonly [__sheetId]: true }",
      "docstring": ""
    },
    "SheetMoveReceipt": {
      "name": "SheetMoveReceipt",
      "definition": "{\n  kind: 'sheetMove';\n  name: string;\n  newIndex: number;\n}",
      "docstring": "Receipt for a sheet move mutation."
    },
    "SheetRange": {
      "name": "SheetRange",
      "definition": "{\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n}",
      "docstring": ""
    },
    "SheetRangeDescribeResult": {
      "name": "SheetRangeDescribeResult",
      "definition": "{\n  /** Sheet name (as resolved). */\n  sheet: string;\n  /** The range that was actually read. */\n  range: string;\n  /** The LLM-formatted description (same format as ws.describeRange). Empty string if error. */\n  description: string;\n  /** Set if this entry failed (bad sheet name, empty sheet, etc.). */\n  error?: string;\n}",
      "docstring": "Result entry for one sheet range in a batch read."
    },
    "SheetRangeRequest": {
      "name": "SheetRangeRequest",
      "definition": "{\n  /** Sheet name (case-insensitive lookup). */\n  sheet: string;\n  /** A1-style range, e.g. \"A1:M50\". If omitted, reads used range. */\n  range?: string;\n}",
      "docstring": "A request for a range read on a specific sheet (used by wb.describeRanges)."
    },
    "SheetRemoveReceipt": {
      "name": "SheetRemoveReceipt",
      "definition": "{\n  kind: 'sheetRemove';\n  removedName: string;\n  remainingCount: number;\n}",
      "docstring": "Receipt for a sheet remove mutation."
    },
    "SheetRenameReceipt": {
      "name": "SheetRenameReceipt",
      "definition": "{\n  kind: 'sheetRename';\n  oldName: string;\n  newName: string;\n}",
      "docstring": "Receipt for a sheet rename mutation."
    },
    "SheetSettingsInfo": {
      "name": "SheetSettingsInfo",
      "definition": "{\n  /** Default row height in pixels */\n  defaultRowHeight: number;\n  /** Default column width in pixels */\n  defaultColWidth: number;\n  /** Whether gridlines are shown */\n  showGridlines: boolean;\n  /** Whether row headers are shown */\n  showRowHeaders: boolean;\n  /** Whether column headers are shown */\n  showColumnHeaders: boolean;\n  /** Whether zero values are displayed (false = blank) */\n  showZeroValues: boolean;\n  /** Gridline color (hex string) */\n  gridlineColor: string;\n  /** Whether the sheet is protected */\n  isProtected: boolean;\n  /** Whether the sheet uses right-to-left layout */\n  rightToLeft: boolean;\n}",
      "docstring": "Full sheet settings (mirrors SheetSettings from core contracts)."
    },
    "SheetShowReceipt": {
      "name": "SheetShowReceipt",
      "definition": "{\n  kind: 'sheetShow';\n  name: string;\n}",
      "docstring": "Receipt for a sheet show mutation."
    },
    "SheetSnapshot": {
      "name": "SheetSnapshot",
      "definition": "{\n  /** Sheet ID */\n  id: string;\n  /** Sheet name */\n  name: string;\n  /** Sheet index (0-based) */\n  index: number;\n  /** Range containing all non-empty cells, or null if sheet is empty */\n  usedRange: CellRange | null;\n  /** Number of cells with data */\n  cellCount: number;\n  /** Number of cells with formulas */\n  formulaCount: number;\n  /** Number of charts in this sheet */\n  chartCount: number;\n  /** Sheet dimensions */\n  dimensions: { rows: number; cols: number };\n}",
      "docstring": "A summary snapshot of a single sheet."
    },
    "ShowValuesAs": {
      "name": "ShowValuesAs",
      "definition": "'noCalculation' | 'percentOfGrandTotal' | 'percentOfColumnTotal' | 'percentOfRowTotal' | 'percentOfParentRowTotal' | 'percentOfParentColumnTotal' | 'difference' | 'percentDifference' | 'runningTotal' | 'percentRunningTotal' | 'rankAscending' | 'rankDescending' | 'index'",
      "docstring": ""
    },
    "ShowValuesAsConfig": {
      "name": "ShowValuesAsConfig",
      "definition": "{\n  type: ShowValuesAs;\n  baseField?: string;\n  baseItem?: { type: 'relative'; position: 'previous' | 'next' } | { type: 'specific'; value: CellValue };\n}",
      "docstring": ""
    },
    "SignAnomaly": {
      "name": "SignAnomaly",
      "definition": "{\n  /** A1 address of the anomalous cell. */\n  cell: string;\n  /** The cell's computed numeric value. */\n  value: number;\n  /** Fraction of neighbors with the opposite sign (0.0–1.0).\n1.0 = every neighbor disagrees. Sorted descending. */\n  disagreement: number;\n  /** The neighboring cells that were considered. */\n  neighbors: { cell: string; value: number }[];\n}",
      "docstring": "A single cell whose sign disagrees with its neighbors."
    },
    "SignCheckOptions": {
      "name": "SignCheckOptions",
      "definition": "{\n  /** Which axis to check sign consistency along.\n- `'column'`: compare cells vertically within each column (default).\n- `'row'`: compare cells horizontally within each row.\n- `'both'`: run both checks, merge results. */\n  axis?: 'column' | 'row' | 'both';\n  /** How many non-empty numeric neighbors to consider in each direction.\nDefault: 3 (up to 6 neighbors total per axis). */\n  window?: number;\n}",
      "docstring": "Options for sign anomaly detection."
    },
    "SignCheckResult": {
      "name": "SignCheckResult",
      "definition": "{\n  /** Total non-zero numeric cells examined. */\n  cellsChecked: number;\n  /** Cells whose sign disagrees with the majority of their neighbors. */\n  anomalies: SignAnomaly[];\n}",
      "docstring": "Result of a signCheck call."
    },
    "SingleAxisConfig": {
      "name": "SingleAxisConfig",
      "definition": "{\n  title?: string;\n  visible: boolean;\n  min?: number;\n  max?: number;\n  axisType?: string;\n  gridLines?: boolean;\n  minorGridLines?: boolean;\n  majorUnit?: number;\n  minorUnit?: number;\n  tickMarks?: string;\n  minorTickMarks?: string;\n  numberFormat?: string;\n  reverse?: boolean;\n  position?: string;\n  logBase?: number;\n  displayUnit?: string;\n  format?: ChartFormat;\n  titleFormat?: ChartFormat;\n  gridlineFormat?: ChartLineFormat;\n  minorGridlineFormat?: ChartLineFormat;\n  crossBetween?: string;\n  tickLabelPosition?: string;\n  baseTimeUnit?: string;\n  majorTimeUnit?: string;\n  minorTimeUnit?: string;\n  customDisplayUnit?: number;\n  displayUnitLabel?: string;\n  labelAlignment?: string;\n  labelOffset?: number;\n  noMultiLevelLabels?: boolean;\n  /** Scale type: linear or logarithmic */\n  scaleType?: 'linear' | 'logarithmic';\n  /** Category axis type */\n  categoryType?: 'automatic' | 'textAxis' | 'dateAxis';\n  /** Where the axis crosses */\n  crossesAt?: 'automatic' | 'max' | 'min' | 'custom';\n  /** Custom crossing value when crossesAt is 'custom' */\n  crossesAtValue?: number;\n  /** Whether the axis title is visible (separate from title text content). */\n  titleVisible?: boolean;\n  /** Interval between tick labels (e.g., 1 = every label, 2 = every other). */\n  tickLabelSpacing?: number;\n  /** Interval between tick marks. */\n  tickMarkSpacing?: number;\n  /** Whether the number format is linked to the source data cell format. */\n  linkNumberFormat?: boolean;\n  /** Whether tick marks are between categories (true) or on categories (false) */\n  isBetweenCategories?: boolean;\n  /** Text orientation angle in degrees (-90 to 90) */\n  textOrientation?: number;\n  /** Label alignment (alias for labelAlignment) */\n  alignment?: string;\n  /** @deprecated Alias for axisType — kept for backward compat with charts package */\n  type?: AxisType;\n  /** @deprecated Alias for visible — kept for backward compat with charts package */\n  show?: boolean;\n}",
      "docstring": "Single axis configuration (matches SingleAxisData wire type)."
    },
    "Size": {
      "name": "Size",
      "definition": "{\n  width: number;\n  height: number;\n}",
      "docstring": "A 2D size (width and height)."
    },
    "Slicer": {
      "name": "Slicer",
      "definition": "{\n  /** Currently selected filter items */\n  selectedItems: CellValue[];\n  /** Position and dimensions in pixels */\n  position: { x: number; y: number; width: number; height: number };\n}",
      "docstring": "Full slicer state including selection and position."
    },
    "SlicerConfig": {
      "name": "SlicerConfig",
      "definition": "{\n  /** Slicer ID (generated if omitted) */\n  id?: string;\n  /** Sheet ID the slicer belongs to */\n  sheetId?: string;\n  /** Name of the table to connect the slicer to */\n  tableName?: string;\n  /** Column name within the table to filter on */\n  columnName?: string;\n  /** Display name for the slicer (auto-generated if omitted) */\n  name?: string;\n  /** Position and dimensions in pixels */\n  position?: { x: number; y: number; width: number; height: number };\n  /** Data source connection (rich alternative to tableName/columnName) */\n  source?: SlicerSource;\n  /** Slicer caption (header text) */\n  caption?: string;\n  /** Style configuration */\n  style?: SlicerStyle;\n  /** Show slicer header */\n  showHeader?: boolean;\n  /** Z-order within the sheet */\n  zIndex?: number;\n  /** Whether slicer position is locked */\n  locked?: boolean;\n  /** Whether multi-select is enabled */\n  multiSelect?: boolean;\n  /** Initial selected values */\n  selectedValues?: CellValue[];\n  /** Currently selected date range start (timeline slicers) */\n  selectedStartDate?: number;\n  /** Currently selected date range end (timeline slicers) */\n  selectedEndDate?: number;\n  /** Current aggregation level (timeline slicers) */\n  timelineLevel?: TimelineLevel;\n}",
      "docstring": "Configuration for creating a new slicer."
    },
    "SlicerCustomStyle": {
      "name": "SlicerCustomStyle",
      "definition": "{\n  /** Header background color */\n  headerBackgroundColor?: string;\n  /** Header text color */\n  headerTextColor?: string;\n  /** Header font size */\n  headerFontSize?: number;\n  /** Selected item background color */\n  selectedBackgroundColor?: string;\n  /** Selected item text color */\n  selectedTextColor?: string;\n  /** Available item background color */\n  availableBackgroundColor?: string;\n  /** Available item text color */\n  availableTextColor?: string;\n  /** Unavailable item background color */\n  unavailableBackgroundColor?: string;\n  /** Unavailable item text color */\n  unavailableTextColor?: string;\n  /** Border color */\n  borderColor?: string;\n  /** Border width in pixels */\n  borderWidth?: number;\n  /** Corner radius for items */\n  itemBorderRadius?: number;\n}",
      "docstring": "Custom slicer style definition.\nCanonical source: compute-types.gen.ts (Rust domain-types)"
    },
    "SlicerInfo": {
      "name": "SlicerInfo",
      "definition": "{\n  /** Unique slicer ID */\n  id: string;\n  /** Programmatic name (unique within workbook). Falls back to caption if not set. */\n  name: string;\n  /** Display caption (header text). */\n  caption: string;\n  /** Connected table name */\n  tableName: string;\n  /** Connected column name */\n  columnName: string;\n  /** Source type — 'table' for table slicers, 'pivot' for pivot table slicers */\n  source?: { type: 'table' | 'pivot' };\n  /** Discriminator for timeline slicers (matches TimelineSlicerConfig.sourceType) */\n  sourceType?: 'timeline';\n}",
      "docstring": "Summary information about a slicer."
    },
    "SlicerItem": {
      "name": "SlicerItem",
      "definition": "{\n  /** The display value */\n  value: CellValue;\n  /** Whether this item is currently selected */\n  selected: boolean;\n  /** Number of matching records (if available) */\n  count?: number;\n}",
      "docstring": "A single item in a slicer's value list."
    },
    "SlicerPivotSource": {
      "name": "SlicerPivotSource",
      "definition": "{\n  type: 'pivot';\n  /** Pivot table ID to connect to */\n  pivotId: string;\n  /** Field name in the pivot (row/column/filter field) */\n  fieldName: string;\n  /** Which area the field is in */\n  fieldArea: 'row' | 'column' | 'filter';\n}",
      "docstring": "Reference to a pivot field for slicer binding."
    },
    "SlicerSortOrder": {
      "name": "SlicerSortOrder",
      "definition": "'ascending' | 'descending' | 'dataSourceOrder'",
      "docstring": "Slicer sort order. Canonical source: compute-types.gen.ts"
    },
    "SlicerSource": {
      "name": "SlicerSource",
      "definition": "SlicerTableSource | SlicerPivotSource",
      "docstring": "Union type for slicer data sources.\nCanonical source: compute-types.gen.ts (Rust domain-types)\n\nGenerated version uses intersection with helper interfaces:\n  `{ type: \"table\" } & SlicerSource_table | { type: \"pivot\" } & SlicerSource_pivot`\nContracts uses named interface variants. Both are structurally identical\n(same internally-tagged discriminated union shape). No bridge conversion needed."
    },
    "SlicerState": {
      "name": "SlicerState",
      "definition": "{\n  /** Computed items with selection state */\n  items: SlicerItem[];\n  /** Whether the slicer is connected to its data source */\n  isConnected: boolean;\n  /** Selected values */\n  selectedValues: CellValue[];\n  /** Timeline periods (for timeline slicers) */\n  periods?: TimelinePeriod[];\n}",
      "docstring": "Enriched runtime state for a slicer (includes computed items, connection status)."
    },
    "SlicerStyle": {
      "name": "SlicerStyle",
      "definition": "{\n  /** Style preset (mutually exclusive with custom) */\n  preset?: SlicerStylePreset;\n  /** Custom style (mutually exclusive with preset) */\n  custom?: SlicerCustomStyle;\n  /** Number of columns for item layout (default: 1) */\n  columnCount: number;\n  /** Button height in pixels */\n  buttonHeight: number;\n  /** Show item selection indicators */\n  showSelectionIndicator: boolean;\n  /** ST_SlicerCacheCrossFilter — controls cross-filtering visual indication.\nReplaces the previous showItemsWithNoData boolean.\nDefault: 'showItemsWithDataAtTop' */\n  crossFilter: CrossFilterMode;\n  /** Whether to use custom sort list. Default: true */\n  customListSort: boolean;\n  /** Whether to show items with no matching data (x14 pivot-backed slicers). Default: true */\n  showItemsWithNoData: boolean;\n  /** 'dataSourceOrder' is internal-only; never read from or written to OOXML. Import defaults to 'ascending'. */\n  sortOrder: SlicerSortOrder;\n}",
      "docstring": "Complete slicer style configuration.\nCanonical source: compute-types.gen.ts (Rust domain-types)"
    },
    "SlicerStyleInfo": {
      "name": "SlicerStyleInfo",
      "definition": "{\n  name: string;\n  isDefault: boolean;\n}",
      "docstring": ""
    },
    "SlicerStylePreset": {
      "name": "SlicerStylePreset",
      "definition": "| 'light1'\n  | 'light2'\n  | 'light3'\n  | 'light4'\n  | 'light5'\n  | 'light6'\n  | 'dark1'\n  | 'dark2'\n  | 'dark3'\n  | 'dark4'\n  | 'dark5'\n  | 'dark6'\n  | 'other1'\n  | 'other2'",
      "docstring": "Slicer style presets matching Excel's slicer style gallery.\nCanonical source: compute-types.gen.ts (Rust domain-types)"
    },
    "SlicerTableSource": {
      "name": "SlicerTableSource",
      "definition": "{\n  type: 'table';\n  /** Table ID to connect to */\n  tableId: string;\n  /** Column header CellId - stable across column moves.\nIf this CellId becomes orphaned (column deleted), slicer shows disconnected state. */\n  columnCellId: CellId;\n}",
      "docstring": "Reference to a table field for slicer binding.\nUses column header CellId for Cell Identity Model compliance.\n\n**Graceful Degradation:** If the column header cell is deleted, the slicer\nbecomes \"disconnected\" and shows a placeholder state. This matches Excel\nbehavior where slicers become invalid when their source column is deleted."
    },
    "SmartArtCategory": {
      "name": "SmartArtCategory",
      "definition": "| 'list'\n  | 'process'\n  | 'cycle'\n  | 'hierarchy'\n  | 'relationship'\n  | 'matrix'\n  | 'pyramid'\n  | 'picture'",
      "docstring": "diagram categories matching Excel.\n\nEach category represents a different type of visual representation:\n- list: Sequential or grouped items\n- process: Steps or stages in a workflow\n- cycle: Continuous or circular processes\n- hierarchy: Organization charts, tree structures\n- relationship: Connections between concepts\n- matrix: Grid-based relationships\n- pyramid: Proportional or hierarchical layers\n- picture: Image-centric layouts"
    },
    "SmartArtConfig": {
      "name": "SmartArtConfig",
      "definition": "{\n  /** Layout ID (e.g., 'hierarchy/org-chart', 'process/basic-process'). */\n  layoutId: string;\n  /** X position in pixels. */\n  x?: number;\n  /** Y position in pixels. */\n  y?: number;\n  /** Width in pixels. */\n  width?: number;\n  /** Height in pixels. */\n  height?: number;\n  /** Initial nodes to create. */\n  nodes?: SmartArtNodeConfig[];\n  /** Display name. */\n  name?: string;\n}",
      "docstring": "Configuration for creating a new diagram."
    },
    "SmartArtDiagram": {
      "name": "SmartArtDiagram",
      "definition": "{\n  /** Layout ID (e.g., 'hierarchy/org-chart', 'process/basic-process') */\n  layoutId: string;\n  /** Category of the diagram */\n  category: SmartArtCategory;\n  /** Map of all nodes by their ID */\n  nodes: Map<NodeId, SmartArtNode>;\n  /** Top-level (root) node IDs in display order */\n  rootNodeIds: NodeId[];\n  /** Quick style ID (e.g., 'subtle-effect', 'moderate-effect') */\n  quickStyleId: string;\n  /** Color theme ID (e.g., 'colorful-1', 'accent-1') */\n  colorThemeId: string;\n  /** Layout-specific options (varies by layout type) */\n  layoutOptions: Record<string, unknown>;\n}",
      "docstring": "diagram model (deserialized TypeScript view).\n\nIMPORTANT: This interface represents the runtime/API view of the data.\nActual Yjs storage uses Y.Map and Y.Array types as defined in\nSMARTART_DIAGRAM_SCHEMA. The bridge handles conversion between formats.\n\nNOTE: computedLayout is NOT part of this interface because it's a\nruntime cache managed by the bridge, not persisted data.\n\nCOPY SEMANTICS:\nWhen copying a diagramDiagram, the bridge must:\n1. Generate new NodeIds for all nodes (using createNodeId())\n2. Build oldId -> newId mapping\n3. Deep-copy node data (text, styling, level, siblingOrder)\n4. Remap parentId and childIds references using mapping\n5. Update rootNodeIds array with new IDs\n6. Preserve tree structure with new identity"
    },
    "SmartArtNode": {
      "name": "SmartArtNode",
      "definition": "{\n  /** Unique node identifier */\n  id: NodeId;\n  /** Text content displayed in the node */\n  text: string;\n  /** Hierarchy level (0 = root, 1 = child, 2 = grandchild, etc.) */\n  level: number;\n  /** Parent node ID (null for root nodes) */\n  parentId: NodeId | null;\n  /** Ordered child node IDs */\n  childIds: NodeId[];\n  /** Order among siblings (used for layout ordering) */\n  siblingOrder: number;\n  /** Fill/background color (CSS color string) */\n  fillColor?: string;\n  /** Border/stroke color (CSS color string) */\n  borderColor?: string;\n  /** Text color (CSS color string) */\n  textColor?: string;\n  /** Font family for node text */\n  fontFamily?: string;\n  /** Font size in points */\n  fontSize?: number;\n  /** Font weight */\n  fontWeight?: 'normal' | 'bold';\n  /** Font style */\n  fontStyle?: 'normal' | 'italic';\n  /** Image URL for picture layouts */\n  imageUrl?: string;\n  /** How the image fits within the node bounds */\n  imageFit?: 'cover' | 'contain' | 'fill';\n}",
      "docstring": "Single node in a diagram.\n\nNodes form a tree structure with parent-child relationships.\nEach node can have optional per-node styling that overrides diagram defaults."
    },
    "SmartArtNodeConfig": {
      "name": "SmartArtNodeConfig",
      "definition": "{\n  /** Node text content. */\n  text: string;\n  /** Hierarchy level (0 = root). */\n  level?: number;\n  /** Insertion position relative to a reference node. */\n  position?: 'before' | 'after' | 'child';\n  /** Reference node ID for positioning. */\n  referenceNodeId?: string;\n}",
      "docstring": "Configuration for a diagram node."
    },
    "SmartArtNodeId": {
      "name": "SmartArtNodeId",
      "definition": "string",
      "docstring": "Diagram node ID type."
    },
    "SmartArtObject": {
      "name": "SmartArtObject",
      "definition": "{\n  type: 'smartart';\n  /** The diagram data including nodes, relationships, and styling.\nThis is the persisted data - layout is computed at runtime. */\n  diagram: SmartArtDiagram;\n}",
      "docstring": "Diagram floating object.\n\nDiagrams provide visual representations of information like organization charts,\nprocess flows, relationship diagrams, and hierarchies. The diagram data contains\nthe nodes and their relationships, while layout/styling is computed at render time.\n\nArchitecture Notes:\n- Diagram data (nodes, relationships) is persisted in Yjs via the bridge layer\n- Selection state (selectedNodeIds, editingNodeId) lives in XState context, NOT here\n- Computed layout is a runtime cache, managed by the bridge\n- Uses existing object-interaction-machine for selection/drag/resize"
    },
    "SmartArtShapeType": {
      "name": "SmartArtShapeType",
      "definition": "| 'rect'\n  | 'roundRect'\n  | 'ellipse'\n  | 'diamond'\n  | 'hexagon'\n  | 'chevron'\n  | 'rightArrow'\n  | 'pentagon'\n  | 'trapezoid'\n  | 'parallelogram'\n  | 'plus'\n  | 'star5'\n  | 'cloud'\n  | 'wedgeRectCallout'",
      "docstring": "diagram-specific shape types.\n\nThis is a subset of the full ShapeType union from floating-objects.ts\nthat diagram layouts commonly use. The names match exactly with the\nShapeType definitions to ensure compatibility."
    },
    "SoftEdgeEffect": {
      "name": "SoftEdgeEffect",
      "definition": "{\n  /** Soft edge radius in EMUs.\nHow far inward from the text edge the fade begins.\nLarger values create a more gradual fade.\n\n@example 25400 // 2pt radius */\n  radius: number;\n}",
      "docstring": "Soft edge effect (feathered edges).\n\nCreates a gradual fade-out at the edges of the text, making\nthe text appear to blend into the background. The effect\ncreates a smooth transition from fully opaque text to\nfully transparent at the edges.\n\n@example\n// Soft fade at edges\nconst softEdge: SoftEdgeEffect = {\n  radius: 25400  // 2pt feather radius\n};\n\n@see ECMA-376 Part 1, Section 20.1.8.57 (softEdge)"
    },
    "SolidFill": {
      "name": "SolidFill",
      "definition": "{\n  type: 'solid';\n  /** Fill color (CSS color string: hex, rgb, rgba, hsl, named) */\n  color: string;\n  /** Opacity (0-1, where 0 is fully transparent, 1 is fully opaque) */\n  opacity?: number;\n}",
      "docstring": "Solid fill — post-theme-resolution using CSS color strings. The OOXML raw version (with DrawingColor) is in the generated ooxml-types.ts bridge.\n@see ECMA-376 Part 1, Section 20.1.8.51 (CT_SolidColorFillProperties)"
    },
    "SortByColorOptions": {
      "name": "SortByColorOptions",
      "definition": "{\n  /** Column index (0-based, absolute) whose color drives the sort. */\n  column: number;\n  /** Whether to compare against fill (cell background) or font color. */\n  colorType: 'fill' | 'font';\n  /** Hex color to match (e.g. '#FFFF00'). Case-insensitive. */\n  color: string;\n  /** Place matched-color rows on top of the range or at the bottom. */\n  position: 'top' | 'bottom';\n  /** Whether the first row of the range is a header row (default: false). */\n  hasHeaders?: boolean;\n  /** Sort only currently visible row slots, preserving hidden row positions. */\n  visibleRowsOnly?: boolean;\n}",
      "docstring": "Options for {@link Worksheet.sortByColor}.\n\nSorts the rows of a range by a color predicate on a single column.\nMatched-color rows are placed on top (`position: 'top'`) or bottom\n(`position: 'bottom'`) of the range; ties fall through to natural\nrow order (stable sort)."
    },
    "SortColumn": {
      "name": "SortColumn",
      "definition": "{\n  /** Column index (0-based, relative to the sort range) */\n  column: number;\n  /** Sort direction: 'asc' (default) or 'desc'. */\n  direction?: 'asc' | 'desc';\n  /** Case sensitive comparison (default: false) */\n  caseSensitive?: boolean;\n} & (\n  | {\n      /** What to sort by (default: 'value' if omitted) */\n      sortBy?: 'value';\n      /**\n       * Optional Excel custom-list sort: values present in the list\n       * sort by their list position; values not in the list sort\n       * *after* list members (spreadsheet compatibility).\n       */\n      customList?: CellValue[];\n    }\n  | {\n      sortBy: 'cellColor' | 'fontColor';\n      /** Hex color to match (e.g. '#FFFF00'). */\n      targetColor: string;\n      /** Whether matched rows go to top or bottom of the sorted range. */\n      colorPosition: 'top' | 'bottom';\n    }\n)",
      "docstring": "A single column sort specification.\n\nDiscriminated on `sortBy`. The default ('value') accepts an optional\nWorkbook `customList`. Color sorts (`cellColor` / `fontColor`)\nrequire a `targetColor` and `colorPosition` so invalid combinations\ncannot be expressed."
    },
    "SortOptions": {
      "name": "SortOptions",
      "definition": "{\n  /** Columns to sort by, in priority order */\n  columns: SortColumn[];\n  /** Whether the first row of the range contains headers (default: false) */\n  hasHeaders?: boolean;\n  /** Sort only currently visible row slots, preserving hidden row positions. */\n  visibleRowsOnly?: boolean;\n}",
      "docstring": "Options for sorting a range of cells."
    },
    "SortOrder": {
      "name": "SortOrder",
      "definition": "'asc' | 'desc' | 'none'",
      "docstring": "Sort order for pivot fields.\n\"none\" means no explicit sort — uses natural order.\nMaps to Option<SortDirection> on the Rust side (None = \"none\")."
    },
    "Sparkline": {
      "name": "Sparkline",
      "definition": "{\n  id: string;\n  sheetId: SheetId;\n  cell: SparklineCellAddress;\n  dataRange: SparklineDataRange;\n  type: SparklineType;\n  dataInRows: boolean;\n  groupId?: string;\n  visual: SparklineVisualSettings;\n  axis: SparklineAxisSettings;\n  createdAt?: number;\n  updatedAt?: number;\n}",
      "docstring": ""
    },
    "SparklineAxisSettings": {
      "name": "SparklineAxisSettings",
      "definition": "{\n  minValue: AxisBound;\n  maxValue: AxisBound;\n  showAxis?: boolean;\n  axisColor?: string;\n  displayEmptyCells: EmptyCellDisplay;\n  rightToLeft?: boolean;\n}",
      "docstring": ""
    },
    "SparklineCellAddress": {
      "name": "SparklineCellAddress",
      "definition": "{\n  sheetId: string;\n  row: number;\n  col: number;\n}",
      "docstring": ""
    },
    "SparklineDataRange": {
      "name": "SparklineDataRange",
      "definition": "{\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n}",
      "docstring": ""
    },
    "SparklineGroup": {
      "name": "SparklineGroup",
      "definition": "{\n  id: string;\n  sheetId: string;\n  sparklineIds: string[];\n  type: SparklineType;\n  visual: SparklineVisualSettings;\n  axis: SparklineAxisSettings;\n  createdAt?: number;\n  updatedAt?: number;\n}",
      "docstring": ""
    },
    "SparklineType": {
      "name": "SparklineType",
      "definition": "\"line\" | \"column\" | \"winLoss\"",
      "docstring": ""
    },
    "SparklineVisualSettings": {
      "name": "SparklineVisualSettings",
      "definition": "{\n  color: string;\n  negativeColor?: string;\n  showMarkers?: boolean;\n  markerColor?: string;\n  highPointColor?: string;\n  lowPointColor?: string;\n  firstPointColor?: string;\n  lastPointColor?: string;\n  lineWeight?: number;\n  columnGap?: number;\n  barGap?: number;\n}",
      "docstring": ""
    },
    "SplitViewportConfig": {
      "name": "SplitViewportConfig",
      "definition": "{\n  type: 'split';\n  /** Direction of the split */\n  direction: 'horizontal' | 'vertical' | 'both';\n  /** Row index for horizontal split line.\nUsed when direction is 'horizontal' or 'both'.\nDefaults to 0 (ignored) when direction is 'vertical'. */\n  horizontalPosition: number;\n  /** Column index for vertical split line.\nUsed when direction is 'vertical' or 'both'.\nDefaults to 0 (ignored) when direction is 'horizontal'. */\n  verticalPosition: number;\n}",
      "docstring": "Split view: 2-4 independently scrolling viewports.\n\nSplit view creates independent panes that can each scroll separately,\nallowing users to compare distant regions of the spreadsheet.\n\nViewport IDs by direction:\n- 'horizontal': 'top', 'bottom' (split along a row)\n- 'vertical': 'left', 'right' (split along a column)\n- 'both': 'topLeft', 'topRight', 'bottomLeft', 'bottomRight' (4 quadrants)\n\n@see plans/active/excel-parity/01-split-view-not-implemented.md"
    },
    "StockSubType": {
      "name": "StockSubType",
      "definition": "'hlc' | 'ohlc' | 'volume-hlc' | 'volume-ohlc'",
      "docstring": "Stock chart sub-types (OHLC = Open-High-Low-Close)"
    },
    "StripePattern": {
      "name": "StripePattern",
      "definition": "{\n  stripeSize: number;\n  stripe1Fill?: string;\n  stripe2Fill?: string;\n}",
      "docstring": ""
    },
    "StrokeId": {
      "name": "StrokeId",
      "definition": "string & { readonly __brand: 'StrokeId' }",
      "docstring": "Unique identifier for a stroke within a drawing.\n\nBranded type provides type safety - prevents accidentally using\nstring IDs where StrokeId is expected (and vice versa).\n\nUses UUID v7 (time-sortable) for:\n- Uniqueness across clients (no coordination needed)\n- Time-sortability for undo/redo ordering\n- Compact string representation"
    },
    "StrokeTransformParams": {
      "name": "StrokeTransformParams",
      "definition": "{\n  /** Transform type */\n  type: StrokeTransformType;\n  /** Center point X for rotation/scale */\n  centerX?: number;\n  /** Center point Y for rotation/scale */\n  centerY?: number;\n  /** Rotation angle in radians (for 'rotate') */\n  angle?: number;\n  /** Scale factor X (for 'scale') */\n  scaleX?: number;\n  /** Scale factor Y (for 'scale') */\n  scaleY?: number;\n}",
      "docstring": "Transform parameters for stroke transformations."
    },
    "StrokeTransformType": {
      "name": "StrokeTransformType",
      "definition": "'rotate' | 'scale' | 'flip-horizontal' | 'flip-vertical'",
      "docstring": "Transform type for stroke transformations."
    },
    "StyleCategory": {
      "name": "StyleCategory",
      "definition": "| 'good-bad-neutral' // Good, Bad, Neutral\n  | 'data-model' // Calculation, Check Cell, etc.\n  | 'titles-headings' // Title, Heading 1-4\n  | 'themed' // Accent1-6 variations\n  | 'number-format' // Currency, Percent, Comma\n  | 'custom'",
      "docstring": "Style category for grouping styles in the UI gallery."
    },
    "SubPath": {
      "name": "SubPath",
      "definition": "{\n  segments: PathSegment[];\n  closed: boolean;\n}",
      "docstring": "A single subpath within a compound path."
    },
    "SubSupNode": {
      "name": "SubSupNode",
      "definition": "{\n  type: 'sSubSup';\n  /** Align scripts */\n  alnScr?: boolean;\n  /** Base */\n  e: MathNode[];\n  /** Subscript */\n  sub: MathNode[];\n  /** Superscript */\n  sup: MathNode[];\n}",
      "docstring": "Sub-Superscript - <m:sSubSup>"
    },
    "SubscriptNode": {
      "name": "SubscriptNode",
      "definition": "{\n  type: 'sSub';\n  /** Base */\n  e: MathNode[];\n  /** Subscript */\n  sub: MathNode[];\n}",
      "docstring": "Subscript - <m:sSub>"
    },
    "SubtotalConfig": {
      "name": "SubtotalConfig",
      "definition": "{\n  /** Target range to subtotal */\n  range: CellRange;\n  /** Whether the target range includes a header row */\n  hasHeaders: boolean;\n  /** Column index to group by (0-based) */\n  groupByColumn: number;\n  /** Columns to subtotal (0-based indices) */\n  subtotalColumns: number[];\n  /** Aggregation function to use */\n  aggregation: 'sum' | 'count' | 'average' | 'max' | 'min';\n  /** Whether to replace existing subtotals */\n  replace?: boolean;\n  /** Whether summary rows appear below their detail rows */\n  summaryBelowData?: boolean;\n}",
      "docstring": "Configuration for the subtotal operation."
    },
    "SubtotalLocation": {
      "name": "SubtotalLocation",
      "definition": "'top' | 'bottom'",
      "docstring": ""
    },
    "SubtotalResult": {
      "name": "SubtotalResult",
      "definition": "{\n  /** Number of row groups created */\n  groupsCreated: number;\n  /** Number of subtotal rows inserted */\n  subtotalRowsInserted: number;\n  /** Range affected by the subtotal operation */\n  affectedRange: CellRange;\n}",
      "docstring": "Result of creating subtotals."
    },
    "SummaryOptions": {
      "name": "SummaryOptions",
      "definition": "{\n  /** Whether to include sample data in the summary */\n  includeData?: boolean;\n  /** Maximum number of rows to include in sample data */\n  maxRows?: number;\n  /** Maximum number of columns to include in sample data */\n  maxCols?: number;\n}",
      "docstring": "Options for the `worksheet.summarize()` method."
    },
    "SunburstConfig": {
      "name": "SunburstConfig",
      "definition": "{\n  /** Number of hierarchy levels to display */\n  levels?: number;\n  /** Show category labels on each arc */\n  showLabels?: boolean;\n  /** Color scale for sunburst arcs */\n  colorScale?: string[];\n  /** Inner radius as fraction of outer radius (0-1) */\n  innerRadius?: number;\n}",
      "docstring": "Sunburst chart configuration"
    },
    "SuperscriptNode": {
      "name": "SuperscriptNode",
      "definition": "{\n  type: 'sSup';\n  /** Base */\n  e: MathNode[];\n  /** Superscript */\n  sup: MathNode[];\n}",
      "docstring": "Superscript - <m:sSup>"
    },
    "TableAddColumnReceipt": {
      "name": "TableAddColumnReceipt",
      "definition": "{\n  kind: 'tableAddColumn';\n  tableName: string;\n  columnName: string;\n  position: number;\n}",
      "docstring": "Receipt for a table addColumn mutation."
    },
    "TableAddRowReceipt": {
      "name": "TableAddRowReceipt",
      "definition": "{\n  kind: 'tableAddRow';\n  tableName: string;\n  index: number;\n}",
      "docstring": "Receipt for a table addRow mutation."
    },
    "TableColumn": {
      "name": "TableColumn",
      "definition": "{\n  /** Unique column ID */\n  id: string;\n  /** Column header name */\n  name: string;\n  /** Column index within the table (0-based) */\n  index: number;\n  /** Total row function type */\n  totalsFunction: TotalsFunction | null;\n  /** Total row label */\n  totalsLabel: string | null;\n  /** Calculated column formula */\n  calculatedFormula?: string;\n}",
      "docstring": "A single column in a table.\n\nField names match the Rust-generated `TableColumn` type (compute-types.gen.ts)."
    },
    "TableDeleteRowReceipt": {
      "name": "TableDeleteRowReceipt",
      "definition": "{\n  kind: 'tableDeleteRow';\n  tableName: string;\n  index: number;\n}",
      "docstring": "Receipt for a table deleteRow mutation."
    },
    "TableElementStyle": {
      "name": "TableElementStyle",
      "definition": "{\n  fill?: string;\n  fontColor?: string;\n  fontBold?: boolean;\n  borderTop?: string;\n  borderBottom?: string;\n  borderLeft?: string;\n  borderRight?: string;\n}",
      "docstring": ""
    },
    "TableInfo": {
      "name": "TableInfo",
      "definition": "{\n  /** Internal table identifier */\n  id: string;\n  /** Table name */\n  name: string;\n  /** Display name */\n  displayName: string;\n  /** Sheet the table belongs to */\n  sheetId: string;\n  /** Table range in A1 notation (converted from Rust SheetRange) */\n  range: string;\n  /** Column definitions */\n  columns: TableColumn[];\n  /** Whether the table has a header row */\n  hasHeaderRow: boolean;\n  /** Whether the totals row is visible */\n  hasTotalsRow: boolean;\n  /** Table style name */\n  style: string;\n  /** Whether banded rows are shown */\n  bandedRows: boolean;\n  /** Whether banded columns are shown */\n  bandedColumns: boolean;\n  /** Whether first column is emphasized */\n  emphasizeFirstColumn: boolean;\n  /** Whether last column is emphasized */\n  emphasizeLastColumn: boolean;\n  /** Whether filter buttons are shown */\n  showFilterButtons: boolean;\n  /** Whether the table automatically expands when adjacent user input is entered */\n  autoExpand: boolean;\n  /** Whether formulas entered in table data columns automatically create/fill calculated columns */\n  autoCalculatedColumns: boolean;\n}",
      "docstring": "Information about an existing table.\n\nField names match the Rust-generated `Table` type (compute-types.gen.ts)\nexcept `range` which is converted from `SheetRange` to A1 notation string."
    },
    "TableOptions": {
      "name": "TableOptions",
      "definition": "{\n  /** Table name (auto-generated if omitted) */\n  name?: string;\n  /** Whether the first row of the range contains headers (default: true) */\n  hasHeaders?: boolean;\n  /** Table style preset name */\n  style?: string;\n  /** Whether the table automatically expands when adjacent user input is entered (default: true) */\n  autoExpand?: boolean;\n  /** Whether formulas entered in table data columns automatically create/fill calculated columns (default: true) */\n  autoCalculatedColumns?: boolean;\n}",
      "docstring": "Options for creating a new table."
    },
    "TableRemoveColumnReceipt": {
      "name": "TableRemoveColumnReceipt",
      "definition": "{\n  kind: 'tableRemoveColumn';\n  tableName: string;\n  columnIndex: number;\n}",
      "docstring": "Receipt for a table removeColumn mutation."
    },
    "TableResizeReceipt": {
      "name": "TableResizeReceipt",
      "definition": "{\n  kind: 'tableResize';\n  tableName: string;\n  newRange: string;\n}",
      "docstring": "Receipt for a table resize mutation."
    },
    "TableRowCollection": {
      "name": "TableRowCollection",
      "definition": "{\n  /** Number of data rows (snapshot, not live). */\n  count: number;\n  /** Get the cell values of a data row by index. */\n  getAt(index: number): Promise<CellValue[]>;;\n  /** Add a data row. If index is omitted, appends to the end. */\n  add(index?: number, values?: CellValue[]): Promise<TableAddRowReceipt>;;\n  /** Delete a data row by index. */\n  deleteAt(index: number): Promise<TableDeleteRowReceipt>;;\n  /** Get the cell values of a data row by index. */\n  getValues(index: number): Promise<CellValue[]>;;\n  /** Set the cell values of a data row by index. */\n  setValues(index: number, values: CellValue[]): Promise<void>;;\n  /** Get the A1-notation range for a data row by index. */\n  getRange(index: number): Promise<string>;;\n}",
      "docstring": "A collection-like wrapper around a table's data rows.\n\nReturned by `WorksheetTables.getRows()`. The `count` property is a\nsnapshot taken at construction time and does NOT live-update."
    },
    "TableStyleConfig": {
      "name": "TableStyleConfig",
      "definition": "{\n  /** Optional legacy style name. `WorkbookTableStyles.add(name, style)` owns the\ncanonical name through its first argument. */\n  name?: string;\n  headerRow?: TableElementStyle;\n  totalRow?: TableElementStyle;\n  firstColumn?: TableElementStyle;\n  lastColumn?: TableElementStyle;\n  rowStripes?: StripePattern;\n  columnStripes?: StripePattern;\n  wholeTable?: TableElementStyle;\n}",
      "docstring": "Configuration for creating/updating a custom table style."
    },
    "TableStyleInfo": {
      "name": "TableStyleInfo",
      "definition": "{\n  id: string;\n  name: string;\n  createdAt: number;\n  updatedAt: number;\n  headerRow: TableElementStyle;\n  totalRow: TableElementStyle;\n  firstColumn: TableElementStyle;\n  lastColumn: TableElementStyle;\n  rowStripes: StripePattern;\n  columnStripes: StripePattern;\n  wholeTable: TableElementStyle;\n}",
      "docstring": ""
    },
    "TableStyleInfoWithReadOnly": {
      "name": "TableStyleInfoWithReadOnly",
      "definition": "TableStyleInfo & { readOnly: boolean }",
      "docstring": "A table style with a computed `readOnly` flag (built-in styles are read-only)."
    },
    "TableUpdateOptions": {
      "name": "TableUpdateOptions",
      "definition": "{\n  /** Table style preset name (e.g. \"TableStyleLight1\"). */\n  style?: string;\n  /** New table name (renames the table). */\n  name?: string;\n  /** Whether the first column is emphasized. */\n  emphasizeFirstColumn?: boolean;\n  /** Whether the last column is emphasized. */\n  emphasizeLastColumn?: boolean;\n  /** Whether banded columns are shown. */\n  bandedColumns?: boolean;\n  /** Whether banded rows are shown. */\n  bandedRows?: boolean;\n  /** Whether filter buttons are shown on the header row. */\n  showFilterButtons?: boolean;\n  /** Whether the header row is visible. */\n  hasHeaderRow?: boolean;\n  /** Whether the totals row is visible. */\n  hasTotalsRow?: boolean;\n  /** Whether the table automatically expands when adjacent user input is entered. */\n  autoExpand?: boolean;\n  /** Whether formulas entered in table data columns automatically create/fill calculated columns. */\n  autoCalculatedColumns?: boolean;\n}",
      "docstring": "Options for updating a table's properties via `WorksheetTables.update()`."
    },
    "TagMatcher": {
      "name": "TagMatcher",
      "definition": "string",
      "docstring": "Glob-matchable tag pattern for matching against principal tags.\n\nExamples:\n- `\"agent:copilot\"` — exact match\n- `\"agent:*\"` — all agents\n- `\"sf:role:*\"` — all Salesforce roles\n- `\"*\"` — everyone"
    },
    "TargetMatcher": {
      "name": "TargetMatcher",
      "definition": "| { readonly kind: 'workbook' }\n  | { readonly kind: 'sheet'; readonly sheetId: SheetId | '*' }\n  | { readonly kind: 'column'; readonly colId: ColId | '*'; readonly sheetId: SheetId | '*' }",
      "docstring": "Target matcher — same structure as AccessTarget but allows `'*'` wildcards\nfor IDs to match any resource of that kind."
    },
    "TextAutoSize": {
      "name": "TextAutoSize",
      "definition": "| { type: 'none' }\n  | { type: 'textToFitShape'; fontScale?: number; lineSpacingReduction?: number }\n  | { type: 'shapeToFitText' }",
      "docstring": "How text auto-sizes within its container."
    },
    "TextBoxBorder": {
      "name": "TextBoxBorder",
      "definition": "{\n  /** Corner radius in pixels (for rounded corners) */\n  radius?: number;\n}",
      "docstring": "Text box border with optional corner radius."
    },
    "TextBoxConfig": {
      "name": "TextBoxConfig",
      "definition": "{\n  /** Text content and formatting — shared model with ShapeData. */\n  text?: ShapeText;\n  /** Anchor cell as `{row, col}`. When set, `x`/`y` are offsets from this\ncell instead of from cell `(0, 0)`. */\n  anchorCell?: { row: number; col: number };\n  /** X position in pixels. */\n  x?: number;\n  /** Y position in pixels. */\n  y?: number;\n  /** Width in pixels (default: 200). */\n  width?: number;\n  /** Height in pixels (default: 100). */\n  height?: number;\n  /** Display name. */\n  name?: string;\n}",
      "docstring": "Configuration for creating a new text box."
    },
    "TextBoxHandle": {
      "name": "TextBoxHandle",
      "definition": "{\n  update(props: Partial<TextBoxConfig>): Promise<void>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<TextBoxHandle>;;\n  getData(): Promise<TextBoxObject>;;\n}",
      "docstring": ""
    },
    "TextBoxObject": {
      "name": "TextBoxObject",
      "definition": "{\n  type: 'textbox';\n  /** Text content and formatting — shared model with ShapeData. */\n  text?: ShapeText;\n  /** Fill color/gradient for the text box background */\n  fill?: ObjectFill;\n  /** Border around the text box */\n  border?: TextBoxBorder;\n  /** Optional text-effect configuration for styled text effects */\n  wordArt?: WordArtConfig;\n}",
      "docstring": "Text box floating object.\nA rectangular container for rich text content."
    },
    "TextEffects": {
      "name": "TextEffects",
      "definition": "{\n  /** Outer shadow effect.\nCreates a shadow behind and offset from the text.\nFor quick shadow setup, consider using `presetShadow` instead. */\n  outerShadow?: OuterShadowEffect;\n  /** Inner shadow effect.\nCreates a shadow inside the text edges for an embossed look. */\n  innerShadow?: InnerShadowEffect;\n  /** Preset shadow (alternative to custom shadow).\nUse this for quick application of standard shadow styles.\nChoose from 20 predefined shadow configurations (shdw1-shdw20).\nIf both `presetShadow` and `outerShadow`/`innerShadow` are specified,\nthe custom shadow settings take precedence. */\n  presetShadow?: PresetShadowType;\n  /** Glow effect.\nCreates a soft colored glow around the text. */\n  glow?: GlowEffect;\n  /** Soft edge effect.\nCreates feathered/faded edges on the text. */\n  softEdge?: SoftEdgeEffect;\n  /** Reflection effect.\nCreates a mirror reflection below the text. */\n  reflection?: ReflectionEffect;\n  /** Bevel effect.\nCreates 3D beveled edges on the text.\nCan apply different bevels to top and bottom edges. */\n  bevel?: BevelEffect;\n  /** 3D rotation effect.\nRotates text in 3D space and applies perspective.\nIncludes lighting and material settings for realistic 3D rendering. */\n  transform3D?: Transform3DEffect;\n}",
      "docstring": "Container for all text effects.\n\nGroups all visual effects that can be applied to text-effect text.\nEffects are applied in a specific order to ensure correct visual stacking:\n\n**Effect Application Order:**\n1. Text fill and outline (base rendering)\n2. Outer shadow (rendered behind text)\n3. Glow (rendered around text edges)\n4. Inner shadow (rendered inside text)\n5. Soft edges (feathers text edges)\n6. Reflection (rendered below text)\n7. 3D bevel (adds depth to edges)\n8. 3D rotation and perspective (transforms entire result)\n\nNote: You can use either `presetShadow` for quick shadow application,\nor `outerShadow`/`innerShadow` for custom shadow configuration.\nUsing both may produce unexpected results.\n\n@example\n// Dramatic text effects\nconst effects: TextEffects = {\n  outerShadow: {\n    blurRadius: 50800,\n    distance: 38100,\n    direction: 45,\n    color: '#000000',\n    opacity: 0.4\n  },\n  glow: {\n    radius: 63500,\n    color: '#FFD700',\n    opacity: 0.6\n  },\n  bevel: {\n    topPreset: 'circle',\n    topWidth: 38100,\n    topHeight: 38100\n  }\n};\n\n@see ECMA-376 Part 1, Section 20.1.8 (DrawingML - Effect)"
    },
    "TextMargins": {
      "name": "TextMargins",
      "definition": "{\n  /** Top margin in pixels */\n  top: number;\n  /** Right margin in pixels */\n  right: number;\n  /** Bottom margin in pixels */\n  bottom: number;\n  /** Left margin in pixels */\n  left: number;\n}",
      "docstring": "Text margins within a text box or shape."
    },
    "TextOrientation": {
      "name": "TextOrientation",
      "definition": "| 'horizontal'\n  | 'vertical'\n  | 'vertical270'\n  | 'wordArtVertical'\n  | 'eastAsianVertical'\n  | 'mongolianVertical'",
      "docstring": "Text orientation within a shape."
    },
    "TextOverflow": {
      "name": "TextOverflow",
      "definition": "'overflow' | 'clip' | 'ellipsis'",
      "docstring": "Text overflow behavior."
    },
    "TextReadingOrder": {
      "name": "TextReadingOrder",
      "definition": "'leftToRight' | 'rightToLeft'",
      "docstring": "Text reading order / directionality."
    },
    "TextRun": {
      "name": "TextRun",
      "definition": "{\n  /** The actual text content of this run. */\n  text: string;\n  /** Run-level formatting properties. */\n  properties?: TextRunProperties;\n}",
      "docstring": "A single text run within a paragraph.\n\nCorresponds to the `a:r` element. Contains text content and\nrun-level formatting properties.\n\n@see ECMA-376 Part 1, Section 21.1.2.3.8 (a:r)"
    },
    "TextRunProperties": {
      "name": "TextRunProperties",
      "definition": "{\n  /** Bold text. */\n  bold?: boolean;\n  /** Italic text. */\n  italic?: boolean;\n  /** Underline style. */\n  underline?: TextUnderlineType;\n  /** Strikethrough style. */\n  strikethrough?: 'noStrike' | 'sngStrike' | 'dblStrike';\n  /** Font family name (Latin script). */\n  fontFamily?: string;\n  /** East Asian font family name. */\n  fontFamilyEastAsian?: string;\n  /** Complex script font family name. */\n  fontFamilyComplexScript?: string;\n  /** Font size in hundredths of a point.\nFor example, 1200 = 12pt. */\n  fontSize?: number;\n  /** Text color. */\n  color?: DmlColorValue;\n  /** Character spacing (tracking) in hundredths of a point. */\n  spacing?: number;\n  /** Baseline shift as a percentage (positive = superscript, negative = subscript). */\n  baseline?: number;\n  /** Whether text is capitalized. */\n  cap?: 'none' | 'small' | 'all';\n  /** Text language (BCP 47 language tag, e.g., \"en-US\"). */\n  lang?: string;\n  /** Whether the run is a hyperlink. */\n  hyperlink?: HyperlinkInfo;\n}",
      "docstring": "Text run properties (a:rPr).\n\nControls character-level formatting such as font, size, color,\nbold, italic, underline, etc.\n\n@see ECMA-376 Part 1, Section 21.1.2.3.9 (a:rPr)"
    },
    "TextStyle": {
      "name": "TextStyle",
      "definition": "{\n  /** Font family name */\n  fontFamily: string;\n  /** Font size in points */\n  fontSize: number;\n  /** Font weight */\n  fontWeight: 'normal' | 'bold';\n  /** Font style */\n  fontStyle: 'normal' | 'italic';\n  /** Text color (CSS color string) */\n  color: string;\n  /** Horizontal text alignment */\n  align: 'left' | 'center' | 'right';\n  /** Vertical text alignment */\n  verticalAlign: 'top' | 'middle' | 'bottom';\n}",
      "docstring": "Text styling properties for node labels."
    },
    "TextToColumnsDelimiters": {
      "name": "TextToColumnsDelimiters",
      "definition": "{\n  /** Split on tab characters. */\n  tab?: boolean;\n  /** Split on semicolons. */\n  semicolon?: boolean;\n  /** Split on commas. */\n  comma?: boolean;\n  /** Split on spaces. */\n  space?: boolean;\n  /** Split on this custom delimiter character/string. */\n  other?: string;\n}",
      "docstring": "Delimiter set for text-to-columns splitting. Multiple delimiters may be enabled."
    },
    "TextToColumnsDestination": {
      "name": "TextToColumnsDestination",
      "definition": "{\n  /** Zero-based row index. */\n  row: number;\n  /** Zero-based column index. */\n  col: number;\n}",
      "docstring": "Destination cell for text-to-columns output."
    },
    "TextToColumnsOptions": {
      "name": "TextToColumnsOptions",
      "definition": "{\n  /** Split mode. Defaults to 'delimited' when omitted. */\n  type?: 'delimited' | 'fixedWidth';\n  /** Legacy single delimiter selector. Defaults to 'comma' when `delimiters`\nis omitted. Use `delimiters` when more than one delimiter is selected. */\n  delimiter?: 'comma' | 'tab' | 'semicolon' | 'space' | 'custom';\n  /** Custom delimiter character (when delimiter is 'custom') */\n  customDelimiter?: string;\n  /** Full delimiter set. Takes precedence over `delimiter` when provided. */\n  delimiters?: TextToColumnsDelimiters;\n  /** Destination cell. Defaults to the top-left source cell. */\n  destination?: string | TextToColumnsDestination;\n  /** Whether to treat consecutive delimiters as one */\n  treatConsecutiveAsOne?: boolean;\n  /** Text qualifier character */\n  textQualifier?: '\"' | \"'\" | 'none';\n  /** Zero-based character offsets at which to split (fixedWidth mode). */\n  fixedWidthBreaks?: number[];\n}",
      "docstring": "Options for text-to-columns splitting."
    },
    "TextToColumnsResult": {
      "name": "TextToColumnsResult",
      "definition": "{\n  /** Number of source rows processed. */\n  rowsProcessed: number;\n  /** Maximum number of destination columns produced by any processed row. */\n  columnsCreated: number;\n}",
      "docstring": "Result of a text-to-columns operation."
    },
    "TextWarpPreset": {
      "name": "TextWarpPreset",
      "definition": "| 'textNoShape' // OOXML compatibility - no shape transformation\n  | 'textPlain' // Plain text with no transformation\n\n  // Arc paths (text follows curved arc)\n  | 'textArchUp'\n  | 'textArchDown'\n  | 'textCircle'\n  | 'textButton'\n\n  // Arc paths with fill (poured effect)\n  | 'textArchUpPour'\n  | 'textArchDownPour'\n  | 'textCirclePour'\n  | 'textButtonPour'\n\n  // Curve effects (upward/downward Bezier curves)\n  | 'textCurveUp'\n  | 'textCurveDown'\n\n  // Wave effects (sinusoidal distortion)\n  | 'textWave1'\n  | 'textWave2'\n  | 'textDoubleWave1'\n  | 'textWave4'\n\n  // Inflate/deflate effects (bulge/pinch)\n  | 'textInflate'\n  | 'textDeflate'\n  | 'textInflateBottom'\n  | 'textDeflateBottom'\n  | 'textInflateTop'\n  | 'textDeflateTop'\n  | 'textDeflateInflate'\n  | 'textDeflateInflateDeflate'\n\n  // Fade effects (perspective scaling)\n  | 'textFadeRight'\n  | 'textFadeLeft'\n  | 'textFadeUp'\n  | 'textFadeDown'\n\n  // Slant effects (shear transformation)\n  | 'textSlantUp'\n  | 'textSlantDown'\n\n  // Cascade effects (stair-step)\n  | 'textCascadeUp'\n  | 'textCascadeDown'\n\n  // Additional geometric warps\n  | 'textTriangle'\n  | 'textTriangleInverted'\n  | 'textChevron'\n  | 'textChevronInverted'\n  | 'textRingInside'\n  | 'textRingOutside'\n  | 'textStop'\n  | 'textCanUp'\n  | 'textCanDown'",
      "docstring": "Text-Effect Types\n\nImplements DrawingML text warp and effects from ECMA-376 Part 1.\nDecorative text is NOT a separate floating object type - it's a configuration\nthat can be applied to TextBoxObject to add warping and effects.\n\n@see ECMA-376 Part 1, Section 20.1.10 (Text Body Properties)\n@see ECMA-376 Part 1, Section 20.1.10.78 (ST_TextShapeType)"
    },
    "ThemeColorSlot": {
      "name": "ThemeColorSlot",
      "definition": "keyof ThemeColors",
      "docstring": "All valid theme color slot names"
    },
    "ThemeColors": {
      "name": "ThemeColors",
      "definition": "{\n  /** Primary dark color - typically black/near-black for text */\n  dark1: string;\n  /** Primary light color - typically white for backgrounds */\n  light1: string;\n  /** Secondary dark color */\n  dark2: string;\n  /** Secondary light color */\n  light2: string;\n  /** Accent color 1 - primary accent (blue in Office default) */\n  accent1: string;\n  /** Accent color 2 - typically orange */\n  accent2: string;\n  /** Accent color 3 - typically gray */\n  accent3: string;\n  /** Accent color 4 - typically yellow/gold */\n  accent4: string;\n  /** Accent color 5 - typically blue-gray */\n  accent5: string;\n  /** Accent color 6 - typically green */\n  accent6: string;\n  /** Hyperlink color */\n  hyperlink: string;\n  /** Followed hyperlink color */\n  followedHyperlink: string;\n}",
      "docstring": "Theme Contracts\n\nType definitions and utilities for workbook themes.\nThemes define color palettes and font pairs that cells can reference.\n\nIssue 4: Page Layout - Themes"
    },
    "ThemeDefinition": {
      "name": "ThemeDefinition",
      "definition": "{\n  /** Unique theme identifier (e.g., 'office', 'slice', 'custom-abc123') */\n  id: string;\n  /** Display name shown in UI (e.g., 'Office', 'Slice') */\n  name: string;\n  /** Theme color palette */\n  colors: ThemeColors;\n  /** Theme font pair */\n  fonts: ThemeFonts;\n  /** True for built-in themes, false for user-created */\n  builtIn: boolean;\n}",
      "docstring": "Complete theme definition including colors and fonts."
    },
    "ThemeFonts": {
      "name": "ThemeFonts",
      "definition": "{\n  /** Font for headings (e.g., 'Calibri Light') */\n  majorFont: string;\n  /** Font for body text (e.g., 'Calibri') */\n  minorFont: string;\n}",
      "docstring": "Theme font pair - major (headings) and minor (body) fonts."
    },
    "TileSettings": {
      "name": "TileSettings",
      "definition": "{\n  tx?: number;\n  ty?: number;\n  sx?: number;\n  sy?: number;\n  flip?: string;\n  algn?: string;\n}",
      "docstring": "Tile settings for picture/texture fills."
    },
    "TimelineLevel": {
      "name": "TimelineLevel",
      "definition": "'years' | 'quarters' | 'months' | 'days'",
      "docstring": "Timeline aggregation level.\nDetermines how dates are grouped in the timeline display."
    },
    "TimelinePeriod": {
      "name": "TimelinePeriod",
      "definition": "{\n  /** Period label */\n  label: string;\n  /** Period start date (ISO string) */\n  start: string;\n  /** Period end date (ISO string) */\n  end: string;\n  /** Whether this period is selected */\n  selected: boolean;\n}",
      "docstring": "A period in a timeline slicer."
    },
    "TimelineSlicerConfig": {
      "name": "TimelineSlicerConfig",
      "definition": "{\n  /** Source must be table or pivot with date column */\n  sourceType: 'timeline';\n  /** Current aggregation level */\n  timelineLevel: TimelineLevel;\n  /** Start date of the data range */\n  dataStartDate?: number;\n  /** End date of the data range */\n  dataEndDate?: number;\n  /** Currently selected date range start */\n  selectedStartDate?: number;\n  /** Currently selected date range end */\n  selectedEndDate?: number;\n  /** Show the level selector in the header */\n  showLevelSelector: boolean;\n  /** Show the date range label */\n  showDateRangeLabel: boolean;\n}",
      "docstring": "Timeline slicer specific configuration.\nExtends base slicer for date-range filtering."
    },
    "TimelineStyleInfo": {
      "name": "TimelineStyleInfo",
      "definition": "{\n  name: string;\n  isDefault: boolean;\n}",
      "docstring": ""
    },
    "TitleConfig": {
      "name": "TitleConfig",
      "definition": "{\n  text?: string;\n  visible?: boolean;\n  position?: 'top' | 'bottom' | 'left' | 'right' | 'overlay';\n  font?: ChartFont;\n  format?: ChartFormat;\n  overlay?: boolean;\n  /** Text orientation angle in degrees (-90 to 90) */\n  textOrientation?: number;\n  richText?: ChartFormatString[];\n  formula?: string;\n  /** Horizontal text alignment. */\n  horizontalAlignment?: 'left' | 'center' | 'right';\n  /** Vertical text alignment. */\n  verticalAlignment?: 'top' | 'middle' | 'bottom';\n  /** Show drop shadow on title. */\n  showShadow?: boolean;\n  /** Height in points (read-only, populated from render engine). */\n  height?: number;\n  /** Width in points (read-only, populated from render engine). */\n  width?: number;\n  /** Left position in points (read-only, populated from render engine). */\n  left?: number;\n  /** Top position in points (read-only, populated from render engine). */\n  top?: number;\n}",
      "docstring": "Rich title configuration"
    },
    "TopBottomBy": {
      "name": "TopBottomBy",
      "definition": "'items' | 'percent' | 'sum'",
      "docstring": ""
    },
    "TopBottomType": {
      "name": "TopBottomType",
      "definition": "'top' | 'bottom'",
      "docstring": ""
    },
    "TotalsFunction": {
      "name": "TotalsFunction",
      "definition": "| 'average'\n  | 'count'\n  | 'countNums'\n  | 'max'\n  | 'min'\n  | 'stdDev'\n  | 'sum'\n  | 'var'\n  | 'custom'\n  | 'none'",
      "docstring": "Totals function type (matches Rust TotalsFunction)."
    },
    "Transform3DEffect": {
      "name": "Transform3DEffect",
      "definition": "{\n  /** Rotation around X axis in degrees */\n  rotationX: number;\n  /** Rotation around Y axis in degrees */\n  rotationY: number;\n  /** Rotation around Z axis in degrees */\n  rotationZ: number;\n  /** Perspective distance for 3D effect */\n  perspective: number;\n}",
      "docstring": "3D transformation effect configuration."
    },
    "TreemapConfig": {
      "name": "TreemapConfig",
      "definition": "{\n  /** Number of hierarchy levels to display */\n  levels?: number;\n  /** Show category labels on each rectangle */\n  showLabels?: boolean;\n  /** Color scale for treemap rectangles */\n  colorScale?: string[];\n  /** Layout algorithm */\n  layoutAlgorithm?: 'squarified' | 'slice' | 'dice' | 'sliceDice';\n}",
      "docstring": "Treemap chart configuration"
    },
    "TrendlineConfig": {
      "name": "TrendlineConfig",
      "definition": "{\n  show?: boolean;\n  type?: string;\n  color?: string;\n  lineWidth?: number;\n  order?: number;\n  period?: number;\n  forward?: number;\n  backward?: number;\n  intercept?: number;\n  displayEquation?: boolean;\n  displayRSquared?: boolean;\n  name?: string;\n  lineFormat?: ChartLineFormat;\n  label?: TrendlineLabelConfig;\n  /** @deprecated Use displayEquation instead */\n  showEquation?: boolean;\n  /** @deprecated Use displayRSquared instead */\n  showR2?: boolean;\n  /** @deprecated Use forward instead */\n  forwardPeriod?: number;\n  /** @deprecated Use backward instead */\n  backwardPeriod?: number;\n}",
      "docstring": "Trendline configuration (matches TrendlineData wire type)"
    },
    "TrendlineLabelConfig": {
      "name": "TrendlineLabelConfig",
      "definition": "{\n  text?: string;\n  format?: ChartFormat;\n  numberFormat?: string;\n}",
      "docstring": "Trendline label configuration."
    },
    "UndoHistoryEntry": {
      "name": "UndoHistoryEntry",
      "definition": "{\n  /** Unique identifier for this entry. */\n  id: string;\n  /** Description of the operation. */\n  description: string;\n  /** Timestamp of the operation (Unix ms). */\n  timestamp: number;\n}",
      "docstring": "An entry in the undo history."
    },
    "UndoReceipt": {
      "name": "UndoReceipt",
      "definition": "{\n  kind: 'undo';\n  success: boolean;\n}",
      "docstring": "Receipt for an undo operation."
    },
    "UndoServiceState": {
      "name": "UndoServiceState",
      "definition": "{\n  /** Whether undo is available */\n  canUndo: boolean;\n  /** Whether redo is available */\n  canRedo: boolean;\n  /** Number of items in undo stack */\n  undoStackSize: number;\n  /** Number of items in redo stack */\n  redoStackSize: number;\n  /** Description of next undo operation */\n  nextUndoDescription: string | null;\n  /** Description of next redo operation */\n  nextRedoDescription: string | null;\n}",
      "docstring": "Undo service state"
    },
    "UndoState": {
      "name": "UndoState",
      "definition": "{\n  /** Whether undo is available. */\n  canUndo: boolean;\n  /** Whether redo is available. */\n  canRedo: boolean;\n  /** Number of operations that can be undone. */\n  undoDepth: number;\n  /** Number of operations that can be redone. */\n  redoDepth: number;\n  /** Description of the next undo operation, if set. */\n  nextUndoDescription: string | null;\n  /** Description of the next redo operation, if set. */\n  nextRedoDescription: string | null;\n}",
      "docstring": "Full undo/redo state from the compute engine."
    },
    "UndoStateChangeEvent": {
      "name": "UndoStateChangeEvent",
      "definition": "{\n  /** Current state */\n  state: UndoServiceState;\n  /** What triggered this change */\n  trigger: 'undo' | 'redo' | 'push' | 'clear' | 'external';\n}",
      "docstring": "Undo state change event"
    },
    "UnmergeReceipt": {
      "name": "UnmergeReceipt",
      "definition": "{\n  kind: 'unmerge';\n  range: string;\n}",
      "docstring": "Receipt for an unmerge mutation."
    },
    "UpdateWorkbookLinkInput": {
      "name": "UpdateWorkbookLinkInput",
      "definition": "{\n  expectedWorkbookId?: WorkbookId | null;\n  target?: PersistedLinkTarget;\n  displayName?: string;\n  sourceKind?: WorkbookLinkSourceKind;\n  importedExcelIdentity?: ImportedExternalLinkIdentity;\n  materializedCacheMetadata?: AuthorizedMaterializedCacheMetadata;\n}",
      "docstring": ""
    },
    "ValidationCheckResult": {
      "name": "ValidationCheckResult",
      "definition": "{\n  /** Whether the value satisfies the covering rule. */\n  valid: boolean;\n  /** Error message (only meaningful when `valid` is false). */\n  errorMessage?: string;\n  /** Error title for dialog display (only meaningful when `valid` is false). */\n  errorTitle?: string;\n  /** Error style from the covering rule. \"none\" means no rule covers the cell,\nin which case the result is trivially valid. */\n  errorStyle: 'stop' | 'warning' | 'information' | 'none';\n}",
      "docstring": "Result of validating a single cell value against the rules covering it.\n\nUses the public `errorStyle` vocabulary (\"stop\" | \"warning\" | \"information\")\nrather than the internal `enforcement` vocabulary. \"none\" indicates that no\nvalidation rule covers the cell (the value is trivially valid)."
    },
    "ValidationRule": {
      "name": "ValidationRule",
      "definition": "{\n  /** Schema ID — populated when reading, optional when creating (auto-generated if omitted) */\n  id?: string;\n  /** The cell range this rule applies to in A1 notation (e.g., \"A1:B5\") — populated when reading */\n  range?: string;\n  /** The validation type. 'none' indicates no validation rule is set. */\n  type: 'none' | 'list' | 'wholeNumber' | 'decimal' | 'date' | 'time' | 'textLength' | 'custom';\n  /** Comparison operator */\n  operator?: | 'equal'\n    | 'notEqual'\n    | 'greaterThan'\n    | 'lessThan'\n    | 'greaterThanOrEqual'\n    | 'lessThanOrEqual'\n    | 'between'\n    | 'notBetween';\n  /** Primary constraint value or formula */\n  formula1?: string | number;\n  /** Secondary constraint value or formula (for 'between' / 'notBetween') */\n  formula2?: string | number;\n  /** Explicit list of allowed values (for 'list' type) */\n  values?: string[];\n  /** Source reference for list validation: A1 range (e.g., \"=Sheet1!A1:A10\") or formula (e.g., \"=INDIRECT(A1)\"). Prefixed with \"=\" for formulas. */\n  listSource?: string;\n  /** Whether blank cells pass validation (default: true) */\n  allowBlank?: boolean;\n  /** Whether to show a dropdown arrow for list validations */\n  showDropdown?: boolean;\n  /** Whether to show an input message when the cell is selected */\n  showInputMessage?: boolean;\n  /** Title for the input message */\n  inputTitle?: string;\n  /** Body text for the input message */\n  inputMessage?: string;\n  /** Whether to show an error alert on invalid input */\n  showErrorAlert?: boolean;\n  /** Error alert style */\n  errorStyle?: 'stop' | 'warning' | 'information';\n  /** Title for the error alert */\n  errorTitle?: string;\n  /** Body text for the error alert */\n  errorMessage?: string;\n}",
      "docstring": "A data validation rule for cells."
    },
    "ValidationSetReceipt": {
      "name": "ValidationSetReceipt",
      "definition": "{\n  kind: 'validationSet';\n  address: string;\n}",
      "docstring": "Receipt for setting a validation rule."
    },
    "ViewOptions": {
      "name": "ViewOptions",
      "definition": "{\n  /** Whether gridlines are shown */\n  showGridlines: boolean;\n  /** Whether row headers are shown */\n  showRowHeaders: boolean;\n  /** Whether column headers are shown */\n  showColumnHeaders: boolean;\n}",
      "docstring": "Sheet view options (gridlines, headings)."
    },
    "ViewportBounds": {
      "name": "ViewportBounds",
      "definition": "{\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n}",
      "docstring": ""
    },
    "ViewportChangeEvent": {
      "name": "ViewportChangeEvent",
      "definition": "| { type: 'fetch-committed' }\n  | { type: 'cells-patched'; cells: { row: number; col: number }[] }\n  | { type: 'dimensions-patched'; axis: 'row' | 'col' }",
      "docstring": "Events emitted by the viewport coordinator when viewport state changes.\nConsumers subscribe to these events to react to data changes without polling."
    },
    "ViewportRegion": {
      "name": "ViewportRegion",
      "definition": "{\n  /** Unique ID for this region (auto-generated). */\n  id: string;\n  /** Sheet this region is tracking. */\n  sheetId: string;\n  /** Update the locally-tracked visible bounds (e.g., on scroll or resize).\n\n**Important:** This updates local state only. It does NOT push bounds to\nthe Rust compute engine. Rust-side viewport bounds (the prefetch range)\nare exclusively managed by the fetch manager via {@link refresh}. Pushing\nvisible bounds here would overwrite the wider prefetch range on every\nscroll, causing off-screen mutations to be silently dropped.\n\n@see plans/completed/plans/fix-offscreen-mutation-display.md — Phase 5 */\n  updateBounds(bounds: ViewportBounds): void;;\n  /** Request a data refresh for this region. */\n  refresh(scrollBehavior?: unknown): Promise<void>;;\n}",
      "docstring": "Handle for a registered viewport region.\n\nCreated by `wb.viewport.createRegion()`. The kernel tracks cell data\nfor this region and delivers incremental updates. Dispose when the\nregion is no longer needed (e.g., component unmount, sheet switch).\n\nSupports TC39 Explicit Resource Management:\n  using region = wb.viewport.createRegion(sheetId, bounds);"
    },
    "ViolinConfig": {
      "name": "ViolinConfig",
      "definition": "{\n  showBox?: boolean;\n  bandwidth?: number;\n  side?: 'both' | 'left' | 'right';\n}",
      "docstring": "Violin plot configuration"
    },
    "VisibleRangeView": {
      "name": "VisibleRangeView",
      "definition": "{\n  /** Cell values for visible rows only (2D array, same column count as input range). */\n  values: CellValue[][];\n  /** The 0-based row indices (absolute, within the sheet) of the visible rows. */\n  visibleRowIndices: number[];\n}",
      "docstring": "The result of `getVisibleView()` — only visible (non-hidden) rows from a range.\n\nMatches the visible range-view concept: a filtered view of a range that\nexcludes hidden rows (e.g., rows hidden by AutoFilter)."
    },
    "WaterfallConfig": {
      "name": "WaterfallConfig",
      "definition": "{\n  /** Indices that are \"total\" bars (drawn from zero) */\n  totalIndices?: number[];\n  /** Color for positive values */\n  increaseColor?: string;\n  /** Color for negative values */\n  decreaseColor?: string;\n  /** Color for total bars */\n  totalColor?: string;\n}",
      "docstring": "Waterfall chart configuration for special bars"
    },
    "WordArtConfig": {
      "name": "WordArtConfig",
      "definition": "{\n  /** Text warp preset type.\nDetermines the geometric transformation applied to the text. */\n  warpPreset: TextWarpPreset;\n  /** Fine-tune warp parameters.\nValues depend on the preset type. */\n  warpAdjustments?: AdjustmentValues;\n  /** Text fill (solid, gradient, pattern, or none).\nDefines how the interior of text characters is colored. */\n  fill: WordArtFill;\n  /** Text outline/stroke.\nDefines the border around text characters. */\n  outline?: WordArtOutline;\n  /** Text effects (shadow, glow, reflection, bevel, 3D).\nAdds visual effects to the text. */\n  effects?: TextEffects;\n  /** Whether text follows the warp path exactly (true) or flows naturally (false).\n\n- `true` (default): Each glyph is positioned and rotated to follow the warp path\n  tangent. Used for arc, circle, and path-following effects where text should\n  curve with the path. The rotation of each character matches the path direction.\n\n- `false`: Text maintains its baseline orientation while the overall shape is\n  warped. Used for inflate/deflate effects where text distorts but doesn't rotate.\n  Characters remain upright even as they are scaled/positioned along the path. */\n  followPath?: boolean;\n  /** Text anchoring within the warp bounds.\nControls where text is positioned within the warped area. */\n  anchor?: 'top' | 'middle' | 'bottom';\n  /** Text direction.\nAffects how text flows within the warp. */\n  textDirection?: 'ltr' | 'rtl';\n  /** Normalize letter heights across different characters.\nWhen true, all characters are scaled to have the same height. */\n  normalizeHeights?: boolean;\n}",
      "docstring": "text-effect configuration for a TextBoxObject.\n\nWhen applied to a TextBoxObject, this config transforms regular text\ninto stylized text effects with warping, fills, and effects.\n\nThis is the main configuration type for text effects - it contains all\nthe settings needed to render text with decorative styling.\n\n@see ECMA-376 Part 1, Section 21.1.2.2.33 (txBody - Text Body)\n\n@example\n// Basic text effects with arch warp\nconst config: WordArtConfig = {\n  warpPreset: 'textArchUp',\n  warpAdjustments: { adj1: 50 },\n  fill: { type: 'gradient', gradientType: 'linear', angle: 90, stops: [...] },\n  outline: { width: 1.5, color: '#000000' }\n};\n\n@example\n// text effects with effects\nconst config: WordArtConfig = {\n  warpPreset: 'textWave1',\n  fill: { type: 'solid', color: '#FF6600' },\n  effects: {\n    outerShadow: { blurRadius: 40000, distance: 25000, direction: 45, color: '#000000', opacity: 0.35 }\n  }\n};"
    },
    "WordArtConfigUpdate": {
      "name": "WordArtConfigUpdate",
      "definition": "Partial<\n  Omit<WordArtConfig, 'warpAdjustments' | 'outline' | 'effects'>\n> & {\n  /** Warp adjustment values. Explicit undefined removes stored adjustments. */\n  warpAdjustments?: AdjustmentValues | undefined;\n  /** Text outline configuration. Explicit undefined removes the outline. */\n  outline?: WordArtOutline | undefined;\n  /** Text effects. Explicit undefined removes stored effects. */\n  effects?: TextEffects | undefined;\n}",
      "docstring": "Typed patch for updating an existing text-effect configuration."
    },
    "WordArtDefaults": {
      "name": "WordArtDefaults",
      "definition": "{\n  /** Fully populated default visual text-effect configuration. */\n  config: WordArtObjectConfig;\n  /** Default text-effect object width in pixels. */\n  width: number;\n  /** Default text-effect object height in pixels. */\n  height: number;\n}",
      "docstring": "Fully normalized text effects defaults used by Worksheet text effects creation."
    },
    "WordArtFill": {
      "name": "WordArtFill",
      "definition": "SolidFill | GradientFill | PatternFill | NoFill",
      "docstring": "Union type for all fill types.\nUsed for text-effect text fill configuration."
    },
    "WordArtHandle": {
      "name": "WordArtHandle",
      "definition": "{\n  update(props: WordArtUpdates): Promise<void>;;\n  duplicate(offsetX?: number, offsetY?: number): Promise<WordArtHandle>;;\n  getData(): Promise<TextBoxObject>;;\n}",
      "docstring": "Decorative text-effect objects are text boxes with text-effect configuration."
    },
    "WordArtObjectConfig": {
      "name": "WordArtObjectConfig",
      "definition": "DomainWordArtConfig",
      "docstring": "Persisted visual text-effect configuration stored on a TextBoxObject."
    },
    "WordArtOutline": {
      "name": "WordArtOutline",
      "definition": "{\n  /** Outline width in points (1pt = 1/72 inch).\nTypical values range from 0.5 to 6 points. */\n  width: number;\n  /** Outline color (CSS color string: hex, rgb, rgba, hsl, named) */\n  color: string;\n  /** Opacity (0-1, where 0 is fully transparent, 1 is fully opaque) */\n  opacity?: number;\n  /** Dash style (default: 'solid') */\n  dash?: LineDash;\n  /** Line cap style (default: 'flat') */\n  cap?: LineCap;\n  /** Line join style (default: 'round') */\n  join?: LineJoin;\n  /** Miter limit for miter joins.\nWhen the miter length exceeds this ratio of the line width,\nthe join is rendered as a bevel instead. */\n  miterLimit?: number;\n  /** Compound line type for multi-stroke outlines */\n  compound?: CompoundLine;\n}",
      "docstring": "text-effect text outline configuration.\nDefines the stroke/border around text characters.\n\n@see ECMA-376 Part 1, Section 20.1.8.38 (CT_LineProperties)"
    },
    "WordArtTextFormatUpdate": {
      "name": "WordArtTextFormatUpdate",
      "definition": "Partial<NonNullable<ShapeText['format']>>",
      "docstring": "Text-format fields accepted by text-effect text formatting updates."
    },
    "WordArtUpdates": {
      "name": "WordArtUpdates",
      "definition": "{\n  /** Updated text content. */\n  text?: string;\n  /** Warp preset name (text geometric transformation). */\n  warp?: TextWarpPreset;\n  /** Warp adjustment values. */\n  warpAdjustments?: AdjustmentValues;\n  /** Fill configuration. */\n  fill?: WordArtFill;\n  /** Outline configuration. Explicit undefined removes the outline. */\n  outline?: WordArtOutline | undefined;\n  /** Text effects (shadow, glow, reflection, etc.). */\n  effects?: TextEffects;\n  /** Full text-effect configuration batch update. */\n  config?: WordArtConfigUpdate;\n  /** Text formatting update. */\n  textFormat?: WordArtTextFormatUpdate;\n}",
      "docstring": "Updates for existing text effects."
    },
    "WorkbookChangeRecord": {
      "name": "WorkbookChangeRecord",
      "definition": "{\n  /** Sheet name where the change occurred. */\n  sheet: string;\n  /** Cell address in A1 notation (e.g., \"B1\"). */\n  address: string;\n  /** 0-based row index. */\n  row: number;\n  /** 0-based column index. */\n  col: number;\n  /** What caused this change. */\n  origin: ChangeOrigin;\n  /** Type of change. */\n  type: 'modified';\n  /** Value before the change (undefined if cell was previously empty). */\n  oldValue?: unknown;\n  /** Value after the change (undefined if cell was cleared). */\n  newValue?: unknown;\n}",
      "docstring": "A single cell-level change observed by a workbook tracker. Includes sheet name."
    },
    "WorkbookChangeTracker": {
      "name": "WorkbookChangeTracker",
      "definition": "{\n  /** Drain accumulated changes since creation or last collect() call. */\n  collect(): WorkbookCollectResult;;\n  /** Async version of collect() that resolves sheet names across the Rust bridge.\nPreferred over collect() when called from async context.\nFalls back to raw sheet IDs if name resolution fails. */\n  collectAsync(): Promise<WorkbookCollectResult>;;\n  /** Stop tracking and release internal resources. */\n  close(): void;;\n  /** Whether this tracker is still active (not closed). */\n  active: boolean;\n}",
      "docstring": "A handle that accumulates change records across all sheets."
    },
    "WorkbookCollectResult": {
      "name": "WorkbookCollectResult",
      "definition": "{\n  /** Accumulated change records. */\n  records: WorkbookChangeRecord[];\n  /** True if the tracker hit its limit and stopped accumulating. */\n  truncated: boolean;\n  /** Total changes observed (may exceed records.length when truncated). */\n  totalObserved: number;\n}",
      "docstring": "Result from collecting workbook-level changes."
    },
    "WorkbookCustomListInput": {
      "name": "WorkbookCustomListInput",
      "definition": "{\n  /** Display name for the user-defined list. */\n  name: string;\n  /** Ordered values used by fill and custom sort operations. */\n  values: readonly string[];\n}",
      "docstring": ""
    },
    "WorkbookCustomListUpdate": {
      "name": "WorkbookCustomListUpdate",
      "definition": "{\n  /** Updated display name. Omit to keep the current name. */\n  name?: string;\n  /** Updated ordered values. Omit to keep the current values. */\n  values?: readonly string[];\n}",
      "docstring": ""
    },
    "WorkbookId": {
      "name": "WorkbookId",
      "definition": "string",
      "docstring": ""
    },
    "WorkbookLinkSourceKind": {
      "name": "WorkbookLinkSourceKind",
      "definition": "'mog-workbook' | 'excel-workbook' | 'dde-link' | 'ole-link'",
      "docstring": ""
    },
    "WorkbookProtectionOptions": {
      "name": "WorkbookProtectionOptions",
      "definition": "{\n  /** Protect workbook structure (prevents sheet add/delete/move/rename/hide/unhide).\nDefault: true when protection is enabled. */\n  structure: boolean;\n}",
      "docstring": "Workbook protection options - matches Excel behavior.\nWorkbook protection prevents structural changes to sheets.\n\nWhen a workbook is protected:\n- Users cannot add, delete, rename, hide, unhide, or move sheets\n- Sheet content can still be edited (unless sheet is also protected)\n\nPlan 08: Dialogs - Task 4 (Protect Workbook Dialog)"
    },
    "WorkbookSessionId": {
      "name": "WorkbookSessionId",
      "definition": "string",
      "docstring": ""
    },
    "WorkbookSettings": {
      "name": "WorkbookSettings",
      "definition": "{\n  /** Whether horizontal scrollbar is visible (default: true) */\n  showHorizontalScrollbar: boolean;\n  /** Whether vertical scrollbar is visible (default: true) */\n  showVerticalScrollbar: boolean;\n  /** Whether scrollbars auto-hide when not scrolling (default: false).\nWhen true, scrollbars fade out after scroll ends and reappear on hover or scroll.\nPlan 09 Group 7.2: Auto-Hide Scroll Bars */\n  autoHideScrollBars: boolean;\n  /** Whether the tab strip is visible (default: true) */\n  showTabStrip: boolean;\n  /** Whether sheets can be reordered by dragging (default: true) */\n  allowSheetReorder: boolean;\n  /** Whether the formula bar is visible (default: true) */\n  showFormulaBar: boolean;\n  /** Whether to auto-fit column width on header double-click (default: true) */\n  autoFitOnDoubleClick: boolean;\n  /** ID of active theme.\nBuilt-in theme IDs: 'office', 'slice', 'vapor-trail', etc.\nUse 'custom' to indicate a custom theme is stored in customTheme.\nIssue 4: Page Layout - Themes */\n  themeId: string;\n  /** Override for theme fonts. When set, uses this font theme instead\nof the fonts from the selected theme.\nBuilt-in font theme IDs: 'office', 'arial', 'times', 'calibri', etc.\nundefined means use fonts from themeId.\n\nPlan 12: Fonts/Typography - Theme Font UI */\n  themeFontsId?: string;\n  /** Locale/culture for number, date, and currency formatting.\nUses IETF language tags: 'en-US', 'de-DE', 'ja-JP', etc.\nDefault: 'en-US'\n\nThis affects:\n- Decimal and thousands separators (1,234.56 vs 1.234,56)\n- Currency symbol position ($100 vs 100 €)\n- Date format patterns (MM/DD/YYYY vs DD.MM.YYYY)\n- Month and day name translations\n- AM/PM designators\n\nStream G: Culture & Localization */\n  culture: string;\n  /** Whether to show cut/copy indicator (marching ants). Default: true */\n  showCutCopyIndicator: boolean;\n  /** Whether fill handle dragging is enabled. Default: true */\n  allowDragFill: boolean;\n  /** Direction to move after pressing Enter. Default: 'down' */\n  enterKeyDirection: EnterKeyDirection;\n  /** Whether cell drag-and-drop to move cells is enabled. Default: false (not yet implemented) */\n  allowCellDragDrop: boolean;\n  /** Currently selected sheet IDs for multi-sheet operations.\nDefault: undefined (falls back to [activeSheetId])\n\nThis is collaborative state - other users can see which sheets you have selected.\nUsed for operations that broadcast to multiple sheets (formatting, structure changes).\n\nWhen multiple sheets are selected:\n- Formatting operations apply to all selected sheets\n- Structure operations (insert/delete rows/cols) apply to all selected sheets\n- The active sheet is always included in the selection */\n  selectedSheetIds?: SheetId[];\n  /** Whether the workbook structure is protected.\nWhen true, prevents adding, deleting, renaming, hiding, unhiding, or moving sheets.\nDefault: false\n\nPlan 08: Dialogs - Task 4 (Protect Workbook Dialog) */\n  isWorkbookProtected?: boolean;\n  /** Hashed protection password for workbook (optional).\nUses XLSX-compatible XOR hash algorithm for round-trip compatibility.\nEmpty string or undefined means no password protection. */\n  workbookProtectionPasswordHash?: string;\n  /** Workbook protection options (what operations are prevented).\nOnly relevant when isWorkbookProtected is true.\nIf not set, defaults to DEFAULT_WORKBOOK_PROTECTION_OPTIONS.\n@see WorkbookProtectionOptions in protection.ts */\n  workbookProtectionOptions?: import('./document/protection').WorkbookProtectionOptions;\n  /** Calculation settings including iterative calculation for circular references.\nIf not set, defaults to DEFAULT_CALCULATION_SETTINGS.\n\n@see plans/active/spreadsheet-compatibility/04-EDITING-BEHAVIORS-PLAN.md - G.3 */\n  calculationSettings?: CalculationSettings;\n  /** Whether the workbook uses the 1904 date system (affects all date calculations).\nDefault: false (1900 date system). */\n  date1904?: boolean;\n  /** Default table style ID for new tables created in this workbook.\nCan be a built-in style preset name (e.g., 'medium2', 'dark1')\nor a custom style ID (e.g., 'custom-abc123').\n\nWhen undefined, new tables use the 'medium2' preset by default.\n\nPlan 15: Tables spreadsheet compatibility - P1-8 (Set as default style) */\n  defaultTableStyleId?: string;\n  /** Whether chart data points track cell movement when cells are inserted/deleted.\nWhen true, chart data series follow their original data points even if\nthe underlying cells shift due to row/column insertion or deletion.\nDefault: true (matches the spreadsheet default).\n\nMirrors the workbook chart data point tracking behavior. */\n  chartDataPointTrack?: boolean;\n}",
      "docstring": "Workbook-level settings (persisted in Yjs workbook metadata).\nThese apply globally to the entire workbook, not per-sheet.\nStream L: Settings & Toggles"
    },
    "WorkbookSnapshot": {
      "name": "WorkbookSnapshot",
      "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}",
      "docstring": "A summary snapshot of the entire workbook state."
    },
    "WorkbookTrackOptions": {
      "name": "WorkbookTrackOptions",
      "definition": "{\n  /** Filter by origin type. Omit to track all origins. */\n  origins?: ChangeOrigin[];\n  /** Max records before auto-truncation (default: 10000). */\n  limit?: number;\n}",
      "docstring": "Options for creating a workbook-level change tracker."
    },
    "WorksheetCreateCheckboxOptions": {
      "name": "WorksheetCreateCheckboxOptions",
      "definition": "Omit<CreateCheckboxOptions, 'sheetId'>",
      "docstring": ""
    },
    "WorksheetCreateComboBoxOptions": {
      "name": "WorksheetCreateComboBoxOptions",
      "definition": "Omit<CreateComboBoxOptions, 'sheetId'>",
      "docstring": ""
    }
  },
  "formatPresets": {
    "general": {
      "default": {
        "code": "General",
        "description": "",
        "example": "1234.5"
      }
    },
    "number": {
      "integer": {
        "code": "0",
        "description": "No decimal places",
        "example": "1235"
      },
      "decimal1": {
        "code": "0.0",
        "description": "1 decimal place",
        "example": "1234.5"
      },
      "decimal2": {
        "code": "0.00",
        "description": "2 decimal places",
        "example": "1234.50"
      },
      "decimal3": {
        "code": "0.000",
        "description": "3 decimal places",
        "example": "1234.500"
      },
      "thousands": {
        "code": "#,##0",
        "description": "Thousands separator, no decimals",
        "example": "1,235"
      },
      "thousandsDecimal1": {
        "code": "#,##0.0",
        "description": "Thousands separator, 1 decimal",
        "example": "1,234.5"
      },
      "thousandsDecimal2": {
        "code": "#,##0.00",
        "description": "Thousands separator, 2 decimals",
        "example": "1,234.50"
      },
      "negativeRed": {
        "code": "#,##0.00;[Red]-#,##0.00",
        "description": "Red negative numbers",
        "example": "-1,234.50"
      },
      "negativeParens": {
        "code": "#,##0.00;(#,##0.00)",
        "description": "Parentheses for negatives",
        "example": "(1,234.50)"
      },
      "negativeParensRed": {
        "code": "#,##0.00;[Red](#,##0.00)",
        "description": "Red parentheses for negatives",
        "example": "(1,234.50)"
      }
    },
    "currency": {
      "usd": {
        "code": "$#,##0.00",
        "description": "US Dollar",
        "example": "$1,234.50"
      },
      "usdNegMinus": {
        "code": "$#,##0.00;-$#,##0.00",
        "description": "USD minus",
        "example": "-$1,234.50"
      },
      "usdNegParens": {
        "code": "$#,##0.00;($#,##0.00)",
        "description": "USD parentheses",
        "example": "($1,234.50)"
      },
      "usdNegRed": {
        "code": "$#,##0.00;[Red]-$#,##0.00",
        "description": "USD red minus",
        "example": "-$1,234.50"
      },
      "usdNegParensRed": {
        "code": "$#,##0.00;[Red]($#,##0.00)",
        "description": "USD red parentheses",
        "example": "($1,234.50)"
      },
      "eur": {
        "code": "€#,##0.00",
        "description": "Euro",
        "example": "€1,234.50"
      },
      "gbp": {
        "code": "£#,##0.00",
        "description": "British Pound",
        "example": "£1,234.50"
      },
      "jpy": {
        "code": "¥#,##0",
        "description": "Japanese Yen (no decimals)",
        "example": "¥1,235"
      },
      "cny": {
        "code": "¥#,##0.00",
        "description": "Chinese Yuan",
        "example": "¥1,234.50"
      },
      "inr": {
        "code": "₹#,##0.00",
        "description": "Indian Rupee",
        "example": "₹1,234.50"
      },
      "krw": {
        "code": "₩#,##0",
        "description": "Korean Won (no decimals)",
        "example": "₩1,235"
      },
      "chf": {
        "code": "CHF #,##0.00",
        "description": "Swiss Franc",
        "example": "CHF 1,234.50"
      },
      "cad": {
        "code": "CA$#,##0.00",
        "description": "Canadian Dollar",
        "example": "CA$1,234.50"
      },
      "aud": {
        "code": "A$#,##0.00",
        "description": "Australian Dollar",
        "example": "A$1,234.50"
      }
    },
    "accounting": {
      "usd": {
        "code": "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)",
        "description": "USD Accounting",
        "example": "$ 1,234.50"
      },
      "eur": {
        "code": "_(€* #,##0.00_);_(€* (#,##0.00);_(€* \"-\"??_);_(@_)",
        "description": "EUR Accounting",
        "example": "€ 1,234.50"
      },
      "gbp": {
        "code": "_(£* #,##0.00_);_(£* (#,##0.00);_(£* \"-\"??_);_(@_)",
        "description": "GBP Accounting",
        "example": "£ 1,234.50"
      }
    },
    "date": {
      "shortUS": {
        "code": "m/d/yyyy",
        "description": "Short date (US)",
        "example": "12/13/2025"
      },
      "mediumUS": {
        "code": "mmm d, yyyy",
        "description": "Medium date (US)",
        "example": "Dec 13, 2025"
      },
      "longUS": {
        "code": "mmmm d, yyyy",
        "description": "Long date (US)",
        "example": "December 13, 2025"
      },
      "fullUS": {
        "code": "dddd, mmmm d, yyyy",
        "description": "Full date (US)",
        "example": "Saturday, December 13, 2025"
      },
      "iso": {
        "code": "yyyy-mm-dd",
        "description": "ISO 8601",
        "example": "2025-12-13"
      },
      "shortEU": {
        "code": "d/m/yyyy",
        "description": "Short date (EU)",
        "example": "13/12/2025"
      },
      "mediumEU": {
        "code": "d mmm yyyy",
        "description": "Medium date (EU)",
        "example": "13 Dec 2025"
      },
      "longEU": {
        "code": "d mmmm yyyy",
        "description": "Long date (EU)",
        "example": "13 December 2025"
      },
      "monthYear": {
        "code": "mmmm yyyy",
        "description": "Month and year",
        "example": "December 2025"
      },
      "monthYearShort": {
        "code": "mmm yyyy",
        "description": "Short month and year",
        "example": "Dec 2025"
      },
      "dayMonth": {
        "code": "d mmmm",
        "description": "Day and month",
        "example": "13 December"
      },
      "dayMonthShort": {
        "code": "d mmm",
        "description": "Short day and month",
        "example": "13 Dec"
      },
      "excelShort": {
        "code": "m/d/yy",
        "description": "Excel short date",
        "example": "12/13/25"
      },
      "excelMedium": {
        "code": "d-mmm-yy",
        "description": "Excel medium date",
        "example": "13-Dec-25"
      },
      "excelLong": {
        "code": "d-mmm-yyyy",
        "description": "Excel long date",
        "example": "13-Dec-2025"
      }
    },
    "time": {
      "short12": {
        "code": "h:mm AM/PM",
        "description": "12-hour short",
        "example": "3:45 PM"
      },
      "long12": {
        "code": "h:mm:ss AM/PM",
        "description": "12-hour with seconds",
        "example": "3:45:30 PM"
      },
      "short24": {
        "code": "HH:mm",
        "description": "24-hour short",
        "example": "15:45"
      },
      "long24": {
        "code": "HH:mm:ss",
        "description": "24-hour with seconds",
        "example": "15:45:30"
      },
      "dateTime12": {
        "code": "m/d/yyyy h:mm AM/PM",
        "description": "Date and 12-hour time",
        "example": "12/13/2025 3:45 PM"
      },
      "dateTime24": {
        "code": "yyyy-mm-dd HH:mm",
        "description": "ISO date and 24-hour time",
        "example": "2025-12-13 15:45"
      },
      "durationHM": {
        "code": "[h]:mm",
        "description": "Hours and minutes (elapsed)",
        "example": "25:30"
      },
      "durationHMS": {
        "code": "[h]:mm:ss",
        "description": "Hours, minutes, seconds (elapsed)",
        "example": "25:30:45"
      },
      "durationMS": {
        "code": "[mm]:ss",
        "description": "Minutes and seconds (elapsed)",
        "example": "1530:45"
      }
    },
    "percentage": {
      "integer": {
        "code": "0%",
        "description": "No decimal places",
        "example": "50%"
      },
      "decimal1": {
        "code": "0.0%",
        "description": "1 decimal place",
        "example": "50.0%"
      },
      "decimal2": {
        "code": "0.00%",
        "description": "2 decimal places",
        "example": "50.00%"
      },
      "decimal3": {
        "code": "0.000%",
        "description": "3 decimal places",
        "example": "50.000%"
      }
    },
    "fraction": {
      "halves": {
        "code": "# ?/2",
        "description": "Halves (1/2)",
        "example": "1 1/2"
      },
      "quarters": {
        "code": "# ?/4",
        "description": "Quarters (1/4)",
        "example": "1 1/4"
      },
      "eighths": {
        "code": "# ?/8",
        "description": "Eighths (1/8)",
        "example": "1 3/8"
      },
      "sixteenths": {
        "code": "# ??/16",
        "description": "Sixteenths (1/16)",
        "example": "1 5/16"
      },
      "tenths": {
        "code": "# ?/10",
        "description": "Tenths (1/10)",
        "example": "1 3/10"
      },
      "hundredths": {
        "code": "# ??/100",
        "description": "Hundredths (1/100)",
        "example": "1 25/100"
      },
      "upToOneDigit": {
        "code": "# ?/?",
        "description": "Up to one digit (1/4)",
        "example": "1 2/3"
      },
      "upToTwoDigits": {
        "code": "# ??/??",
        "description": "Up to two digits (21/25)",
        "example": "1 25/67"
      },
      "upToThreeDigits": {
        "code": "# ???/???",
        "description": "Up to three digits (312/943)",
        "example": "1 312/943"
      }
    },
    "scientific": {
      "default": {
        "code": "0.00E+00",
        "description": "2 decimal places",
        "example": "1.23E+03"
      },
      "decimal1": {
        "code": "0.0E+00",
        "description": "1 decimal place",
        "example": "1.2E+03"
      },
      "decimal3": {
        "code": "0.000E+00",
        "description": "3 decimal places",
        "example": "1.235E+03"
      },
      "noDecimals": {
        "code": "0E+00",
        "description": "No decimal places",
        "example": "1E+03"
      }
    },
    "text": {
      "default": {
        "code": "@",
        "description": "Display as entered",
        "example": "1234"
      }
    },
    "special": {
      "zipCode": {
        "code": "00000",
        "description": "ZIP Code (5-digit)",
        "example": "01234"
      },
      "zipPlus4": {
        "code": "00000-0000",
        "description": "ZIP+4 Code",
        "example": "01234-5678"
      },
      "phone": {
        "code": "(###) ###-####",
        "description": "Phone Number",
        "example": "(555) 123-4567"
      },
      "ssn": {
        "code": "000-00-0000",
        "description": "Social Security Number",
        "example": "123-45-6789"
      }
    },
    "custom": {}
  },
  "defaultFormats": {
    "accounting": "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)",
    "currency": "$#,##0.00",
    "custom": "General",
    "date": "m/d/yyyy",
    "fraction": "# ?/?",
    "general": "General",
    "number": "#,##0.00",
    "percentage": "0.00%",
    "scientific": "0.00E+00",
    "special": "00000",
    "text": "@",
    "time": "h:mm AM/PM"
  }
}
