/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */

/**
 * AUTO-GENERATED — do not edit by hand.
 * Run: npx tsx scripts/generate-bim-globals.ts
 *
 * Type declarations for the sandbox `bim` global.
 * Generated from NAMESPACE_SCHEMAS in bridge-schema.ts.
 */

// ── Entity types ────────────────────────────────────────────────────────

interface BimEntity {
  ref: { modelId: string; expressId: number };
  name: string; Name: string;
  type: string; Type: string;
  globalId: string; GlobalId: string;
  description: string; Description: string;
  objectType: string; ObjectType: string;
}

interface BimPropertySet {
  name: string;
  properties: Array<{ name: string; value: string | number | boolean | null }>;
}

interface BimQuantitySet {
  name: string;
  quantities: Array<{ name: string; value: number | null }>;
}

interface BimAttribute {
  name: string;
  value: string;
}

interface BimClassification {
  system?: string;
  identification?: string;
  name?: string;
  location?: string;
  description?: string;
  path?: string[];
}

interface BimMaterialLayer {
  materialName?: string;
  thickness?: number;
  isVentilated?: boolean;
  name?: string;
  category?: string;
}

interface BimMaterialProfile {
  materialName?: string;
  name?: string;
  category?: string;
}

interface BimMaterialConstituent {
  materialName?: string;
  name?: string;
  fraction?: number;
  category?: string;
}

interface BimMaterial {
  type: 'Material' | 'MaterialLayerSet' | 'MaterialProfileSet' | 'MaterialConstituentSet' | 'MaterialList';
  name?: string;
  description?: string;
  layers?: BimMaterialLayer[];
  profiles?: BimMaterialProfile[];
  constituents?: BimMaterialConstituent[];
  materials?: string[];
}

interface BimTypeProperties {
  typeName: string;
  typeId: number;
  properties: BimPropertySet[];
}

interface BimDocument {
  name?: string;
  description?: string;
  location?: string;
  identification?: string;
  purpose?: string;
  intendedUse?: string;
  revision?: string;
  confidentiality?: string;
}

interface BimRelationships {
  voids: Array<{ id: number; name?: string; type: string }>;
  fills: Array<{ id: number; name?: string; type: string }>;
  groups: Array<{ id: number; name?: string }>;
  connections: Array<{ id: number; name?: string; type: string }>;
}

interface BimModelInfo {
  id: string;
  name: string;
  schemaVersion: string;
  entityCount: number;
  fileSize: number;
}

interface BimFileAttachment {
  name: string;
  type: string;
  size: number;
  rowCount?: number;
  columns?: string[];
  hasTextContent: boolean;
}

// ── Namespace declarations ──────────────────────────────────────────────

declare const bim: {
  /** Model operations */
  model: {
    /** List loaded models */
    list(): BimModelInfo[];
    /** Get active model */
    active(): BimModelInfo | null;
    /** Get active model ID */
    activeId(): string | null;
    /** Load IFC content into the 3D viewer for preview */
    loadIfc(content: string, filename: string): void;
  };
  /** Query entities */
  query: {
    /** Get all entities */
    all(): BimEntity[];
    /** Filter by IFC type e.g. 'IfcWall' */
    byType(...types: string[]): BimEntity[];
    /** Get entity by model ID and express ID */
    entity(modelId: string, expressId: number): BimEntity | null;
    /** Get all named string/enum attributes for an entity */
    attributes(entity: BimEntity): BimAttribute[];
    /** Get all IfcPropertySet data for an entity */
    properties(entity: BimEntity): BimPropertySet[];
    /** Get all IfcElementQuantity data for an entity */
    quantities(entity: BimEntity): BimQuantitySet[];
    /** Get a single property value from an entity */
    property(entity: BimEntity, psetName: string, propName: string): string | number | boolean | null;
    /** Get classification references for an entity */
    classifications(entity: BimEntity): BimClassification[];
    /** Get material assignment for an entity */
    materials(entity: BimEntity): BimMaterial | null;
    /** Get type-level property sets for an entity */
    typeProperties(entity: BimEntity): BimTypeProperties | null;
    /** Get linked document references for an entity */
    documents(entity: BimEntity): BimDocument[];
    /** Get structural relationship summary for an entity */
    relationships(entity: BimEntity): BimRelationships;
    /** Get a single quantity value from an entity */
    quantity(entity: BimEntity, qsetName: string, quantityName: string): number | null;
    /** Get related entities by IFC relationship type */
    related(entity: BimEntity, relType: string, direction: 'forward' | 'inverse'): BimEntity[];
    /** Get the spatial container of an entity */
    containedIn(entity: BimEntity): BimEntity | null;
    /** Get entities contained in a spatial container */
    contains(entity: BimEntity): BimEntity[];
    /** Get the parent aggregate of an entity */
    decomposedBy(entity: BimEntity): BimEntity | null;
    /** Get aggregated children of an entity */
    decomposes(entity: BimEntity): BimEntity[];
    /** Get the containing building storey of an entity */
    storey(entity: BimEntity): BimEntity | null;
    /** Get the spatial/aggregation path from project to entity */
    path(entity: BimEntity): BimEntity[];
    /** List all building storeys */
    storeys(): BimEntity[];
    /** Get the current viewer selection as entities */
    selection(): BimEntity[];
  };
  /** Viewer control */
  viewer: {
    /** Colorize entities e.g. '#ff0000' */
    colorize(entities: BimEntity[], color: string): void;
    /** Batch colorize with [{entities, color}] */
    colorizeAll(batches: Array<{ entities: BimEntity[]; color: string }>): void;
    /** Hide entities */
    hide(entities: BimEntity[]): void;
    /** Show entities */
    show(entities: BimEntity[]): void;
    /** Isolate entities */
    isolate(entities: BimEntity[]): void;
    /** Select entities */
    select(entities: BimEntity[]): void;
    /** Fly camera to entities */
    flyTo(entities: BimEntity[]): void;
    /** Reset all colors */
    resetColors(): void;
    /** Reset all visibility */
    resetVisibility(): void;
  };
  /** Property editing */
  mutate: {
    /** Set an IfcPropertySet or quantity value (not a root IFC attribute) */
    setProperty(entity: unknown, psetName: string, propName: string, value: unknown): void;
    /** Set a root IFC attribute such as Name, Description, ObjectType, or Tag */
    setAttribute(entity: unknown, attrName: string, value: string): void;
    /** Delete a property */
    deleteProperty(entity: unknown, psetName: string, propName: string): void;
    /** Undo last mutation */
    undo(modelId: string): void;
    /** Redo undone mutation */
    redo(modelId: string): void;
  };
  /** Document-level edits — add, remove, and edit positional STEP arguments on entities of a parsed model */
  store: {
    /** Inject a new entity into the active model. Returns an EntityRef for the freshly-allocated expressId. */
    addEntity(modelId: string, def: { type: string; attributes: unknown[] }): { modelId: string; expressId: number };
    /** Remove an entity. Tombstones existing entities; forgets overlay-only ones. Returns false if the id is unknown. */
    removeEntity(entity: { modelId: string; expressId: number }): boolean;
    /** Edit a non-IfcRoot attribute by zero-based STEP argument index (e.g. IfcRectangleProfileDef.XDim is index 3). */
    setPositionalAttribute(entity: { modelId: string; expressId: number }, index: number, value: unknown): void;
    /** Add an IfcColumn to a parsed model anchored to an existing IfcBuildingStorey. Returns the new column entity ref. */
    addColumn(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Depth: number; Height: number; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcWall from Start to End anchored to an IfcBuildingStorey. Returns the new wall entity ref. */
    addWall(modelId: string, storeyExpressId: number, params: { Start: [number, number, number]; End: [number, number, number]; Thickness: number; Height: number; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcSlab anchored to an IfcBuildingStorey. Two modes: rectangle (Position + Width + Depth) or polygon (OuterCurve = Array<[x, y]> with ≥3 points). */
    addSlab(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Depth: number; Thickness: number; Profile?: "rectangle"; Name?: string; Description?: string; ObjectType?: string; Tag?: string } | { Profile: "polygon"; OuterCurve: Array<[number, number]>; Position?: [number, number, number]; Thickness: number; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcBeam from Start to End with a centred rectangular cross-section. */
    addBeam(modelId: string, storeyExpressId: number, params: { Start: [number, number, number]; End: [number, number, number]; Width: number; Height: number; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add a free-standing IfcDoor anchored to an IfcBuildingStorey. */
    addDoor(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Height: number; FrameThickness?: number; PredefinedType?: string; OperationType?: string; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add a free-standing IfcWindow anchored to an IfcBuildingStorey. */
    addWindow(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Height: number; FrameThickness?: number; PredefinedType?: string; PartitioningType?: string; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcSpace (room) — rectangle or polygon footprint extruded by Height. */
    addSpace(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Depth: number; Height: number; Profile?: "rectangle"; Name?: string; LongName?: string; Description?: string; ObjectType?: string } | { Profile: "polygon"; OuterCurve: Array<[number, number]>; Position?: [number, number, number]; Height: number; Name?: string; LongName?: string; Description?: string; ObjectType?: string }): { modelId: string; expressId: number };
    /** Add an IfcRoof (flat-roof slab variant). Two modes: rectangle or polygon. */
    addRoof(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Depth: number; Thickness: number; Profile?: "rectangle"; Name?: string; Description?: string; ObjectType?: string; Tag?: string } | { Profile: "polygon"; OuterCurve: Array<[number, number]>; Position?: [number, number, number]; Thickness: number; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcPlate (thin flat element). Two modes: rectangle or polygon. */
    addPlate(modelId: string, storeyExpressId: number, params: { Position: [number, number, number]; Width: number; Depth: number; Thickness: number; Profile?: "rectangle"; PredefinedType?: string; Name?: string; Description?: string; ObjectType?: string; Tag?: string } | { Profile: "polygon"; OuterCurve: Array<[number, number]>; Position?: [number, number, number]; Thickness: number; PredefinedType?: string; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
    /** Add an IfcMember (generic structural member — brace, post, strut) from Start to End. */
    addMember(modelId: string, storeyExpressId: number, params: { Start: [number, number, number]; End: [number, number, number]; Width: number; Height: number; PredefinedType?: string; Name?: string; Description?: string; ObjectType?: string; Tag?: string }): { modelId: string; expressId: number };
  };
  /** Lens visualization */
  lens: {
    /** Get built-in lens presets */
    presets(): unknown[];
  };
  /** IFC creation from scratch */
  create: {
    /** Create a new IFC project. Returns a creator handle (number). */
    project(params: { Name?: string; Description?: string; Schema?: string; LengthUnit?: string; Author?: string; Organization?: string }): number;
    /** Generate the IFC STEP file content. Returns { content, entities, stats }. */
    toIfc(handle: number): { content: string; entities: Array<{ expressId: number; type: string; Name?: string }>; stats: { entityCount: number; fileSize: number } };
    /** Assign a named colour to an element. Call before toIfc(). */
    setColor(handle: number, elementId: number, name: string, rgb: unknown): void;
    /** Create an IfcWorkSchedule. Returns schedule expressId. */
    addIfcWorkSchedule(handle: number, params: { Name: string; StartTime: string; FinishTime?: string; CreationDate?: string; Description?: string; Identification?: string; Purpose?: string; Duration?: string; TotalFloat?: string; PredefinedType?: 'ACTUAL' | 'BASELINE' | 'PLANNED' | 'USERDEFINED' | 'NOTDEFINED' }): number;
    /** Create an IfcWorkPlan (groups multiple schedules). Returns plan expressId. */
    addIfcWorkPlan(handle: number, params: { Name: string; StartTime: string; FinishTime?: string; CreationDate?: string; Description?: string; Identification?: string; Purpose?: string; Duration?: string; PredefinedType?: 'ACTUAL' | 'BASELINE' | 'PLANNED' | 'USERDEFINED' | 'NOTDEFINED' }): number;
    /** Create an IfcTask. Provide ScheduleStart + ScheduleFinish (or ScheduleDuration) for time fields. Returns task expressId. */
    addIfcTask(handle: number, params: { Name: string; Description?: string; Identification?: string; LongDescription?: string; Status?: string; WorkMethod?: string; IsMilestone?: boolean; Priority?: number; ObjectType?: string; ScheduleStart?: string; ScheduleFinish?: string; ScheduleDuration?: string; ActualStart?: string; ActualFinish?: string; ActualDuration?: string; EarlyStart?: string; EarlyFinish?: string; LateStart?: string; LateFinish?: string; FreeFloat?: string; TotalFloat?: string; IsCritical?: boolean; DurationType?: 'WORKTIME' | 'ELAPSEDTIME' | 'NOTDEFINED'; Completion?: number; PredefinedType?: 'ATTENDANCE' | 'CONSTRUCTION' | 'DEMOLITION' | 'DISMANTLE' | 'DISPOSAL' | 'INSTALLATION' | 'LOGISTIC' | 'MAINTENANCE' | 'MOVE' | 'OPERATION' | 'REMOVAL' | 'RENOVATION' | 'USERDEFINED' | 'NOTDEFINED' | 'ADJUSTMENT' | 'CALIBRATION' | 'EMERGENCY' | 'INSPECTION' | 'SAFETY' | 'SHUTDOWN' | 'STARTUP' | 'TESTING' | 'TROUBLESHOOTING' }): number;
    /** Link predecessor → successor tasks via IfcRelSequence. Returns relationship expressId. */
    addIfcRelSequence(handle: number, predecessorTaskId: number, successorTaskId: number, params: { SequenceType?: 'START_START' | 'START_FINISH' | 'FINISH_START' | 'FINISH_FINISH' | 'USERDEFINED' | 'NOTDEFINED'; TimeLag?: string; LagDurationType?: 'WORKTIME' | 'ELAPSEDTIME' | 'NOTDEFINED'; UserDefinedSequenceType?: string }): number;
    /** Canonical IfcRelAssignsToControl — bind IfcObjectDefinitions (tasks or sub-schedules) to an IfcControl (IfcWorkSchedule/IfcWorkPlan). Returns relationship expressId. */
    addIfcRelAssignsToControl(handle: number, relatingControlId: number, relatedObjectIds: number[]): number;
    /** Canonical IfcRelAssignsToProcess — bind products to an IfcProcess (task). Drives the 4D Gantt animation. Returns relationship expressId. */
    addIfcRelAssignsToProcess(handle: number, relatingProcessId: number, relatedObjectIds: number[]): number;
    /** Canonical IfcRelNests — nest child objects under a parent (task WBS hierarchy). Returns relationship expressId. */
    addIfcRelNests(handle: number, relatingObjectId: number, relatedObjectIds: number[]): number;
    /** Ergonomic alias for addIfcRelAssignsToControl — assign tasks to a work schedule. Returns relationship expressId. */
    assignTasksToWorkSchedule(handle: number, scheduleId: number, taskIds: number[]): number;
    /** Ergonomic alias for addIfcRelAssignsToControl — attach work schedules to a parent IfcWorkPlan. Returns relationship expressId. */
    assignSchedulesToWorkPlan(handle: number, planId: number, scheduleIds: number[]): number;
    /** Ergonomic alias for addIfcRelAssignsToProcess — bind products to a task. Returns relationship expressId. */
    assignProductsToTask(handle: number, taskId: number, productIds: number[]): number;
    /** Ergonomic alias for addIfcRelNests — nest child tasks under a summary parent. Returns relationship expressId. */
    nestTasks(handle: number, parentTaskId: number, childTaskIds: number[]): number;
    /** Create ANY IFC type extruded along a Start→End axis. Returns expressId. */
    addAxisElement(handle: number, storeyId: number, params: unknown): number;
    /** Create ANY IFC type with a profile at a placement. Returns expressId. */
    addElement(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcBeam. Returns expressId. */
    addIfcBeam(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcBuildingElementProxy. Returns expressId. */
    addIfcBuildingElementProxy(handle: number, storeyId: number, params: unknown): number;
    /** Add a building storey. Returns storey expressId. */
    addIfcBuildingStorey(handle: number, params: unknown): number;
    /** Add IfcCircularColumn. Returns expressId. */
    addIfcCircularColumn(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcColumn. Returns expressId. */
    addIfcColumn(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcCurtainWall. Returns expressId. */
    addIfcCurtainWall(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcDoor. Returns expressId. */
    addIfcDoor(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcElementQuantity. Returns expressId. */
    addIfcElementQuantity(handle: number, elementId: number, params: unknown): number;
    /** Add IfcFooting. Returns expressId. */
    addIfcFooting(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcFurnishingElement. Returns expressId. */
    addIfcFurnishingElement(handle: number, storeyId: number, params: unknown): number;
    /** Add a dual-pitch gable roof. `Slope` is in radians. Returns roof expressId. */
    addIfcGableRoof(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcHollowCircularColumn. Returns expressId. */
    addIfcHollowCircularColumn(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcIShapeBeam. Returns expressId. */
    addIfcIShapeBeam(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcLShapeMember. Returns expressId. */
    addIfcLShapeMember(handle: number, storeyId: number, params: unknown): number;
    /** Associate a material with an element via IfcRelAssociatesMaterial (deferred to toIfc). Returns nothing. */
    addIfcMaterial(handle: number, elementId: number, params: unknown): void;
    /** Add IfcMember. Returns expressId. */
    addIfcMember(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcPile. Returns expressId. */
    addIfcPile(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcPlate. Returns expressId. */
    addIfcPlate(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcPropertySet. Returns expressId. */
    addIfcPropertySet(handle: number, elementId: number, params: unknown): number;
    /** Add IfcRailing. Returns expressId. */
    addIfcRailing(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcRamp. Returns expressId. */
    addIfcRamp(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcRectangleHollowBeam. Returns expressId. */
    addIfcRectangleHollowBeam(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcRoof. Returns expressId. */
    addIfcRoof(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcSlab. Returns expressId. */
    addIfcSlab(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcSpace. Returns expressId. */
    addIfcSpace(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcStair. Returns expressId. */
    addIfcStair(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcTShapeMember. Returns expressId. */
    addIfcTShapeMember(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcUShapeMember. Returns expressId. */
    addIfcUShapeMember(handle: number, storeyId: number, params: unknown): number;
    /** Add IfcWall. Returns expressId. */
    addIfcWall(handle: number, storeyId: number, params: unknown): number;
    /** Add a door hosted in a wall opening. Position is wall-local [alongWall, 0, baseHeight]. Returns door expressId. */
    addIfcWallDoor(handle: number, wallId: number, params: unknown): number;
    /** Add a window hosted in a wall opening. Position is wall-local [alongWall, 0, sillHeight]. Returns window expressId. */
    addIfcWallWindow(handle: number, wallId: number, params: unknown): number;
    /** Add IfcWindow. Returns expressId. */
    addIfcWindow(handle: number, storeyId: number, params: unknown): number;
    /** Create a profile from a ProfileDef union. Returns profile ID. */
    createProfile(handle: number, profile: unknown): number;
    /** Get the world placement ID for use with addLocalPlacement. */
    getWorldPlacementId(handle: number): number;
  };
  /** Uploaded file attachments */
  files: {
    /** List uploaded file attachments available to scripts */
    list(): BimFileAttachment[];
    /** Get raw text content for an uploaded attachment by file name */
    text(name: string): string | null;
    /** Get parsed CSV/TSV rows for an uploaded attachment by file name */
    csv(name: string): Record<string, string>[] | null;
    /** Get parsed CSV column names for an uploaded attachment by file name */
    csvColumns(name: string): string[];
  };
  /** 4D / IFC construction schedule reader (IfcTask, IfcWorkSchedule, IfcRelSequence) */
  schedule: {
    /** Full schedule extraction — tasks, dependencies, and work schedules. */
    data(modelId?: string): { HasSchedule: boolean; WorkSchedules: Array<{ GlobalId: string; ExpressId: number; Name: string; Description?: string; Identification?: string; CreationDate?: string; StartTime?: string; FinishTime?: string; Purpose?: string; Duration?: string; PredefinedType?: string; Kind: 'WorkSchedule' | 'WorkPlan'; TaskGlobalIds: string[] }>; Tasks: Array<{ GlobalId: string; ExpressId: number; Name: string; Description?: string; ObjectType?: string; Identification?: string; LongDescription?: string; Status?: string; WorkMethod?: string; IsMilestone: boolean; Priority?: number; PredefinedType?: string; ParentTaskGlobalId?: string; ChildTaskGlobalIds: string[]; AssignedProductExpressIds: number[]; AssignedProductGlobalIds: string[]; ControllingScheduleGlobalIds: string[]; TaskTime?: { ScheduleStart?: string; ScheduleFinish?: string; ScheduleDuration?: string; ActualStart?: string; ActualFinish?: string; ActualDuration?: string; EarlyStart?: string; EarlyFinish?: string; LateStart?: string; LateFinish?: string; FreeFloat?: string; TotalFloat?: string; RemainingTime?: string; StatusTime?: string; IsCritical?: boolean; Completion?: number; DurationType?: 'WORKTIME' | 'ELAPSEDTIME' | 'NOTDEFINED' } }>; Sequences: Array<{ RelatingProcessGlobalId: string; RelatedProcessGlobalId: string; SequenceType: 'START_START' | 'START_FINISH' | 'FINISH_START' | 'FINISH_FINISH' | 'USERDEFINED' | 'NOTDEFINED'; UserDefinedSequenceType?: string; TimeLagSeconds?: number; TimeLagDuration?: string }> };
    /** All IfcTask entities with their times and assigned products. */
    tasks(modelId?: string): Array<{ GlobalId: string; ExpressId: number; Name: string; Description?: string; ObjectType?: string; Identification?: string; LongDescription?: string; Status?: string; WorkMethod?: string; IsMilestone: boolean; Priority?: number; PredefinedType?: string; ParentTaskGlobalId?: string; ChildTaskGlobalIds: string[]; AssignedProductExpressIds: number[]; AssignedProductGlobalIds: string[]; ControllingScheduleGlobalIds: string[]; TaskTime?: { ScheduleStart?: string; ScheduleFinish?: string; ScheduleDuration?: string; ActualStart?: string; ActualFinish?: string; ActualDuration?: string; EarlyStart?: string; EarlyFinish?: string; LateStart?: string; LateFinish?: string; FreeFloat?: string; TotalFloat?: string; RemainingTime?: string; StatusTime?: string; IsCritical?: boolean; Completion?: number; DurationType?: 'WORKTIME' | 'ELAPSEDTIME' | 'NOTDEFINED' } }>;
    /** All IfcWorkSchedule and IfcWorkPlan containers. */
    workSchedules(modelId?: string): Array<{ GlobalId: string; ExpressId: number; Name: string; Description?: string; Identification?: string; CreationDate?: string; StartTime?: string; FinishTime?: string; Purpose?: string; Duration?: string; PredefinedType?: string; Kind: 'WorkSchedule' | 'WorkPlan'; TaskGlobalIds: string[] }>;
    /** All IfcRelSequence dependency edges (FS/SS/FF/SF, with optional IfcLagTime). */
    sequences(modelId?: string): Array<{ RelatingProcessGlobalId: string; RelatedProcessGlobalId: string; SequenceType: 'START_START' | 'START_FINISH' | 'FINISH_START' | 'FINISH_FINISH' | 'USERDEFINED' | 'NOTDEFINED'; UserDefinedSequenceType?: string; TimeLagSeconds?: number; TimeLagDuration?: string }>;
  };
  /** Data export */
  export: {
    /** Export entities to CSV string */
    csv(entities: BimEntity[], options: { columns: string[]; filename?: string; separator?: string }): string;
    /** Export entities to JSON array */
    json(entities: BimEntity[], columns: string[]): Record<string, unknown>[];
    /** Export entities to IFC STEP text. Pass filename to auto-download a valid .ifc file */
    ifc(entities: BimEntity[], options: { schema?: "IFC2X3" | "IFC4" | "IFC4X3"; filename?: string; includeMutations?: boolean; visibleOnly?: boolean }): string | Uint8Array;
    /** Trigger a browser file download with the given content. mimeType defaults to text/plain. */
    download(content: string, filename: string, mimeType?: string): void;
  };
};
