@imgly/codesign-mcp 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/docs/api/index.d.ts +457 -27
- package/dist/assets/inline.generated.js +1 -1
- package/dist/assets/inline.generated.js.map +1 -1
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -1
- package/dist/test/tsconfig.test.tsbuildinfo +1 -1
- package/dist/viewer/spa-assets.generated.js +1 -1
- package/dist/viewer/spa-assets.generated.js.map +1 -1
- package/package.json +7 -4
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Run `npm run -w @imgly/codesign-mcp prebuild` (or `build`) to refresh.
|
|
3
3
|
export const INLINE_ASSETS = {
|
|
4
4
|
"docs/api/SKILL.md": "---\nname: api\ndescription: |\n Authoritative TypeScript signatures for the CE.SDK CreativeEngine. Use this skill\n whenever you need the exact signature, parameter types, or return type of an\n `engine.*` method — especially before calling a method you haven't used in the\n current scene, or when the markdown docs in `cesdk-guide` are ambiguous.\n\n This is THE source of truth for method signatures. The hand-written cheatsheets\n in SYSTEM.md and the markdown docs in `cesdk-guide` can drift; this `.d.ts`\n ships with the same `@cesdk/node` package the engine runs.\n\n Triggered when you need to verify an `engine.block.*` or `engine.scene.*`\n signature, look up a parameter type, or confirm an enum/string-property name.\n---\n\n## Single file: `index.d.ts`\n\nThe whole CE.SDK TypeScript surface is in `index.d.ts` (~9000 lines). Use\n`read --offset --limit` to fetch the slice you need; never read the whole file.\n\n## Line anchors\n\nThe most-used classes are at known line offsets. Pass these directly to `read`:\n\n| Class | Start line | Read example |\n| ------------ | ---------- | ------------------------------------------------- |\n| AssetAPI | 260 | `read path=… offset=260 limit=200` |\n| **BlockAPI** | **1421** | `read path=… offset=1421 limit=400` (largest API) |\n| EditorAPI | 6300 | `read path=… offset=6300 limit=300` |\n| EventAPI | 7382 | `read path=… offset=7382 limit=200` |\n| **SceneAPI** | **8114** | `read path=… offset=8114 limit=300` |\n| VariableAPI | 9531 | `read path=… offset=9531 limit=100` |\n\n## How to look up a method\n\n1. Identify which class owns it (e.g. `engine.block.setFont` → BlockAPI).\n2. `grep pattern=\"setFont\\\\(\" path=\"**/skills/cesdk-api/index.d.ts\" maxResults=5`\n3. `read path=… offset=<grep-line - 5> limit=30` to get the JSDoc + signature.\n\nThe JSDoc above each method tells you the canonical usage and lists `@param`\ntypes. When a method has multiple overloads, prefer the one without\n`@deprecated`.\n\n## When to NOT use this skill\n\n- Reading conceptual prose (\"how does XYZ work\") → use `cesdk-guide` instead.\n- General topic guides (text, fills, export, rules) → `cesdk-guide`.\n- This skill is signatures only — use `cesdk-guide` for everything else.\n",
|
|
5
|
-
"docs/api/index.d.ts": "/**\n * Options for adding images to the scene.\n * @public\n */\nexport declare type AddImageOptions = {\n /** How the image should be sized and positioned */\n sizeMode?: SizeMode;\n /** How the position should be interpreted */\n positionMode?: PositionMode;\n /** X position in scene design units */\n x?: number;\n /** Y position in scene design units */\n y?: number;\n /** Corner radius for rounded corners in scene design units */\n cornerRadius?: number;\n /** Size for the image - can be a number for equal width/height or an object */\n size?: number | {\n /** Width in scene design units */\n width: number;\n /** Height in scene design units */\n height: number;\n };\n /** Timeline configuration for video scenes */\n timeline?: {\n /** Start time offset in seconds */\n timeOffset?: number;\n /** Duration in seconds */\n duration?: number;\n };\n /** Drop shadow configuration */\n shadow?: DropShadowOptions;\n /** Animation configuration */\n animation?: AnimationOptions;\n};\n\n/**\n * Options for adding videos to the scene.\n * @public\n */\nexport declare interface AddVideoOptions {\n /** How the video should be sized and positioned */\n sizeMode?: SizeMode;\n /** How the position should be interpreted */\n positionMode?: PositionMode;\n /** X position in scene design units */\n x?: number;\n /** Y position in scene design units */\n y?: number;\n /** Corner radius for rounded corners in scene design units */\n cornerRadius?: number;\n /** Timeline configuration */\n timeline?: {\n /** Start time offset in seconds */\n timeOffset?: number;\n /** Duration in seconds */\n duration?: number;\n };\n /** Drop shadow configuration */\n shadow?: DropShadowOptions;\n /** Animation configuration */\n animation?: AnimationOptions;\n}\n\n/**\n * The shorthand block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * @public\n */\nexport declare const ANIMATION_TYPES: readonly [\"slide\", \"pan\", \"fade\", \"blur\", \"grow\", \"zoom\", \"pop\", \"wipe\", \"baseline\", \"crop_zoom\", \"spin\", \"spin_loop\", \"fade_loop\", \"blur_loop\", \"pulsating_loop\", \"breathing_loop\", \"jump_loop\", \"squeeze_loop\", \"sway_loop\", \"scale_loop\", \"typewriter_text\", \"block_swipe_text\", \"spread_text\", \"merge_text\", \"ken_burns\"];\n\n/** @public */\nexport declare type AnimationBaselineDirection = (typeof AnimationBaselineDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationBaselineDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationBlockSwipeTextDirection = (typeof AnimationBlockSwipeTextDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationBlockSwipeTextDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationEasing = (typeof AnimationEasingValues)[number];\n\n/** @public */\nexport declare const AnimationEasingValues: readonly [\"Linear\", \"EaseIn\", \"EaseOut\", \"EaseInOut\", \"EaseInQuart\", \"EaseOutQuart\", \"EaseInOutQuart\", \"EaseInQuint\", \"EaseOutQuint\", \"EaseInOutQuint\", \"EaseInBack\", \"EaseOutBack\", \"EaseInOutBack\", \"EaseInSpring\", \"EaseOutSpring\", \"EaseInOutSpring\"];\n\n/**\n * Configuration options for animations.\n * @public\n */\nexport declare type AnimationEntry = {\n /** The type of animation to apply */\n type: AnimationType;\n /** Duration of the animation in seconds */\n duration: number;\n /** Easing function for the animation */\n easing?: AnimationEasing;\n};\n\n/** @public */\nexport declare type AnimationGrowDirection = (typeof AnimationGrowDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationGrowDirectionValues: readonly [\"Horizontal\", \"Vertical\", \"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\", \"All\"];\n\n/** @public */\nexport declare type AnimationJumpLoopDirection = (typeof AnimationJumpLoopDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationJumpLoopDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationKenBurnsDirection = (typeof AnimationKenBurnsDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationKenBurnsDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationMergeTextDirection = (typeof AnimationMergeTextDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationMergeTextDirectionValues: readonly [\"Right\", \"Left\"];\n\n/**\n * Options for configuring animations (in, loop, out animations).\n * @public\n */\nexport declare type AnimationOptions = {\n /** Animation when the element enters */\n in?: AnimationEntry;\n /** Animation that loops while the element is visible */\n loop?: AnimationEntry;\n /** Animation when the element exits */\n out?: AnimationEntry;\n};\n\n/** @public */\nexport declare type AnimationScaleLoopDirection = (typeof AnimationScaleLoopDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationScaleLoopDirectionValues: readonly [\"Horizontal\", \"Vertical\", \"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\", \"All\"];\n\n/** @public */\nexport declare type AnimationSpinDirection = (typeof AnimationSpinDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationSpinDirectionValues: readonly [\"Clockwise\", \"CounterClockwise\"];\n\n/** @public */\nexport declare type AnimationSpinLoopDirection = (typeof AnimationSpinLoopDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationSpinLoopDirectionValues: readonly [\"Clockwise\", \"CounterClockwise\"];\n\n/**\n * The block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * Refer to {@link AnimationTypeShorthand} and {@link AnimationTypeLonghand} for more details.\n * @public\n */\nexport declare type AnimationType = AnimationTypeShorthand | AnimationTypeLonghand;\n\n/**\n * The longhand block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * @public\n */\nexport declare type AnimationTypeLonghand = `//ly.img.ubq/animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport declare type AnimationTypeShorthand = (typeof ANIMATION_TYPES)[number];\n\n/** @public */\nexport declare type AnimationTypewriterTextWritingStyle = (typeof AnimationTypewriterTextWritingStyleValues)[number];\n\n/** @public */\nexport declare const AnimationTypewriterTextWritingStyleValues: readonly [\"Character\", \"Word\"];\n\n/** @public */\nexport declare type AnimationWipeDirection = (typeof AnimationWipeDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationWipeDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/**\n * Represents the application MIME types used in the editor.\n *\n * @categoryDescription Application MIME Type\n * Defines the possible application MIME types used in the editor.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n */\nexport declare type ApplicationMimeType = Extract<MimeType_2, 'application/octet-stream' | 'application/pdf' | 'application/zip'>;\n\n/**\n * Options for applying an asset to the scene.\n * @public\n */\nexport declare interface ApplyAssetOptions {\n /**\n * How the asset should be placed in the scene.\n * - 'clip': Background clip placed on background track\n * - 'overlay': Foreground overlay placed at playhead\n */\n clipType?: 'clip' | 'overlay';\n /**\n * Additional custom context options.\n * Allows passing arbitrary data to middleware for custom placement logic.\n */\n [key: string]: unknown;\n}\n\n/**\n * Generic asset information\n * @public\n */\nexport declare interface Asset {\n /**\n * The unique id of this asset.\n */\n id: string;\n /** Groups of the asset. */\n groups?: AssetGroups;\n /** Asset-specific and custom meta information */\n meta?: AssetMetaData;\n /** Structured asset-specific data */\n payload?: AssetPayload;\n}\n\n/**\n * @public Manage asset sources and apply assets to scenes.\n *\n * Asset sources provide assets like images, videos, fonts, and other media that can be applied to design blocks.\n * This API allows registering custom asset sources, querying available assets, and applying them to scenes or specific blocks.\n * It supports both local and remote asset sources, with extensible middleware for custom asset handling.\n *\n * @categoryDescription Asset Source Management\n * Register, remove, and query asset sources for different types of media.\n *\n * @categoryDescription Asset Discovery\n * Search and filter assets from registered sources with advanced query options.\n *\n * @categoryDescription Asset Application\n * Apply assets to scenes, blocks, or specific properties with customizable behavior.\n *\n * @categoryDescription Asset Lifecycle\n * Add, remove, and manage assets within local asset sources.\n *\n * @categoryDescription Asset Information\n * Retrieve metadata, credits, licenses, and supported formats from asset sources.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to asset source changes and lifecycle events.\n */\nexport declare class AssetAPI {\n #private;\n\n /**\n * Register middleware that intercepts asset application to scenes.\n *\n * The middleware function receives the source ID, asset result, the original apply function,\n * and a context object containing options about how the asset should be applied.\n * It can perform custom logic before, after, or instead of the default asset application.\n *\n * @example\n * ```ts\n * engine.asset.registerApplyMiddleware(async (sourceId, assetResult, apply, context) => {\n * // Access context to determine placement intent\n * console.log('Clip type:', context.clipType); // 'clip', 'overlay', or undefined\n * console.log('Custom data:', context.myCustomField); // Access custom fields\n *\n * // do something before applying the asset\n * // You still have the choice to call apply or skip it\n * const blockId = await apply(sourceId, assetResult);\n * // do something after applying the asset\n * return blockId;\n * })\n * ```\n *\n * @category Asset Application\n * @param middleware - The middleware function that is called before applying the asset.\n * @returns A function that can be used to remove the middleware.\n */\n registerApplyMiddleware(middleware: (sourceId: string, assetResult: AssetResult, apply: AssetAPI['apply'], context: ApplyAssetOptions) => Promise<DesignBlockId | undefined>): VoidFunction;\n /**\n * Register middleware that intercepts asset application to specific blocks.\n *\n * The middleware function receives the source ID, asset result, target block, and the original apply function.\n * It can perform custom logic before, after, or instead of the default block asset application.\n *\n * @example\n * ```ts\n * engine.asset.registerApplyToBlockMiddleware(async (sourceId, assetResult, block, applyToBlock) => {\n * // do something before applying the asset\n * // You still have the choice to call applyToBlock or skip it\n * await applyToBlock(sourceId, assetResult, block);\n * // do something after applying the asset\n * })\n * ```\n *\n * @category Asset Application\n * @param middleware - The middleware function that is called before applying the asset.\n * @returns A function that can be used to remove the middleware.\n */\n registerApplyToBlockMiddleware(middleware: (sourceId: string, assetResult: AssetResult, block: DesignBlockId, applyToBlock: AssetAPI['applyToBlock']) => Promise<void>): VoidFunction;\n /**\n * Add a custom asset source with unique ID.\n *\n * The asset source provides methods for finding assets, applying them to scenes or blocks,\n * and managing asset lifecycle. All source operations are handled asynchronously.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * });\n * ```\n *\n * @category Asset Source Management\n * @param source - The asset source configuration.\n */\n addSource(source: AssetSource): void;\n /**\n * Add a local asset source.\n *\n * Local asset sources allow dynamic asset management through the add/remove methods.\n * You can specify supported MIME types to restrict what assets can be added.\n *\n * ```javascript\n * engine.asset.addLocalSource('local-source');\n * ```\n *\n * @category Asset Source Management\n * @param id - Unique identifier for the asset source.\n * @param supportedMimeTypes - The mime types of assets that are allowed to be added to this local source.\n * @param applyAsset - An optional callback that can be used to override the default behavior of applying a given asset result to the active scene.\n * @param applyAssetToBlock - An optional callback that can be used to override the default behavior of applying an asset result to a given block.\n */\n addLocalSource(id: string, supportedMimeTypes?: string[], applyAsset?: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>, applyAssetToBlock?: (asset: CompleteAssetResult, block: DesignBlockId) => Promise<void>): void;\n /**\n * Creates a new local asset source from a JSON string containing asset definitions.\n *\n * The JSON structure should contain a `version` field, an `id` field specifying the asset source identifier,\n * and an `assets` array with asset definitions. Each asset should have an `id`, localized `label` object,\n * and a `meta` object containing asset-specific properties like `uri`, `thumbUri`, `blockType`, etc.\n *\n * Optionally, you can provide a `basePath` for resolving relative URLs and additional options including a\n * `matcher` array to filter which assets are loaded based on their IDs. The matcher patterns support wildcard\n * matching using `*`. If multiple patterns are provided, an asset is included if it matches ANY of the patterns.\n *\n * @category Asset Source Management\n * @param contentJSON - The JSON string containing the asset definitions.\n * @param basePath - An optional base path with which \\{\\{base_url\\}\\} strings in the assets should be replaced. If no value is provided, settings.basePath is used.\n * @param options - Optional configuration:\n * - `matcher`: Array of patterns to filter assets by ID. Supports `*` wildcard. An asset is included if it matches ANY pattern.\n * @returns The ID of the newly created asset source (as specified in the JSON's `id` field).\n *\n * @example\n * ```javascript\n * // Load all assets from JSON\n * const json = JSON.stringify({\n * \"version\": \"2.0.0\",\n * \"id\": \"my.custom.assets\",\n * \"assets\": [\n * {\n * \"id\": \"sample_asset\",\n * \"label\": { \"en\": \"Sample Asset\" },\n * \"meta\": {\n * \"uri\": \"https://example.com/asset.jpg\",\n * \"thumbUri\": \"https://example.com/thumb.jpg\",\n * \"blockType\": \"//ly.img.ubq/image\"\n * }\n * }\n * ]\n * });\n * const sourceId = await engine.asset.addLocalAssetSourceFromJSONString(json);\n * console.log('Created asset source:', sourceId); // \"my.custom.assets\"\n *\n * // Load with custom base path\n * const sourceId2 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * 'https://example.com/'\n * );\n *\n * // Load only assets matching one of the patterns\n * const sourceId3 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * undefined,\n * { matcher: ['sample_*', '*_asset'] }\n * );\n *\n * // Load with custom base path and matcher\n * const sourceId4 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * 'https://example.com/',\n * { matcher: ['portrait_*', 'landscape_*'] }\n * );\n * ```\n */\n addLocalAssetSourceFromJSONString(contentJSON: string, basePath?: string, options?: {\n matcher?: string[];\n }): Promise<string>;\n /**\n * Creates a new local asset source from a JSON URI.\n *\n * Loads and parses a JSON file from the specified URI to create an asset source. The JSON structure\n * should contain a `version` field, an `id` field specifying the asset source identifier, and an\n * `assets` array with asset definitions. The created asset source will have the ID specified in the\n * JSON's `id` field, and all assets defined in the JSON will be added to the source.\n *\n * Note: The parent directory of the content.json URI will be used as the base path for resolving\n * relative URLs in the asset definitions (e.g., `{{base_url}}` placeholders).\n *\n * @category Asset Source Management\n * @param contentURI - The URI for the JSON file to load and parse.\n * @param options - Optional configuration:\n * - `matcher`: Array of patterns to filter assets by ID. Supports `*` wildcard. An asset is included if it matches ANY pattern.\n * @returns The ID of the newly created asset source (as specified in the JSON's `id` field).\n *\n * @example\n * ```javascript\n * // Load all audio assets from IMG.LY's CDN\n * const sourceId = await engine.asset.addLocalAssetSourceFromJSONURI(\n * 'https://cdn.img.ly/assets/demo/v3/ly.img.audio/content.json'\n * );\n * console.log('Loaded asset source:', sourceId); // \"ly.img.audio\"\n *\n * // Load only assets matching one of the patterns\n * const sourceId2 = await engine.asset.addLocalAssetSourceFromJSONURI(\n * 'https://cdn.img.ly/assets/demo/v3/ly.img.image/content.json',\n * { matcher: ['image-portrait-*', 'image-landscape-*'] }\n * );\n * ```\n */\n addLocalAssetSourceFromJSONURI(contentURI: string, options?: {\n matcher?: string[];\n }): Promise<string>;\n /**\n * Remove a registered asset source.\n *\n * This permanently removes the asset source and all its associated assets.\n * Any ongoing operations with this source will be cancelled.\n *\n * ```javascript\n * engine.asset.removeSource('asset-source-id');\n * ```\n *\n * @category Asset Source Management\n * @param id - The ID of the asset source to remove.\n */\n removeSource(id: string): void;\n /**\n * Get all registered asset source IDs.\n *\n * ```javascript\n * engine.asset.findAllSources();\n * ```\n *\n * @category Asset Source Management\n * @returns A list with the IDs of all registered asset sources.\n */\n findAllSources(): string[];\n /**\n * Search for assets in a specific source with advanced filtering.\n *\n * Supports pagination, text search, tag filtering, grouping, and sorting options.\n * Results include asset metadata, thumbnails, and application context.\n *\n * ```javascript\n * const result = await engine.asset.findAssets('asset-source-id', {\n * page: 0,\n * perPage: 100\n * });\n * const asset = result.assets[0];\n * ```\n *\n * @category Asset Discovery\n * @param sourceId - The ID of the asset source.\n * @param query - Query options to filter and sort the search results.\n * @returns Promise resolving to paginated search results.\n */\n findAssets(sourceId: string, query: AssetQueryData): Promise<AssetsQueryResult<CompleteAssetResult>>;\n /**\n * Fetch a specific asset by ID from an asset source.\n *\n * ```javascript\n * const asset = await engine.asset.fetchAsset('asset-source-id', 'asset-id', {\n * locale: 'en-US'\n * });\n * ```\n *\n * @category Asset Discovery\n * @param sourceId - The ID of the asset source to search in.\n * @param assetId - The ID of the asset to fetch.\n * @param params - Query parameters including locale (optional).\n * @returns Promise resolving to the complete asset result, or undefined if not found.\n */\n fetchAsset(sourceId: string, assetId: string, params?: Pick<AssetQueryData, 'locale'>): Promise<CompleteAssetResult | null>;\n /**\n * Get available asset groups from a source.\n *\n * Groups provide categorization for assets within a source, enabling filtered discovery.\n *\n * ```javascript\n * const groups = engine.asset.getGroups(customSource.id);\n * ```\n *\n * @category Asset Information\n * @param id - The ID of the asset source.\n * @returns Promise resolving to list of available group names.\n */\n getGroups(id: string): Promise<string[]>;\n /**\n * Get supported MIME types for an asset source.\n *\n * Returns the file types that can be added to this source. An empty result means all MIME types are supported.\n *\n * ```javascript\n * const mimeTypes = engine.asset.getSupportedMimeTypes('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns Array of supported MIME type strings.\n */\n getSupportedMimeTypes(sourceId: string): string[];\n /**\n * Get attribution credits for an asset source.\n *\n * ```javascript\n * const credits = engine.asset.getCredits('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's credits info consisting of a name and an optional URL.\n */\n getCredits(sourceId: string): {\n name: string;\n url: string | undefined;\n } | undefined;\n /**\n * Get license information for an asset source.\n *\n * ```javascript\n * const license = engine.asset.getLicense('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's license info consisting of a name and an optional URL.\n */\n getLicense(sourceId: string): {\n name: string;\n url: string | undefined;\n } | undefined;\n /**\n * Check if an asset source supports asset management.\n *\n * Returns true if the source allows adding and removing assets dynamically, via 'Add File' and 'Delete' button on the UI.\n * This is typically true for local asset sources and false for remote sources.\n *\n * ```javascript\n * engine.asset.canManageAssets('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source to check.\n * @returns True if the source supports asset management operations.\n */\n canManageAssets(sourceId: string): boolean;\n /**\n * Add an asset to a local asset source.\n *\n * Only works with local asset sources that support asset management.\n * The asset will be validated against the source's supported MIME types.\n *\n * ```javascript\n * engine.asset.addAssetToSource('local-source', {\n * id: 'asset-id',\n * label: {\n * en: 'My Asset'\n * },\n * meta: {\n * uri: 'https://example.com/asset.jpg',\n * mimeType: 'image/jpeg'\n * }\n * });\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceId - The local asset source ID that the asset should be added to.\n * @param asset - The asset definition to add to the source.\n */\n addAssetToSource(sourceId: string, asset: AssetDefinition): void;\n /**\n * Remove an asset from a local asset source.\n *\n * Only works with local asset sources that support asset management.\n * The asset will be permanently deleted from the source.\n *\n * ```javascript\n * engine.asset.removeAssetFromSource('local-source', 'asset-id');\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceId - The id of the local asset source that currently contains the asset.\n * @param assetId - The id of the asset to be removed.\n */\n removeAssetFromSource(sourceId: string, assetId: string): void;\n /**\n * Apply an asset to the active scene.\n *\n * Creates a new block configured according to the asset's properties and adds it to the scene.\n * The behavior can be customized by providing an `applyAsset` function when registering the asset source,\n * or by passing context options to guide middleware behavior.\n *\n * @example\n * ```javascript\n * // Default behavior\n * await engine.asset.apply('asset-source-id', assetResult.assets[0]);\n * ```\n *\n * @example\n * ```javascript\n * // Foreground overlay placement\n * await engine.asset.apply('asset-source-id', assetResult.assets[0], {\n * clipType: 'overlay'\n * });\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param options - Optional configuration for asset application.\n * @returns Promise resolving to the created block ID, or undefined if no block was created.\n */\n apply(sourceId: string, assetResult: AssetResult, options?: ApplyAssetOptions): Promise<DesignBlockId | undefined>;\n /**\n * Apply an asset to a specific block.\n *\n * Modifies the target block's properties according to the asset's configuration.\n * The behavior can be customized by providing an `applyAssetToBlock` function when registering the asset source.\n *\n * ```javascript\n * await engine.asset.applyToBlock('asset-source-id', assetResult.assets[0]);\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param block - The block to apply the asset to.\n */\n applyToBlock(sourceId: string, assetResult: AssetResult, block: DesignBlockId): Promise<void>;\n /**\n * Apply a specific asset property to the currently selected element.\n *\n * Allows applying individual properties (like colors, fonts, or effects) from an asset\n * without creating a new block. The behavior can be customized by providing an `applyAssetProperty` function.\n *\n * ```javascript\n * const asset = assetResult.assets[0];\n * if (asset.payload && asset.payload.properties) {\n * for (const property of asset.payload.properties) {\n * await engine.asset.applyProperty('asset-source-id', asset, property);\n * }\n * }\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param property - The specific asset property to apply.\n */\n applyProperty(sourceId: string, assetResult: AssetResult, property: AssetProperty): Promise<void>;\n /**\n * Apply an asset using the engine's default implementation.\n *\n * The default implementation already handles various different kinds of assets and acts as a good starting point.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * async applyAsset(assetResult) {\n * return engine.asset.defaultApplyAsset(assetResult);\n * },\n * });\n * ```\n *\n * @category Asset Application\n * @param assetResult - A single asset result from a `findAssets` query.\n * @returns Promise resolving to the created block ID, or undefined if no block was created.\n */\n defaultApplyAsset(assetResult: AssetResult): Promise<DesignBlockId | undefined>;\n /**\n * Apply an asset to a block using the engine's default implementation.\n *\n * The default implementation already handles various different kinds of assets and acts as a good starting point.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * async applyAssetToBlock(assetResult, block) {\n * engine.asset.defaultApplyAssetToBlock(assetResult, block);\n * },\n * });\n * ```\n *\n * @category Asset Application\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param block - The block to apply the asset to.\n */\n defaultApplyAssetToBlock(assetResult: AssetResult, block: DesignBlockId): Promise<void>;\n /**\n * Subscribe to asset source addition events.\n *\n * ```javascript\n * engine.asset.onAssetSourceAdded((sourceID) => {\n * console.log(`Added source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source is added.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceAdded: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Subscribe to asset source removal events.\n *\n * ```javascript\n * engine.asset.onAssetSourceRemoved((sourceID) => {\n * console.log(`Removed source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source is removed.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceRemoved: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Subscribe to asset source content change events.\n *\n * ```javascript\n * engine.asset.onAssetSourceUpdated((sourceID) => {\n * console.log(`Updated source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source's contents are updated.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceUpdated: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Notify the engine that an asset source's contents have changed.\n *\n * This triggers refresh of any UI components that display assets from this source\n * and notifies subscribers to the asset source update events.\n *\n * ```javascript\n * engine.asset.assetSourceContentsChanged('asset-source-id');\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceID - The asset source whose contents changed.\n */\n assetSourceContentsChanged(sourceID: string): void;\n\n}\n\n/**\n * Asset boolean property definition\n * @public\n */\nexport declare interface AssetBooleanProperty {\n property: string;\n type: 'Boolean';\n value: boolean;\n defaultValue: boolean;\n}\n\n/**\n * Asset Color payload CMYK representation\n * @public\n */\nexport declare interface AssetCMYKColor {\n colorSpace: 'CMYK';\n c: number;\n m: number;\n y: number;\n k: number;\n}\n\n/**\n * Asset Color payload\n * @public\n */\nexport declare type AssetColor = AssetRGBColor | AssetCMYKColor | AssetSpotColor;\n\n/**\n * Asset color property definition\n * @public\n */\nexport declare interface AssetColorProperty {\n property: string;\n type: 'Color';\n value: Color;\n defaultValue: Color;\n}\n\n/**\n * Asset transform preset payload that snaps a block's frame to the intrinsic\n * aspect ratio of the block's content (e.g. the underlying image or video).\n * @public\n */\nexport declare interface AssetContentAspectRatio {\n type: 'ContentAspectRatio';\n}\n\n/**\n * Definition of an asset used if an asset is added to an asset source.\n * @public\n */\nexport declare interface AssetDefinition extends Asset {\n /**\n * Label used to display in aria-label and as a tooltip.\n * Will be also searched in a query and should be localized\n */\n label?: Record<Locale, string>;\n /**\n * Tags for this asset. Can be used for filtering, but is also useful for\n * free-text search. Since the label is searched as well as used for tooltips\n * you do not want to overdo it, but still add things which are searched.\n * Thus, it should be localized similar to the `label`.\n */\n tags?: Record<Locale, string[]>;\n}\n\n/**\n * Asset enum property definition\n * @public\n */\nexport declare interface AssetEnumProperty {\n property: string;\n type: 'Enum';\n value: string;\n defaultValue: string;\n options: string[];\n}\n\n/**\n * Filter expression — predicate or logical combinator. Combinators nest\n * arbitrarily. The union is mutually exclusive: an object with both\n * `and` and `or`, or with `property` next to a combinator key, is\n * rejected at the type level.\n *\n * Missing-key semantics for `not`: a predicate is `false` on an asset\n * that lacks the targeted field, so a negated `meta.foo === 'x'` matches\n * assets where `meta.foo !== 'x'` **and** assets that lack `meta.foo`\n * entirely.\n * @public\n */\nexport declare type AssetFilter = AssetPropertyFilter | {\n and: AssetFilter[];\n or?: never;\n not?: never;\n property?: never;\n} | {\n or: AssetFilter[];\n and?: never;\n not?: never;\n property?: never;\n} | {\n not: AssetFilter;\n and?: never;\n or?: never;\n property?: never;\n};\n\n/**\n * Asset transform preset payload fixed aspect ratio\n * @public\n */\nexport declare interface AssetFixedAspectRatio {\n type: 'FixedAspectRatio';\n width: number;\n height: number;\n}\n\n/**\n * Asset transform preset payload fixed size\n * @public\n */\nexport declare interface AssetFixedSize {\n type: 'FixedSize';\n width: number;\n height: number;\n designUnit: SceneDesignUnit;\n}\n\n/**\n * Asset transform preset payload free aspect ratio\n * @public\n */\nexport declare interface AssetFreeAspectRatio {\n type: 'FreeAspectRatio';\n}\n\n/**\n * An asset can be member of multiple groups. Groups have a semantic meaning\n * used to build and group UIs exploring the assets, e.g.sections in the\n * content library, or for things like topics in Unsplash for instance.\n *\n * Tags in comparison have are more loosely hold meaning used for extended\n * searching/filtering.\n * @public\n */\nexport declare type AssetGroups = string[];\n\n/**\n * Generic asset information\n * @public\n */\nexport declare type AssetMetaData = {\n /** The mime type of this asset or the data behind the asset's uri. */\n mimeType?: string;\n /** The type id of the design block that should be created from this asset. */\n blockType?: string;\n fillType?: string;\n shapeType?: string;\n kind?: string;\n uri?: string;\n thumbUri?: string;\n previewUri?: string;\n sourceSet?: Source[];\n filename?: string;\n vectorPath?: string;\n width?: number;\n height?: number;\n duration?: string;\n /**\n * Effect kind hint. Widened to `string` so this metadata stays\n * cross-binding (the narrow `EffectType` union remains the\n * source of truth for `BlockAPI.createEffect`).\n */\n effectType?: string;\n /**\n * Blur kind hint. Widened to `string` for the same reason as\n * `effectType` — the narrow `BlurType` union still gates\n * `BlockAPI.createBlur`.\n */\n blurType?: string;\n looping?: boolean;\n} & Record<string, unknown>;\n\n/**\n * Asset number property definition\n * @public\n */\nexport declare interface AssetNumberProperty {\n property: string;\n type: 'Int' | 'Float' | 'Double';\n value: number;\n defaultValue: number;\n min: number;\n max: number;\n step: number;\n}\n\n/**\n * Asset payload\n * @public\n */\nexport declare interface AssetPayload {\n color?: AssetColor;\n sourceSet?: Source[];\n typeface?: Typeface;\n transformPreset?: AssetTransformPreset;\n properties?: AssetProperty[];\n}\n\n/**\n * Asset property for payload\n * @public\n */\nexport declare type AssetProperty = AssetBooleanProperty | AssetColorProperty | AssetEnumProperty | AssetNumberProperty | AssetStringProperty;\n\n/**\n * A single property predicate. Exactly one of `contains` (case-insensitive\n * substring) or `equals` (case-insensitive equality) must be set — the\n * type forbids passing both or neither. On a string-array property\n * (`tags`, `groups`), the operator matches if any element matches.\n *\n * `meta.<key>` values are flat strings in the engine; if a meta value\n * was originally serialized as a number or boolean, stringify it the\n * same way before comparing.\n * @public\n */\nexport declare type AssetPropertyFilter = {\n property: AssetPropertyPath;\n} & ({\n contains: string;\n equals?: never;\n} | {\n equals: string;\n contains?: never;\n});\n\n/**\n * Dot-path against the resolved asset that a property predicate targets:\n * `label`, `id`, `tags`, `groups`, or `meta.<key>` (one segment — meta\n * values in the engine are flat strings).\n *\n * The template literal accepts `'meta.'` (empty key) because TypeScript's\n * `${string}` includes the empty string; the engine rejects this at\n * runtime with an explanatory error.\n * @public\n */\nexport declare type AssetPropertyPath = 'label' | 'tags' | 'id' | 'groups' | `meta.${string}`;\n\n/**\n * Defines a request for querying assets\n * @public\n */\nexport declare interface AssetQueryData {\n /** A query string used for (fuzzy) searching of labels and tags */\n query?: string;\n /** The current page queried for paginated views. */\n page: number;\n /**\n * Tags are searched with the query parameter, but this search is fuzzy.\n * If one needs to get assets with exactly the tag (from a tag cloud or filter)\n * this query parameter should be used.\n */\n tags?: string | string[];\n /** Query only these groups */\n groups?: AssetGroups;\n /** Filter out assets with this groups */\n excludeGroups?: AssetGroups;\n /**\n * Choose the locale of the labels and tags for localized search and filtering.\n * For local asset sources, labels and tags are resolved using a fallback chain:\n * requested locale → \"en\" → first available entry → empty default.\n */\n locale?: Locale;\n /**\n * The number of results queried. How many assets shall be returned regardless\n * of the total number of assets available.\n *\n * Together with `page` this can be used for pagination.\n */\n perPage: number;\n /**\n * The order to sort by if the asset source supports sorting.\n * If set to None, the order is the same as the assets were added to the source.\n */\n sortingOrder?: SortingOrder;\n /**\n * The key that identifies the meta data value to sort by or 'id' to sort by the asset ID.\n * If empty, the assets are sorted by the index.\n */\n sortKey?: string;\n /**\n * Sort assets that are marked as active first.\n */\n sortActiveFirst?: boolean;\n /**\n * Optional structured filter, AND-combined with the result of `query` /\n * `tags` / `groups` / `excludeGroups`. The top-level array is an implicit\n * AND of its entries. Each entry is either a property predicate\n * (`{ property, contains?, equals? }`) or a logical combinator\n * (`{ and: [...] }`, `{ or: [...] }`, `{ not: ... }`). Combinators nest.\n *\n * **When to use `filter` vs `tags` / `groups` / `excludeGroups`:**\n * The legacy `tags` / `groups` / `excludeGroups` fields remain\n * supported and are equivalent to filter predicates with `equals` and\n * implicit AND. Prefer `filter` for anything beyond a plain include/\n * exclude list — case-insensitive substrings, `meta.<key>` matches,\n * `or` / `not` combinators — and reach for the legacy fields only\n * when you want their case-sensitive exact-match semantics.\n *\n * Malformed filters reject the returned promise with the engine's\n * parse-error message (e.g. `\"Unknown asset property '…'\"`).\n *\n * @example\n * ```ts\n * filter: [\n * { property: 'label', contains: 'Roboto' },\n * { property: 'meta.languages', contains: 'de' },\n * { not: { property: 'meta.legacy', equals: 'true' } }\n * ]\n * ```\n */\n filter?: AssetFilter[];\n}\n\n/**\n * Single asset result of a query from the engine.\n * @public\n */\nexport declare interface AssetResult extends Asset {\n /** The locale of the label and tags */\n locale?: Locale;\n /** The label of the result. Used for description and tooltips. */\n label?: string;\n /** The tags of this asset. Used for filtering and free-text searching. */\n tags?: string[];\n /** If the asset is marked as active, i.e., used in a currently selected element. */\n active?: boolean;\n /** Credits for the artist of the asset */\n credits?: {\n name: string;\n url?: string;\n };\n /** License for this asset. Overwrites the source license if present */\n license?: {\n name: string;\n url?: string;\n };\n /** UTM parameters for the links inside the credits */\n utm?: {\n source?: string;\n medium?: string;\n };\n}\n\n/**\n * Represents the credits for an asset result.\n *\n * The `AssetResultCredits` interface provides a set of properties that describe the credits\n * for an asset result, including the name and URL of the credits.\n *\n * Methods for working with the credits of asset results.\n *\n * @public\n */\ndeclare interface AssetResultCredits {\n name: string;\n url: string;\n}\n\n/**\n * Represents the license for an asset result.\n *\n * The `AssetResultLicense` interface provides a set of properties that describe the license\n * for an asset result, including the name and URL of the license.\n *\n * Methods for working with the license of asset results.\n *\n * @public\n */\ndeclare interface AssetResultLicense {\n name: string;\n url: string;\n}\n\n/**\n * Asset Color payload RGB representation\n * @public\n */\nexport declare interface AssetRGBColor {\n colorSpace: 'sRGB';\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * A source of assets\n * @public\n */\nexport declare interface AssetSource {\n /** The unique id of the API */\n id: string;\n /** Find all asset for the given type and the provided query data. */\n findAssets(queryData: AssetQueryData): Promise<AssetsQueryResult | undefined>;\n /** Fetch an asset by id. */\n fetchAsset?: (id: string, params?: Pick<AssetQueryData, 'locale'>) => Promise<AssetResult | null>;\n /** Return every available group */\n getGroups?: () => Promise<string[]>;\n /** Credits for the source/api */\n credits?: {\n name: string;\n url?: string;\n };\n /** General license for all asset from this source */\n license?: {\n name: string;\n url?: string;\n };\n /**\n * Can the source add and remove assets dynamically? If `false`\n * methods like `addAsset` and `removeAsset` will throw an\n * error.\n *\n * @deprecated Will be removed in v1.11. Use `canAdd` and `canRemove` in the asset library configuration\n */\n canManageAssets?: boolean;\n /**\n * Apply the given asset result to the active scene.\n * You can override this with custom behavior.\n * @returns the id of a new block if one was created from the asset.\n */\n applyAsset?: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>;\n /**\n * Apply the given asset result to the given block.\n * You can override this with custom behavior.\n */\n applyAssetToBlock?: (asset: CompleteAssetResult, block: DesignBlockId) => Promise<void>;\n /**\n * Apply a property of the given asset result to the active scene.\n * You can override this with custom behavior.\n */\n applyAssetProperty?: (asset: CompleteAssetResult, property: AssetProperty) => Promise<void>;\n /**\n * Adds the given asset to this source. Throws an error if the asset source\n * does not support adding assets.\n */\n addAsset?(asset: AssetDefinition): void;\n /**\n * Removes the given asset from this source.\n */\n removeAsset?(assetId: string): void;\n /**\n * Generates a list of supported mime types for this source.\n *\n * @returns a list of the mime types should be supported by this source\n */\n getSupportedMimeTypes?(): string[] | undefined;\n}\n\n/**\n * Asset Color payload SpotColor representation\n * @public\n */\nexport declare interface AssetSpotColor {\n colorSpace: 'SpotColor';\n name: string;\n externalReference: string;\n representation: AssetRGBColor | AssetCMYKColor;\n}\n\n/**\n * Return type of a `findAssets` query.\n * @public\n */\nexport declare interface AssetsQueryResult<T extends AssetResult = AssetResult> {\n /** The assets in the requested page */\n assets: T[];\n /** The current, requested page */\n currentPage: number;\n /** The next page to query if it exists */\n nextPage?: number;\n /** How many assets are there in total for the current query regardless of the page */\n total: number;\n}\n\n/**\n * Asset string property definition\n * @public\n */\nexport declare interface AssetStringProperty {\n property: string;\n type: 'String';\n value: string;\n defaultValue: string;\n}\n\n/**\n * Transform preset payload\n * @public\n */\nexport declare type AssetTransformPreset = AssetFixedAspectRatio | AssetFreeAspectRatio | AssetContentAspectRatio | AssetFixedSize;\n\n/**\n * An async-compatible URI resolver function.\n *\n * May return a plain string for synchronous resolution, or a `Promise<string>`\n * for asynchronous resolution. The engine preserves synchronous behaviour when\n * a plain string is returned (important for call-sites that expect immediate\n * resolution).\n * @public\n */\nexport declare type AsyncURIResolver = (URI: string, defaultURIResolver: (URI: string) => string) => Promise<string> | string;\n\n/**\n * Represents the options for exporting audio.\n *\n * Defines the possible options for exporting audio.\n * - 'mimeType': The MIME type of the output audio file.\n * - 'onProgress': A callback which reports on the progress of the export.\n * - 'timeOffset': The time offset in seconds relative to the target block.\n * - 'duration': The duration in seconds of the final audio.\n * - 'sampleRate': The sample rate of the exported audio.\n * - 'numberOfChannels': The number of channels of the exported audio.\n * - 'skipEncoding': Skip encoding (audio data will be returned immediately even if not compatible with target MIME type).\n *\n * @public\n */\nexport declare type AudioExportOptions = {\n /**\n * The MIME type of the output audio file.\n *\n * @defaultValue 'audio/wav'\n */\n mimeType?: AudioMimeType;\n /**\n * A callback which reports on the progress of the export.\n */\n onProgress?: (numberOfRenderedFrames: number, numberOfEncodedFrames: number, totalNumberOfFrames: number) => void;\n /**\n * The time offset in seconds relative to the target block.\n *\n * @defaultValue 0\n */\n timeOffset?: number;\n /**\n * The duration in seconds of the final audio.\n *\n * @defaultValue The duration of the block.\n */\n duration?: number;\n /**\n * The sample rate of the exported audio.\n *\n * @defaultValue 48000\n */\n sampleRate?: number;\n /**\n * The number of channels of the exported audio.\n *\n * @defaultValue 2\n */\n numberOfChannels?: number;\n /**\n * Skip encoding (audio data will be returned immediately even if not compatible with target MIME type).\n *\n * @defaultValue false\n */\n skipEncoding?: boolean;\n /**\n * An AbortSignal that can be used to cancel the audio export operation.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * Options for configuring audio extraction from video operations.\n * @public\n */\nexport declare type AudioFromVideoOptions = {\n /**\n * If true, the audio block will have the same duration, trim length, and trim offset as the source video.\n * If false, the full audio track is extracted without trim settings.\n * @defaultValue true\n */\n keepTrimSettings?: boolean;\n /**\n * If true, mutes the audio of the original video fill block.\n * @defaultValue true\n */\n muteOriginalVideo?: boolean;\n};\n\n/**\n * Represents the audio MIME types used in the editor.\n *\n * @categoryDescription Audio MIME Type\n * Defines the possible audio MIME types used in the editor.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n *\n * @public\n */\nexport declare type AudioMimeType = Extract<MimeType_2, 'audio/wav' | 'audio/mp4'>;\n\n/**\n * Information about a single audio track from a video.\n * This interface provides comprehensive metadata about audio tracks,\n * including codec information, technical specifications, and track details.\n * @public\n */\nexport declare interface AudioTrackInfo {\n /** The codec string */\n audioCodec: string;\n /** The number of audio channels */\n channels: number;\n /** The audio sample rate */\n sampleRate: number;\n /** Duration of the audio track in seconds */\n audioDuration: number;\n /** The number of audio packets (matches the number of encoded chunks) */\n numAudioPackets: number;\n /** The number of audio frames */\n numAudioFrames: number;\n /** Optional track name/label if available in metadata */\n trackName: string;\n /** Track index in the container */\n trackIndex: number;\n /** Track language code (ISO 639-2T format: \"und\", \"eng\", \"deu\", etc.) */\n language: string;\n}\n\n/** @public */\nexport declare type BlendMode = (typeof BlendModeValues)[number];\n\n/** @public */\nexport declare const BlendModeValues: readonly [\"PassThrough\", \"Normal\", \"Darken\", \"Multiply\", \"ColorBurn\", \"LinearBurn\", \"DarkenColor\", \"Lighten\", \"Screen\", \"ColorDodge\", \"LinearDodge\", \"LightenColor\", \"Overlay\", \"SoftLight\", \"HardLight\", \"VividLight\", \"LinearLight\", \"PinLight\", \"HardMix\", \"Difference\", \"Exclusion\", \"Subtract\", \"Divide\", \"Hue\", \"Saturation\", \"Color\", \"Luminosity\"];\n\n/**\n * Create, manipulate, and query the building blocks of your design.\n *\n * This is the primary interface for all block-level operations. Use it to manage the\n * entire lifecycle of blocks from creation and serialization to destruction. You can precisely\n * control a block's appearance by modifying its fills, strokes, and effects, or transform\n * its position, size, and rotation. The API also includes powerful features for managing\n * complex content like text and video, organizing blocks into groups and hierarchies, and\n * exporting final designs to various formats.\n *\n * @public\n * @showCategories\n * @categoryDescription Block Lifecycle\n * Manage the complete lifecycle: create, find, duplicate, destroy, and serialize blocks.\n * @categoryDescription Block Export\n * Export blocks to various formats like images, videos, and audio.\n * @categoryDescription Block Fills\n * Create, configure, and manage block fills, including solid colors, gradients, and images.\n * @categoryDescription Block Video\n * Manage time-based media like video and audio, including playback, timing, and controls.\n * @categoryDescription Block State\n * Query the intrinsic state or identity of a block, such as its name, UUID, or lock status.\n * @categoryDescription Block Kind\n * Get and set a block's 'kind' identifier for custom categorization.\n * @categoryDescription Block Selection & Visibility\n * Manage a block's selection state and visibility on the canvas.\n * @categoryDescription Block Events\n * Subscribe to user actions and state changes related to blocks.\n * @categoryDescription Block Groups\n * Create and manage groups of blocks.\n * @categoryDescription Block Boolean Operations\n * Combine multiple blocks into a single new block using boolean path operations.\n * @categoryDescription Block Exploration\n * Find blocks by properties like name, type, or kind.\n * @categoryDescription Block Shapes\n * Create and configure shape blocks and geometric forms.\n * @categoryDescription Block Appearance\n * Control general appearance, including opacity, blend modes, flipping, and other visual properties.\n * @categoryDescription Block Layout\n * Structure designs by positioning, sizing, layering, aligning, and distributing blocks.\n * @categoryDescription Block Hierarchies\n * Manage parent-child relationships and the scene graph structure.\n * @categoryDescription Block Utils\n * Check block capabilities like alignability or distributability.\n * @categoryDescription Block Properties\n * Get and set any block property by name using low-level, generic accessors.\n * @categoryDescription Block Crop\n * Crop, scale, translate, and transform block content.\n * @categoryDescription Block Strokes\n * Control stroke appearance, including color, width, style, and position.\n * @categoryDescription Block Drop Shadow\n * Configure drop shadow effects, including blur, color, and offset.\n * @categoryDescription Block Effects\n * Create, manage, and apply various visual effects to blocks.\n * @categoryDescription Block Cutout\n * Create cutout operations and path-based modifications.\n * @categoryDescription Block Text\n * Create, edit, and style text content.\n * @categoryDescription Block Blur\n * Apply and configure blur effects on blocks.\n * @categoryDescription Block Placeholder\n * Manage placeholder functionality, controls, and behavior.\n * @categoryDescription Block Scopes\n * Manage permissions and capabilities per block.\n * @categoryDescription Block Animations\n * Create and manage animations and timeline-based effects.\n * @categoryDescription Helper\n * Convenient high-level functions that combine multiple operations into single, easy-to-use methods for common tasks like adding media, applying effects, and positioning blocks.\n */\nexport declare class BlockAPI {\n #private;\n\n /**\n * Exports a design block to a Blob.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param options - The options for exporting the block type, including mime type and export settings.\n * @returns A promise that resolves with the exported image or is rejected with an error.\n */\n export(handle: DesignBlockId, options?: ExportOptions): Promise<Blob>;\n /**\n * Exports a design block to a Blob.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param mimeType - The mime type of the output file.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with the exported image or is rejected with an error.\n * @deprecated Use the new `export` signature instead\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.export(blockId, MimeType.Png, { pngCompressionLevel: 5 })\n * // After migration\n * const blob = await cesdk.block.export(blockId, { mimeType: 'image/png', pngCompressionLevel: 5 })\n * ```\n */\n export(handle: DesignBlockId, mimeType?: ExportOptions['mimeType'], options?: Omit<ExportOptions, 'mimeType'>): Promise<Blob>;\n /**\n * Extracts the dominant colors from the rendered appearance of a block.\n *\n * Performs an internal update to resolve the final layout for the block. Will not\n * complete as long as assets are in a pending state; asset loading progresses during\n * engine updates. Crops, color adjustments, and effects applied to the block are\n * reflected in the returned palette. Fully or mostly transparent pixels are excluded\n * from the analysis.\n *\n * @category Block Analysis\n * @param handle - The design block element to analyze. Must be attached to a scene\n * and render visible content.\n * @param options - See `DominantColorsOptions`.\n * @returns A promise that resolves with the dominant colors sorted by weight, descending.\n */\n getDominantColors(handle: DesignBlockId, options?: DominantColorsOptions): Promise<DominantColor[]>;\n /**\n * Exports a design block and a color mask to two separate Blobs.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param maskColorR - The red component of the special color mask color.\n * @param maskColorG - The green component of the special color mask color.\n * @param maskColorB - The blue component of the special color mask color.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with an array of the exported image and mask or is rejected with an error.\n */\n exportWithColorMask(handle: DesignBlockId, maskColorR: number, maskColorG: number, maskColorB: number, options?: ExportOptions): Promise<Blob[]>;\n /**\n * Exports a design block and a color mask to two separate Blobs.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n * Removes all pixels that exactly match the given RGB color and replaces them with transparency.\n * The output includes two files: the masked image and the mask itself.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param mimeType - The mime type of the output file.\n * @param maskColorR - The red component of the special color mask color.\n * @param maskColorG - The green component of the special color mask color.\n * @param maskColorB - The blue component of the special color mask color.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with an array of the exported image and mask or is rejected with an error.\n * @deprecated Use the new `exportWithColorMask` signature instead\n *\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.exportWithColorMask(\n * blockId,\n * MimeType.Png,\n * 0.5,\n * 0,\n * 0,\n * {\n * pngCompressionLevel: 5\n * }\n * );\n * // After migration\n * const blob = await cesdk.block.exportWithColorMask(\n * blockId,\n * 0.5,\n * 0,\n * 0,\n * {\n * mimeType: 'image/png',\n * pngCompressionLevel: 5\n * }\n * );\n * ```\n */\n exportWithColorMask(handle: DesignBlockId, mimeType: ExportOptions['mimeType'] | undefined, maskColorR: number, maskColorG: number, maskColorB: number, options?: Omit<ExportOptions, 'mimeType'>): Promise<Blob[]>;\n /**\n * Exports a design block as a video file.\n *\n * Note: The export will run across multiple iterations of the update loop. In each iteration a frame is scheduled for encoding.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only page blocks are supported.\n * @param options - The options for exporting the video, including mime type, h264 profile, level, bitrate, time offset, duration, framerate, target width and height.\n * @returns A promise that resolves with a video blob or is rejected with an error.\n * @example\n * ```typescript\n * const page = engine.block.create('page');\n * // Set up a progress tracking function\n * const progressTracker = (renderedFrames, encodedFrames, totalFrames) => {\n * console.log(`Progress: ${Math.round((encodedFrames / totalFrames) * 100)}%`);\n * };\n * const videoOptions = { framerate: 30, duration: 5 };\n * const videoBlob = await engine.block.exportVideo(page, MimeType.Mp4, progressTracker, videoOptions);\n * ```\n */\n exportVideo(handle: DesignBlockId, options?: VideoExportOptions): Promise<Blob>;\n /**\n * Exports a design block as a video file.\n *\n * Note: The export will run across multiple iterations of the update loop. In each iteration a frame is scheduled for encoding.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only page blocks are supported.\n * @param mimeType - The MIME type of the output video file.\n * @param progressCallback - A callback which reports on the progress of the export.\n * @param options - The options for exporting the video, including h264 profile, level, bitrate, time offset, duration, framerate, target width and height.\n * @returns A promise that resolves with a video blob or is rejected with an error.\n * @deprecated Use the new `exportVideo` signature instead\n *\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.exportVideo(blockId, 'video/mp4', handleProgress, {\n * targetWidth: 1920,\n * targetHeight: 1080,\n * })\n * // After migration\n * const blob = await cesdk.block.exportVideo(blockId, {\n * mimeType: 'video/mp4',\n * progressCallback: handleProgress,\n * targetWidth: 1920,\n * targetHeight: 1080,\n * })\n * ```\n */\n exportVideo(handle: DesignBlockId, mimeType?: VideoExportOptions['mimeType'], progressCallback?: VideoExportOptions['onProgress'], options?: Omit<VideoExportOptions, 'mimeType' | 'onProgress'>): Promise<Blob>;\n /**\n * Exports a design block as an audio file.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only audio blocks are supported.\n * @param options - The options for exporting the audio, including mime type, progress callback, and export settings.\n * @returns A promise that resolves with an audio blob or is rejected with an error.\n * @experimental This API is experimental and may change or be removed in future versions.\n * @example\n * ```typescript\n * const audioBlock = engine.block.create('audio');\n * // Set up a progress tracking function\n * const progressTracker = (renderedFrames, encodedFrames, totalFrames) => {\n * console.log(`Audio export progress: ${Math.round((encodedFrames / totalFrames) * 100)}%`);\n * };\n * const audioOptions = { duration: 10 };\n * const audioBlob = await engine.block.exportAudio(audioBlock, MimeType.Wav, progressTracker, audioOptions);\n * ```\n */\n exportAudio(handle: DesignBlockId, options?: AudioExportOptions): Promise<Blob>;\n /**\n * Loads blocks from a serialized string.\n *\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param content - A string representing the given blocks.\n * @returns A promise that resolves with a list of handles representing the found blocks or an error.\n * @example\n * ```typescript\n * const serializedBlocks = await engine.block.saveToString([pageBlockId]);\n * // Later, load those blocks\n * const loadedBlocks = await engine.block.loadFromString(serializedBlocks);\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromString(content: string): Promise<DesignBlockId[]>;\n /**\n * Loads blocks from a remote archive URL.\n *\n * The URL should be that of a file previously saved with `block.saveToArchive`.\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param url - The URL of the blocks archive file.\n * @returns A promise that resolves with a list of handles representing the found blocks or an error.\n * @example\n * ```typescript\n * // Load blocks from a remote archive\n * const loadedBlocks = await engine.block.loadFromArchiveURL('https://example.com/blocks.zip');\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromArchiveURL(url: string): Promise<DesignBlockId[]>;\n /**\n * Loads blocks from a URL.\n *\n * The URL should point to a blocks file within an unzipped archive directory previously saved with `block.saveToArchive`.\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param url - The URL to the blocks file\n * @returns A promise that resolves with a list of block handles\n * @example\n * ```typescript\n * // Load blocks from a URL\n * const loadedBlocks = await engine.block.loadFromURL('https://example.com/blocks.blocks');\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromURL(url: string): Promise<DesignBlockId[]>;\n /**\n * Saves the given blocks to a serialized string.\n *\n * If a page with multiple children is given, the entire hierarchy is saved.\n *\n * @category Block Lifecycle\n * @param blocks - The blocks to save.\n * @param allowedResourceSchemes - The resource schemes to allow in the saved string. Defaults to ['buffer', 'http', 'https'].\n * @param onDisallowedResourceScheme - An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * @returns A promise that resolves to a string representing the blocks or an error.\n * @example\n * ```typescript\n * // Create a page with a text element\n * const page = engine.block.create('page');\n * const text = engine.block.create('text');\n * engine.block.appendChild(page, text);\n *\n * // Save the whole page hierarchy to a string\n * const serialized = await engine.block.saveToString([page]);\n * ```\n */\n saveToString(blocks: DesignBlockId[], allowedResourceSchemes?: string[], onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>): Promise<string>;\n /**\n * Saves the given blocks and their assets to a zip archive.\n *\n * The archive contains all assets that were accessible when this function was called.\n * Blocks in the archived scene reference assets relative to the location of the scene file.\n *\n * @category Block Lifecycle\n * @param blocks - The blocks to save.\n * @returns A promise that resolves with a Blob on success or an error on failure.\n */\n saveToArchive(blocks: DesignBlockId[]): Promise<Blob>;\n /**\n * Creates a new block of a given type.\n *\n * ```javascript\n * // Create a new text block\n * const text = engine.block.create('text');\n * const page = engine.scene.getCurrentPage();\n * engine.block.appendChild(page, text);\n *\n * // Create a new image block\n * const image = engine.block.create('graphic');\n * engine.block.setShape(image, engine.block.createShape('rect'));\n * const imageFill = engine.block.createFill('image');\n * engine.block.setFill(image, imageFill);\n * engine.block.setString(imageFill, 'fill/image/imageFileURI', 'https://img.ly/static/ubq_samples/sample_1.jpg');\n * engine.block.appendChild(page, image);\n *\n * // Create a new video block\n * const video = engine.block.create('graphic');\n * engine.block.setShape(video, engine.block.createShape('rect'));\n * const videoFill = engine.block.createFill('video');\n * engine.block.setString(videoFill, 'fill/video/fileURI', 'https://cdn.img.ly/assets/demo/v3/ly.img.video/videos/pexels-drone-footage-of-a-surfer-barrelling-a-wave-12715991.mp4');\n * engine.block.setFill(video, videoFill);\n * engine.block.appendChild(page, video);\n * ```\n *\n * @category Block Lifecycle\n * @param type - The type of the block that shall be created.\n * @returns The created block's handle.\n */\n create(type: DesignBlockType): DesignBlockId;\n /**\n * Creates a new fill block.\n *\n * ```javascript\n * const solidColoFill = engine.block.createFill('color');\n * // Longhand fill types are also supported\n * const imageFill = engine.block.createFill('//ly.img.ubq/fill/image');\n * ```\n *\n * @category Block Fills\n * @param type - The type of the fill object that shall be created.\n * @returns The created fill's handle.\n */\n createFill(type: FillType): DesignBlockId;\n /**\n * Gets the number of available audio tracks in a video fill block.\n *\n * ```javascript\n * const trackCount = engine.block.getAudioTrackCountFromVideo(videoBlock);\n * console.log(`Video has ${trackCount} audio tracks`);\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to examine.\n * @returns The number of audio tracks.\n * @throws Will throw an error if the block is not a video fill or has no audio.\n */\n getAudioTrackCountFromVideo(videoFillBlock: DesignBlockId): number;\n /**\n * Creates a new audio block by extracting a specific audio track from a video fill block.\n *\n * ```javascript\n * // Extract the first audio track (usually the main mix) with trim settings\n * const audioBlock = engine.block.createAudioFromVideo(videoFillBlock, 0);\n *\n * // Extract full audio track without trim settings\n * const audioBlock = engine.block.createAudioFromVideo(videoFillBlock, 0, { keepTrimSettings: false });\n *\n * // Extract a specific track, keep trim settings, and mute the original video\n * const dialogueTrack = engine.block.createAudioFromVideo(videoFillBlock, 1, { keepTrimSettings: true, muteOriginalVideo: true });\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to extract audio from.\n * @param trackIndex - The index of the audio track to extract (0-based).\n * @param options - Options for the audio extraction operation.\n * @returns The handle of the newly created audio block with extracted audio from the specified track.\n * @throws Will throw an error if the track index is invalid or the block has no audio.\n */\n createAudioFromVideo(videoFillBlock: DesignBlockId, trackIndex: number, options?: AudioFromVideoOptions): DesignBlockId;\n /**\n * Creates multiple audio blocks by extracting all audio tracks from a video fill block.\n *\n * ```javascript\n * // Extract all audio tracks from a video with trim settings\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock);\n * console.log(`Created ${audioBlocks.length} audio blocks`);\n *\n * // Extract all tracks without trim settings (full audio)\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock, { keepTrimSettings: false });\n *\n * // Extract all tracks with trim settings and mute the original video\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock, { keepTrimSettings: true, muteOriginalVideo: true });\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to extract audio from.\n * @param options - Options for the audio extraction operation.\n * @returns An array of handles for the newly created audio blocks, one per track.\n * @throws Will throw an error if the block has no audio or extraction fails.\n */\n createAudiosFromVideo(videoFillBlock: DesignBlockId, options?: AudioFromVideoOptions): DesignBlockId[];\n /**\n * Gets information about all audio tracks from a video fill block.\n *\n * ```javascript\n * // Get information about all audio tracks\n * const trackInfos = engine.block.getAudioInfoFromVideo(videoFillBlock);\n * console.log(`Video has ${trackInfos.length} audio tracks`);\n *\n * // Display track information\n * trackInfos.forEach((track, index) => {\n * console.log(`Track ${index}: ${track.channels} channels, ${track.sampleRate}Hz, ${track.language}`);\n * });\n *\n * // Use track info to create audio blocks selectively\n * const englishTracks = trackInfos.filter(track => track.language === 'eng');\n * const audioBlocks = englishTracks.map(track =>\n * engine.block.createAudioFromVideo(videoFillBlock, track.trackIndex)\n * );\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to analyze for audio track information.\n * @returns An array containing information about each audio track.\n * @throws Will throw an error if the block is not a video fill or has no audio.\n */\n getAudioInfoFromVideo(videoFillBlock: DesignBlockId): AudioTrackInfo[];\n /**\n * Creates new caption blocks from an SRT or VTT file URI.\n *\n * @category Block Video\n * @param uri - The URI for the captions file to load. Supported file formats are: SRT and VTT.\n * @returns A promise that resolves with a list of the created caption blocks.\n */\n createCaptionsFromURI(uri: string): Promise<DesignBlockId[]>;\n /**\n * Gets the longhand type of a given block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's type.\n */\n getType(id: DesignBlockId): ObjectTypeLonghand;\n /**\n * Gets the kind of a given block.\n *\n * ```javascript\n * const kind = engine.block.getKind(block);\n * ```\n *\n * @category Block Kind\n * @param id - The block to query.\n * @returns The block's kind.\n */\n getKind(id: DesignBlockId): string;\n /**\n * Sets the kind of a given block, a custom string for categorization of blocks.\n *\n * ```javascript\n * engine.block.setKind(text, 'title');\n * ```\n *\n * @category Block Kind\n * @param id - The block whose kind should be changed.\n * @param kind - The new kind.\n */\n setKind(id: DesignBlockId, kind: string): void;\n /**\n * Selects a block, deselecting all others.\n *\n * @category Block Selection & Visibility\n * @param id - The block to be selected.\n */\n select(id: DesignBlockId): void;\n /**\n * Sets the selection state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @param selected - Whether or not the block should be selected.\n */\n setSelected(id: DesignBlockId, selected: boolean): void;\n /**\n * Gets the selection state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @returns True if the block is selected, false otherwise.\n */\n isSelected(id: DesignBlockId): boolean;\n /**\n * Finds all currently selected blocks.\n *\n * @category Block Selection & Visibility\n * @returns An array of block ids.\n */\n findAllSelected(): DesignBlockId[];\n /**\n * Subscribes to changes in the selection.\n *\n * @category Block Events\n * @param callback - This function is called at the end of the engine update if the selection has changed.\n * @returns A method to unsubscribe.\n */\n onSelectionChanged: (callback: () => void) => (() => void);\n /**\n * Subscribes to block click events.\n *\n * @category Block Events\n * @param callback - This function is called at the end of the engine update if a block has been clicked.\n * @returns A method to unsubscribe.\n */\n onClicked: (callback: (id: DesignBlockId) => void) => (() => void);\n /**\n * Checks if a set of blocks can be grouped.\n *\n * A scene block or a block that is already part of a group cannot be grouped.\n *\n * ```javascript\n * const groupable = engine.block.isGroupable([block1, block2])\n * ```\n *\n * @category Block Groups\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be grouped together.\n */\n isGroupable(ids: DesignBlockId[]): boolean;\n /**\n * Groups multiple blocks into a new group block.\n *\n * ```javascript\n * if (engine.block.isGroupable([block1, block2])) {\n * const group = engine.block.group(block1, block2]);\n * }\n * ```\n *\n * @category Block Groups\n * @param ids - A non-empty array of block ids.\n * @returns The block id of the created group.\n */\n group(ids: DesignBlockId[]): DesignBlockId;\n /**\n * Ungroups a group block, releasing its children.\n *\n * ```javascript\n * engine.block.ungroup(group);\n * ```\n *\n * @category Block Groups\n * @param id - The group id from a previous call to `group`.\n */\n ungroup(id: DesignBlockId): void;\n /**\n * Changes selection to a block within a selected group.\n *\n * Nothing happens if the target is not a group.\n *\n * ```javascript\n * engine.block.enterGroup(group);\n * ```\n *\n * @category Block Groups\n * @param id - The group id from a previous call to `group`.\n */\n enterGroup(id: DesignBlockId): void;\n /**\n * Changes selection from a block to its parent group.\n *\n * Nothing happens if the block is not part of a group.\n *\n * ```javascript\n * engine.block.exitGroup(member1);\n * ```\n *\n * @category Block Groups\n * @param id - A block id.\n */\n exitGroup(id: DesignBlockId): void;\n /**\n * Checks if a set of blocks can be combined using a boolean operation.\n *\n * Only graphics blocks and text blocks can be combined.\n * All blocks must have the \"lifecycle/duplicate\" scope enabled.\n *\n * @category Block Boolean Operations\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be combined.\n */\n isCombinable(ids: DesignBlockId[]): boolean;\n /**\n * Performs a boolean operation on a set of blocks.\n *\n * All blocks must be combinable. See `isCombinable`.\n * The parent, fill and sort order of the new block is that of the prioritized block.\n *\n * @category Block Boolean Operations\n * @param ids - The blocks to combine. They will be destroyed if \"lifecycle/destroy\" scope is enabled.\n * @param op - The boolean operation to perform.\n * @returns The newly created block or an error.\n */\n combine(ids: DesignBlockId[], op: BooleanOperation): DesignBlockId;\n /**\n * Sets the name of a block.\n *\n * @category Block State\n * @param id - The block to update.\n * @param name - The name to set.\n */\n setName(id: DesignBlockId, name: string): void;\n /**\n * Gets the name of a block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's name.\n */\n getName(id: DesignBlockId): string;\n /**\n * Gets the unique universal identifier (UUID) of a block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's UUID.\n */\n getUUID(id: DesignBlockId): string;\n /**\n * Finds all blocks with a given name.\n *\n * @category Block Exploration\n * @param name - The name to search for.\n * @returns A list of block ids.\n */\n findByName(name: string): DesignBlockId[];\n /**\n * Finds all blocks with a given type.\n *\n * @category Block Exploration\n * @param type - The type to search for.\n * @returns A list of block ids.\n */\n findByType(type: ObjectType): DesignBlockId[];\n /**\n * Finds all blocks with a given kind.\n *\n * ```javascript\n * const allTitles = engine.block.findByKind('title');\n * ```\n *\n * @category Block Exploration\n * @param kind - The kind to search for.\n * @returns A list of block ids.\n */\n findByKind(kind: string): DesignBlockId[];\n /**\n * Finds all blocks known to the engine.\n *\n * @category Block Exploration\n * @returns A list of block ids.\n */\n findAll(): DesignBlockId[];\n /**\n * Finds all placeholder blocks in the current scene.\n *\n * @category Block Exploration\n * @returns A list of block ids.\n */\n findAllPlaceholders(): DesignBlockId[];\n /**\n * Finds all blocks that are not attached to any scene.\n *\n * A block is considered unused when it has no path to a scene (no scene\n * reference and no ancestor that belongs to a scene) and is not itself a\n * scene. Generated blocks and render blocks (fills, effects, shapes, blurs)\n * are excluded, matching the behaviour of {@link BlockAPI.findAll}.\n *\n * This is useful for cleanup workflows and for filtering the URIs returned\n * by {@link EditorAPI.findAllMediaURIs} before relocating resources.\n *\n * @category Block Exploration\n * @returns A list of block ids that are not attached to any scene.\n */\n findAllUnused(): DesignBlockId[];\n /**\n * Creates a new shape block of a given type.\n *\n * ```javascript\n * const star = engine.block.createShape('star');\n * // Longhand shape types are also supported\n * const rect = engine.block.createShape('//ly.img.ubq/shape/rect');\n * ```\n *\n * @category Block Shapes\n * @param type - The type of the shape object that shall be created.\n * @returns The created shape's handle.\n */\n createShape(type: ShapeType): DesignBlockId;\n /**\n * Checks if a block has a shape property.\n *\n * @category Block Shapes\n * @param id - The block to query.\n * @returns true, if the block has a shape property, an error otherwise.\n * @deprecated Use supportsShape instead.\n */\n hasShape(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports having a shape.\n *\n * @category Block Shapes\n * @param id - The block to query.\n * @returns true, if the block has a shape property, an error otherwise.\n */\n supportsShape(id: DesignBlockId): boolean;\n /**\n * Gets the shape block attached to a given block.\n *\n * @category Block Shapes\n * @param id - The block whose shape block should be returned.\n * @returns The block that currently defines the given block's shape.\n */\n getShape(id: DesignBlockId): DesignBlockId;\n /**\n * Sets the shape block for a given block.\n *\n * Note that the previous shape block is not destroyed automatically.\n * The new shape is disconnected from its previously attached block.\n *\n * @category Block Shapes\n * @param id - The block whose shape should be changed.\n * @param shape - The new shape.\n */\n setShape(id: DesignBlockId, shape: DesignBlockId): void;\n /**\n * Gets the visibility state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @returns True if visible, false otherwise.\n */\n isVisible(id: DesignBlockId): boolean;\n /**\n * Sets the visibility state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to update.\n * @param visible - Whether the block shall be visible.\n */\n setVisible(id: DesignBlockId, visible: boolean): void;\n /**\n * Gets the clipped state of a block.\n *\n * If true, the block should clip its contents to its frame.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns True if clipped, false otherwise.\n */\n isClipped(id: DesignBlockId): boolean;\n /**\n * Sets the clipped state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param clipped - Whether the block should clips its contents to its frame.\n */\n setClipped(id: DesignBlockId, clipped: boolean): void;\n /**\n * Gets the transform-locked state of a block.\n *\n * If true, the block's transform can't be changed.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns True if transform locked, false otherwise.\n */\n isTransformLocked(id: DesignBlockId): boolean;\n /**\n * Checks whether a graphic block originated as a line shape. Survives the\n * line's conversion to a vector path during vector-edit; resets only when\n * the shape is replaced by a non-line shape via `setShape`.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns True if the block originated as a line shape, false otherwise.\n */\n isLineOrigin(id: DesignBlockId): boolean;\n /**\n * Sets the transform-locked state of a block.\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param locked - Whether the block's transform should be locked.\n */\n setTransformLocked(id: DesignBlockId, locked: boolean): void;\n /**\n * Gets the X position of a block.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the x position.\n */\n getPositionX(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's X position.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the x position: 'Absolute' or 'Percent'.\n */\n getPositionXMode(id: DesignBlockId): PositionXMode;\n /**\n * Gets the Y position of a block.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the y position.\n */\n getPositionY(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's Y position.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the y position: 'Absolute' or 'Percent'.\n */\n getPositionYMode(id: DesignBlockId): PositionYMode;\n /**\n * Sets the X position of a block.\n *\n * The position refers to the block's local space, relative to its parent with the origin at the top left.\n *\n * ```javascript\n * engine.block.setPositionX(block, 0.25);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The value of the x position.\n */\n setPositionX(id: DesignBlockId, value: number): void;\n /**\n * Sets the mode for the block's X position.\n *\n * ```javascript\n * engine.block.setPositionXMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The x position mode: 'Absolute' or 'Percent'.\n */\n setPositionXMode(id: DesignBlockId, mode: PositionXMode): void;\n /**\n * Sets the Y position of a block.\n *\n * The position refers to the block's local space, relative to its parent with the origin at the top left.\n *\n * ```javascript\n * engine.block.setPositionY(block, 0.25);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The value of the y position.\n */\n setPositionY(id: DesignBlockId, value: number): void;\n /**\n * Sets the mode for the block's Y position.\n *\n * ```javascript\n * engine.block.setPositionYMode(block, 'Absolute');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The y position mode: 'Absolute' or 'Percent'.\n */\n setPositionYMode(id: DesignBlockId, mode: PositionYMode): void;\n /**\n * Sets a block to always be rendered on top of its siblings.\n *\n * If true, this block's sorting order is automatically adjusted to be higher than all other siblings without this property.\n *\n * @category Block Layout\n * @param id - the block to update.\n * @param enabled - whether the block shall be always-on-top.\n */\n setAlwaysOnTop(id: DesignBlockId, enabled: boolean): void;\n /**\n * Sets a block to always be rendered below its siblings.\n *\n * If true, this block's sorting order is automatically adjusted to be lower than all other siblings without this property.\n *\n * @category Block Layout\n * @param id - the block to update.\n * @param enabled - whether the block shall always be below its siblings.\n */\n setAlwaysOnBottom(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if a block is set to always be on top.\n *\n * @category Block Layout\n * @param id - the block to query.\n * @returns true if the block is set to be always-on-top, false otherwise.\n */\n isAlwaysOnTop(id: DesignBlockId): boolean;\n /**\n * Checks if a block is set to always be on the bottom.\n *\n * @category Block Layout\n * @param id - the block to query.\n * @returns true if the block is set to be always-on-bottom, false otherwise.\n */\n isAlwaysOnBottom(id: DesignBlockId): boolean;\n /**\n * Brings a block to the front of its siblings.\n *\n * Updates the sorting order so that the given block has the highest sorting order.\n *\n * @category Block Layout\n * @param id - The id of the block to bring to the front.\n */\n bringToFront(id: DesignBlockId): void;\n /**\n * Sends a block to the back of its siblings.\n *\n * Updates the sorting order so that the given block has the lowest sorting order.\n *\n * @category Block Layout\n * @param id - The id of the block to send to the back.\n */\n sendToBack(id: DesignBlockId): void;\n /**\n * Brings a block one layer forward.\n *\n * Updates the sorting order to be higher than its next sibling.\n *\n * @category Block Layout\n * @param id - The id of the block to bring forward.\n */\n bringForward(id: DesignBlockId): void;\n /**\n * Sends a block one layer backward.\n *\n * Updates the sorting order to be lower than its previous sibling.\n *\n * @category Block Layout\n * @param id - The id of the block to send backward.\n */\n sendBackward(id: DesignBlockId): void;\n /**\n * Gets the rotation of a block in radians.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The block's rotation around its center in radians.\n */\n getRotation(id: DesignBlockId): number;\n /**\n * Sets the rotation of a block in radians.\n *\n * Rotation is applied around the block's center.\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param radians - The new rotation in radians.\n */\n setRotation(id: DesignBlockId, radians: number): void;\n /**\n * Gets the horizontal flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns A boolean indicating whether the block is flipped horizontally.\n */\n getFlipHorizontal(id: DesignBlockId): boolean;\n /**\n * Gets the vertical flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns A boolean indicating whether the block is flipped vertically.\n */\n getFlipVertical(id: DesignBlockId): boolean;\n /**\n * Sets the horizontal flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param flip - If the flip should be enabled.\n */\n setFlipHorizontal(id: DesignBlockId, flip: boolean): void;\n /**\n * Sets the vertical flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param flip - If the flip should be enabled.\n */\n setFlipVertical(id: DesignBlockId, flip: boolean): void;\n /**\n * Checks if a block supports content fill modes.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has a content fill mode.\n * @deprecated Use supportsContentFillMode instead.\n */\n hasContentFillMode(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports content fill modes.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has a content fill mode.\n */\n supportsContentFillMode(id: DesignBlockId): boolean;\n /**\n * Gets the width of a block in the current width mode.\n *\n * ```javascript\n * const width = engine.block.getWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the block's width.\n */\n getWidth(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's width.\n *\n * ```javascript\n * const widthMode = engine.block.getWidthMode(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the width: 'Absolute', 'Percent' or 'Auto'.\n */\n getWidthMode(id: DesignBlockId): WidthMode;\n /**\n * Gets the height of a block in the current height mode.\n *\n * ```javascript\n * const height = engine.block.getHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the block's height.\n */\n getHeight(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's height.\n *\n * ```javascript\n * const heightMode = engine.block.getHeightMode(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the height: 'Absolute', 'Percent' or 'Auto'.\n */\n getHeightMode(id: DesignBlockId): HeightMode;\n /**\n * Update a block's size.\n *\n * @category Helper\n * @param id - The block to update.\n * @param width - The new width of the block.\n * @param height - The new height of the block.\n * @param options - Optional parameters for the size. Properties:\n * - `maintainCrop` - Whether or not the crop values, if available, should be automatically adjusted.\n * - `sizeMode` - The size mode: Absolute, Percent or Auto.\n */\n setSize(id: DesignBlockId, width: number, height: number, options?: {\n maintainCrop?: boolean;\n sizeMode?: SizeMode;\n }): void;\n /**\n * Update a block's position.\n *\n * @category Helper\n * @param id - The block to update.\n * @param x - The new x position of the block.\n * @param y - The new y position of the block.\n * @param options - Optional parameters for the position. Properties:\n * - `positionMode` - The position mode: absolute, percent or undefined.\n */\n setPosition(id: DesignBlockId, x: number, y: number, options?: {\n positionMode?: PositionMode;\n }): void;\n /**\n * Sets the width of a block in the current width mode.\n *\n * If the crop is maintained, the crop values will be automatically adjusted.\n *\n * ```javascript\n * engine.block.setWidth(block, 2.5, true);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The new width of the block.\n * @param maintainCrop - Whether or not the crop values, if available, should be automatically adjusted.\n */\n setWidth(id: DesignBlockId, value: number, maintainCrop?: boolean): void;\n /**\n * Sets the mode for the block's width.\n *\n * ```javascript\n * engine.block.setWidthMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The width mode: 'Absolute', 'Percent' or 'Auto'.\n */\n setWidthMode(id: DesignBlockId, mode: WidthMode): void;\n /**\n * Sets the height of a block in the current height mode.\n *\n * If the crop is maintained, the crop values will be automatically adjusted.\n *\n * ```javascript\n * engine.block.setHeight(block, 0.5);\n * engine.block.setHeight(block, 2.5, true);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The new height of the block.\n * @param maintainCrop - Whether or not the crop values, if available, should be automatically adjusted.\n */\n setHeight(id: DesignBlockId, value: number, maintainCrop?: boolean): void;\n /**\n * Sets the mode for the block's height.\n *\n * ```javascript\n * engine.block.setHeightMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The height mode: 'Absolute', 'Percent' or 'Auto'.\n */\n setHeightMode(id: DesignBlockId, mode: HeightMode): void;\n /**\n * Gets the final calculated X position of a block's frame.\n *\n * The position is only available after an internal update loop.\n *\n * ```javascript\n * const frameX = engine.block.getFrameX(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout position on the x-axis.\n */\n getFrameX(id: DesignBlockId): number;\n /**\n * Gets the final calculated Y position of a block's frame.\n *\n * The position is only available after an internal update loop.\n *\n * ```javascript\n * const frameY = engine.block.getFrameY(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout position on the y-axis.\n */\n getFrameY(id: DesignBlockId): number;\n /**\n * Gets the final calculated width of a block's frame.\n *\n * The width is only available after an internal update loop.\n *\n * ```javascript\n * const frameWidth = engine.block.getFrameWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout width.\n */\n getFrameWidth(id: DesignBlockId): number;\n /**\n * Gets the final calculated height of a block's frame.\n *\n * The height is only available after an internal update loop.\n *\n * ```javascript\n * const frameHeight = engine.block.getFrameHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout height.\n */\n getFrameHeight(id: DesignBlockId): number;\n /**\n * Sets the content fill mode of a block.\n *\n * ```javascript\n * engine.block.setContentFillMode(image, 'Cover');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param mode - The content fill mode: 'Crop', 'Cover' or 'Contain'.\n */\n setContentFillMode(id: DesignBlockId, mode: ContentFillMode): void;\n /**\n * Gets the content fill mode of a block.\n *\n * ```javascript\n * engine.block.getContentFillMode(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current mode: 'Crop', 'Cover' or 'Contain'.\n */\n getContentFillMode(id: DesignBlockId): ContentFillMode;\n /**\n * Sets the horizontal alignment of the content fill within a block.\n *\n * Only affects 'Contain' and 'Cover' fill modes; has no visible effect in 'Crop' mode,\n * where the user positions the content explicitly.\n *\n * ```javascript\n * engine.block.setContentFillHorizontalAlignment(image, 'Left');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param alignment - The horizontal alignment: 'Left', 'Center' or 'Right'.\n */\n setContentFillHorizontalAlignment(id: DesignBlockId, alignment: HorizontalContentFillAlignment): void;\n /**\n * Gets the horizontal alignment of the content fill within a block.\n *\n * ```javascript\n * engine.block.getContentFillHorizontalAlignment(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current alignment: 'Left', 'Center' or 'Right'.\n */\n getContentFillHorizontalAlignment(id: DesignBlockId): HorizontalContentFillAlignment;\n /**\n * Sets the vertical alignment of the content fill within a block.\n *\n * Only affects 'Contain' and 'Cover' fill modes; has no visible effect in 'Crop' mode,\n * where the user positions the content explicitly.\n *\n * ```javascript\n * engine.block.setContentFillVerticalAlignment(image, 'Top');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param alignment - The vertical alignment: 'Top', 'Center' or 'Bottom'.\n */\n setContentFillVerticalAlignment(id: DesignBlockId, alignment: VerticalContentFillAlignment): void;\n /**\n * Gets the vertical alignment of the content fill within a block.\n *\n * ```javascript\n * engine.block.getContentFillVerticalAlignment(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current alignment: 'Top', 'Center' or 'Bottom'.\n */\n getContentFillVerticalAlignment(id: DesignBlockId): VerticalContentFillAlignment;\n /**\n * Duplicates a block and its children.\n *\n * @category Block Lifecycle\n * @param id - The block to duplicate.\n * @param attachToParent - Whether the duplicated block should be attached to the original's parent. Defaults to true.\n * @returns The handle of the duplicate.\n */\n duplicate(id: DesignBlockId, attachToParent?: boolean): DesignBlockId;\n /**\n * Destroys a block and its children.\n *\n * @category Block Lifecycle\n * @param id - The block to destroy.\n */\n destroy(id: DesignBlockId): void;\n /**\n * Checks if a block handle is valid.\n *\n * A block becomes invalid once it has been destroyed.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns True, if the block is valid.\n */\n isValid(id: DesignBlockId): boolean;\n /**\n * Gets the parent of a block.\n *\n * @category Block Hierarchies\n * @param id - The block to query.\n * @returns The parent's handle or null if the block has no parent.\n */\n getParent(id: DesignBlockId): DesignBlockId | null;\n /**\n * Gets all direct children of a block.\n *\n * Children are sorted in their rendering order: Last child is rendered in front of other children.\n *\n * @category Block Hierarchies\n * @param id - The block to query.\n * @returns A list of block ids.\n */\n getChildren(id: DesignBlockId): DesignBlockId[];\n /**\n * Inserts a child block at a specific index.\n *\n * @category Block Hierarchies\n * @param parent - The block whose children should be updated.\n * @param child - The child to insert. Can be an existing child of `parent`.\n * @param index - The index to insert or move to.\n */\n insertChild(parent: DesignBlockId, child: DesignBlockId, index: number): void;\n /**\n * Appends a child block to a parent.\n *\n * @category Block Hierarchies\n * @param parent - The block whose children should be updated.\n * @param child - The child to insert. Can be an existing child of `parent`.\n */\n appendChild(parent: DesignBlockId, child: DesignBlockId): void;\n /**\n * Checks if a block references any variables.\n *\n * This check does not recurse into children.\n *\n * @category Block State\n * @param id - The block to inspect.\n * @returns true if the block references variables and false otherwise.\n */\n referencesAnyVariables(id: DesignBlockId): boolean;\n /**\n * Gets the X position of the block's global bounding box.\n *\n * The position is in the scene's global coordinate space, with the origin at the top left.\n *\n * ```javascript\n * const globalX = engine.block.getGlobalBoundingBoxX(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The x coordinate of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxX(id: DesignBlockId): number;\n /**\n * Gets the Y position of the block's global bounding box.\n *\n * The position is in the scene's global coordinate space, with the origin at the top left.\n *\n * ```javascript\n * const globalY = engine.block.getGlobalBoundingBoxY(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The y coordinate of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxY(id: DesignBlockId): number;\n /**\n * Gets the width of the block's global bounding box.\n *\n * The width is in the scene's global coordinate space.\n *\n * ```javascript\n * const globalWidth = engine.block.getGlobalBoundingBoxWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The width of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxWidth(id: DesignBlockId): number;\n /**\n * Gets the height of the block's global bounding box.\n *\n * The height is in the scene's global coordinate space.\n *\n * ```javascript\n * const globalHeight = engine.block.getGlobalBoundingBoxHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The height of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxHeight(id: DesignBlockId): number;\n /**\n * Gets the screen-space bounding box for a set of blocks.\n *\n * ```javascript\n * const boundingBox = engine.block.getScreenSpaceBoundingBoxXYWH([block]);\n * ```\n *\n * @category Block Layout\n * @param ids - The block to query.\n * @returns The position and size of the bounding box.\n */\n getScreenSpaceBoundingBoxXYWH(ids: DesignBlockId[]): XYWH;\n /**\n * Aligns blocks horizontally.\n *\n * Aligns multiple blocks within their bounding box or a single block to its parent.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n * @param horizontalBlockAlignment - How they should be aligned: 'Left', 'Right', or 'Center'.\n */\n alignHorizontally(ids: DesignBlockId[], horizontalBlockAlignment: TextHorizontalAlignment): void;\n /**\n * Aligns blocks vertically.\n *\n * Aligns multiple blocks within their bounding box or a single block to its parent.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n * @param verticalBlockAlignment - How they should be aligned: 'Top', 'Bottom', or 'Center'.\n */\n alignVertically(ids: DesignBlockId[], verticalBlockAlignment: TextVerticalAlignment): void;\n /**\n * Checks if a set of blocks can be aligned.\n *\n * @category Block Utils\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be aligned.\n */\n isAlignable(ids: DesignBlockId[]): boolean;\n /**\n * Distributes blocks horizontally with even spacing.\n *\n * Distributes multiple blocks horizontally within their bounding box.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n */\n distributeHorizontally(ids: DesignBlockId[]): void;\n /**\n * Distributes blocks vertically with even spacing.\n *\n * Distributes multiple blocks vertically within their bounding box.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n */\n distributeVertically(ids: DesignBlockId[]): void;\n /**\n * Checks if a set of blocks can be distributed.\n *\n * @category Block Utils\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be distributed.\n */\n isDistributable(ids: DesignBlockId[]): boolean;\n /**\n * Resizes and positions a block to fill its parent.\n *\n * The crop values of the block are reset if it can be cropped.\n *\n * @category Block Layout\n * @param id - The block that should fill its parent.\n */\n fillParent(id: DesignBlockId): void;\n /**\n * Resizes blocks while adjusting content to fit.\n *\n * The content of the blocks is automatically adjusted to fit the new dimensions.\n * Full-page blocks are resized to remain as full-page afterwards, while the blocks that are not full-page get resized as a group to the same scale factor and centered.\n * ```javascript\n * const pages = engine.scene.getPages();\n * engine.block.resizeContentAware(pages, width: 100.0, 100.0);\n * ```\n *\n * @category Block Layout\n * @param ids - The blocks to resize.\n * @param width - The new width of the blocks.\n * @param height - The new height of the blocks.\n */\n resizeContentAware(ids: DesignBlockId[], width: number, height: number): void;\n /**\n * Scales a block and its children proportionally.\n *\n * This updates the position, size and style properties (e.g. stroke width) of\n * the block and its children around the specified anchor point.\n *\n * ```javascript\n * // Scale a block to double its size, anchored at the center.\n * engine.block.scale(block, 2.0, 0.5, 0.5);\n * ```\n *\n * @category Block Layout\n * @param id - The block that should be scaled.\n * @param scale - The scale factor to be applied to the current properties of the block.\n * @param anchorX - The relative position along the width of the block around which the scaling should occur (0=left, 0.5=center, 1=right). Defaults to 0.\n * @param anchorY - The relative position along the height of the block around which the scaling should occur (0=top, 0.5=center, 1=bottom). Defaults to 0.\n */\n scale(id: DesignBlockId, scale: number, anchorX?: number, anchorY?: number): void;\n /**\n * Gets all available properties of a block.\n *\n * @category Block Properties\n * @param id - The block whose properties should be queried.\n * @returns A list of the property names.\n */\n findAllProperties(id: DesignBlockId): string[];\n /**\n * Checks if a property is readable.\n *\n * @category Block Properties\n * @param property - The name of the property to check.\n * @returns Whether the property is readable. Returns false for unknown properties.\n */\n isPropertyReadable(property: string): boolean;\n /**\n * Checks if a property is writable.\n *\n * @category Block Properties\n * @param property - The name of the property to check.\n * @returns Whether the property is writable. Returns false for unknown properties.\n */\n isPropertyWritable(property: string): boolean;\n /**\n * Gets the type of a property by its name.\n *\n * @category Block Properties\n * @param property - The name of the property whose type should be queried.\n * @returns The property type.\n */\n getPropertyType(property: string): PropertyType;\n /**\n * Gets all possible values of an enum property.\n *\n * @category Block Properties\n * @param enumProperty - The name of the property whose enum values should be queried.\n * @returns A list of the enum value names as a string array.\n */\n getEnumValues<T = string>(enumProperty: string): T[];\n /**\n * Sets a boolean property on a block.\n *\n * ```javascript\n * engine.block.setBool(scene, 'scene/aspectRatioLock', false);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setBool(id: DesignBlockId, property: BoolPropertyName, value: boolean): void;\n /**\n * Gets a boolean property from a block.\n *\n * ```javascript\n * engine.block.getBool(scene, 'scene/aspectRatioLock');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getBool(id: DesignBlockId, property: BoolPropertyName): boolean;\n /**\n * Sets an integer property on a block.\n *\n * ```javascript\n * engine.block.setInt(starShape, 'shape/star/points', points + 2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setInt(id: DesignBlockId, property: IntPropertyName, value: number): void;\n /**\n * Gets an integer property from a block.\n *\n * ```javascript\n * engine.block.setInt(starShape, 'shape/star/points', points + 2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getInt(id: DesignBlockId, property: IntPropertyName): number;\n /**\n * Sets a float property on a block.\n *\n * ```javascript\n * engine.block.setFloat(text, \"text/letterSpacing\", 0.2);\n * engine.block.setFloat(text, \"text/lineHeight\", 1.2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setFloat(id: DesignBlockId, property: FloatPropertyName, value: number): void;\n /**\n * Gets a float property from a block.\n *\n * ```javascript\n * engine.block.getFloat(starShape, 'shape/star/innerDiameter');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getFloat(id: DesignBlockId, property: FloatPropertyName): number;\n /**\n * Sets a double-precision float property on a block.\n *\n * ```javascript\n * engine.block.setDouble(audio, 'playback/duration', 1.0);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setDouble(id: DesignBlockId, property: DoublePropertyName, value: number): void;\n /**\n * Gets a double-precision float property from a block.\n *\n * ```javascript\n * engine.block.getDouble(audio, 'playback/duration');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getDouble(id: DesignBlockId, property: DoublePropertyName): number;\n /**\n * Sets a string property on a block.\n *\n * ```javascript\n * engine.block.setString(text, 'text/text', 'Hello World');\n * engine.block.setString(imageFill, 'fill/image/imageFileURI', 'https://example.com/sample.jpg');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setString(id: DesignBlockId, property: StringPropertyName, value: string): void;\n /**\n * Gets a string property from a block.\n *\n * ```javascript\n * engine.block.getString(text, 'text/text');\n * engine.block.getString(imageFill, 'fill/image/imageFileURI');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getString(id: DesignBlockId, property: StringPropertyName): string;\n /**\n * Sets a color property on a block.\n *\n * ```javascript\n * // Set the block's fill color to white.\n * engine.block.setColor(colorFill, 'fill/color/value', { r: 1, g: 1, b: 1, a: 1 });\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setColor(id: DesignBlockId, property: ColorPropertyName, value: Color): void;\n /**\n * Gets a color property from a block.\n *\n * ```javascript\n * engine.block.getColor(colorFill, 'fill/color/value');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getColor(id: DesignBlockId, property: ColorPropertyName): Color;\n /**\n * Sets a color property on a block using RGBA values.\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1. Defaults to 1.\n * @deprecated Use setColor() instead.\n */\n setColorRGBA(id: DesignBlockId, property: string, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets a color property from a block as RGBA values.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns A tuple of channels red, green, blue and alpha in the range of 0 to 1.\n * @deprecated Use getColor() instead.\n */\n getColorRGBA(id: DesignBlockId, property: string): RGBA;\n /**\n * Sets a spot color property on a block.\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param name - The name of the spot color.\n * @param tint - The tint factor in the range of 0 to 1. Defaults to 1.\n * @deprecated Use setColor() instead.\n */\n setColorSpot(id: DesignBlockId, property: string, name: string, tint?: number): void;\n /**\n * Gets the spot color name from a color property.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The name of the spot color.\n * @deprecated Use getColor() instead.\n */\n getColorSpotName(id: DesignBlockId, property: string): string;\n /**\n * Gets the spot color tint from a color property.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The tint factor of the spot color.\n * @deprecated Use getColor() instead.\n */\n getColorSpotTint(id: DesignBlockId, property: string): number;\n /**\n * Sets the color stops for a gradient property.\n *\n * ```javascript\n * engine.block.setGradientColorStops(gradientFill, 'fill/gradient/colors', [\n * { color: { r: 1.0, g: 0.8, b: 0.2, a: 1.0 }, stop: 0 },\n * { color: { r: 0.3, g: 0.4, b: 0.7, a: 1.0 }, stop: 1 }\n * ]);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set, e.g. 'fill/gradient/colors'.\n * @param colors - An array of gradient color stops.\n */\n setGradientColorStops(id: DesignBlockId, property: string, colors: GradientColorStop[]): void;\n /**\n * Gets the color stops from a gradient property.\n *\n * ```\n * engine.block.getGradientColorStops(gradientFill, 'fill/gradient/colors');\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The gradient colors.\n */\n getGradientColorStops(id: DesignBlockId, property: string): GradientColorStop[];\n /**\n * Gets the source set from a block property.\n *\n * ```javascript\n * const sourceSet = engine.block.getSourceSet(imageFill, 'fill/image/sourceSet');\n * ```\n *\n * @category Block Fills\n * @param id - The block that should be queried.\n * @param property - The name of the property to query, e.g. 'fill/image/sourceSet'.\n * @returns The block's source set.\n */\n getSourceSet(id: DesignBlockId, property: SourceSetPropertyName): Source[];\n /**\n * Sets the source set for a block property.\n *\n * The crop and content fill mode of the associated block will be reset to default values.\n *\n * ```javascript\n * engine.block.setSourceSet(imageFill, 'fill/image/sourceSet', [{\n * uri: 'https://example.com/sample.jpg',\n * width: 800,\n * height: 600\n * }]);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param sourceSet - The block's new source set.\n */\n setSourceSet(id: DesignBlockId, property: SourceSetPropertyName, sourceSet: Source[]): void;\n /**\n * Adds an image file URI to a source set property.\n *\n * If an image with the same width already exists in the source set, it will be replaced.\n *\n * ```javascript\n * await engine.block.addImageFileURIToSourceSet(imageFill, 'fill/image/sourceSet', 'https://example.com/sample.jpg');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param property - The name of the property to modify.\n * @param uri - The source to add to the source set.\n * @returns A promise that resolves when the operation is complete.\n */\n addImageFileURIToSourceSet(id: DesignBlockId, property: SourceSetPropertyName, uri: string): Promise<void>;\n /**\n * Adds a video file URI to a source set property.\n *\n * If a video with the same width already exists in the source set, it will be replaced.\n *\n * ```javascript\n * await engine.block.addVideoFileURIToSourceSet(videoFill, 'fill/video/sourceSet', 'https://example.com/sample.mp4');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param property - The name of the property to modify.\n * @param uri - The source to add to the source set.\n * @returns A promise that resolves when the operation is complete.\n */\n addVideoFileURIToSourceSet(id: DesignBlockId, property: SourceSetPropertyName, uri: string): Promise<void>;\n /**\n * Sets an enum property on a block.\n *\n * ```javascript\n * engine.block.setEnum(text, 'text/horizontalAlignment', 'Center');\n * engine.block.setEnum(text, 'text/verticalAlignment', 'Center');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The enum value as a string.\n */\n setEnum<T extends keyof BlockEnumType>(id: DesignBlockId, property: T, value: BlockEnumType[T]): void;\n setEnum(id: DesignBlockId, property: string, value: string): void;\n /**\n * Gets an enum property from a block.\n *\n * ```javascript\n * engine.block.getEnum(text, 'text/horizontalAlignment');\n * engine.block.getEnum(text, 'text/verticalAlignment');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value as a string.\n */\n getEnum<T extends keyof BlockEnumType>(id: DesignBlockId, property: T): BlockEnumType[T];\n getEnum(id: DesignBlockId, property: string): string;\n /**\n * Checks if a block has crop properties.\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns true, if the block has crop properties.\n * @deprecated Use supportsCrop() instead.\n */\n hasCrop(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports cropping.\n *\n * ```javascript\n * engine.block.supportsCrop(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns true, if the block supports cropping.\n */\n supportsCrop(id: DesignBlockId): boolean;\n /**\n * Sets the horizontal crop scale of a block.\n *\n * ```javascript\n * engine.block.setCropScaleX(image, 2.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleX - The scale in x direction.\n */\n setCropScaleX(id: DesignBlockId, scaleX: number): void;\n /**\n * Sets the vertical crop scale of a block.\n *\n * ```javascript\n * engine.block.setCropScaleY(image, 1.5);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleY - The scale in y direction.\n */\n setCropScaleY(id: DesignBlockId, scaleY: number): void;\n /**\n * Sets the crop rotation of a block in radians.\n *\n * ```javascript\n * engine.block.setCropRotation(image, Math.PI);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param rotation - The rotation in radians.\n */\n setCropRotation(id: DesignBlockId, rotation: number): void;\n /**\n * Sets the uniform crop scale ratio of a block.\n *\n * This scales the content up or down from the center of the crop frame.\n *\n * ```javascript\n * engine.block.setCropScaleRatio(image, 3.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleRatio - The crop scale ratio.\n */\n setCropScaleRatio(id: DesignBlockId, scaleRatio: number): void;\n /**\n * Sets the horizontal crop translation of a block in percentage of the crop frame width.\n *\n * ```javascript\n * engine.block.setCropTranslationX(image, -1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param translationX - The translation in x direction.\n */\n setCropTranslationX(id: DesignBlockId, translationX: number): void;\n /**\n * Sets the vertical crop translation of a block in percentage of the crop frame height.\n *\n * ```javascript\n * engine.block.setCropTranslationY(image, 1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param translationY - The translation in y direction.\n */\n setCropTranslationY(id: DesignBlockId, translationY: number): void;\n /**\n * Resets the crop of a block to its default state.\n *\n * The block's content fill mode is set to 'Cover'.\n *\n * ```javascript\n * engine.block.resetCrop(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be reset.\n */\n resetCrop(id: DesignBlockId): void;\n /**\n * Gets the horizontal crop scale of a block.\n *\n * ```javascript\n * const scaleX = engine.block.getCropScaleX(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose scale should be queried.\n * @returns The scale on the x axis.\n */\n getCropScaleX(id: DesignBlockId): number;\n /**\n * Gets the vertical crop scale of a block.\n *\n * ```javascript\n * const scaleY = engine.block.getCropScaleY(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose scale should be queried.\n * @returns The scale on the y axis.\n */\n getCropScaleY(id: DesignBlockId): number;\n /**\n * Gets the crop rotation of a block in radians.\n *\n * ```javascript\n * const cropRotation = engine.block.getCropRotation(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop rotation should be queried.\n * @returns The crop rotation in radians.\n */\n getCropRotation(id: DesignBlockId): number;\n /**\n * Gets the uniform crop scale ratio of a block.\n *\n * ```javascript\n * const cropScaleRatio = engine.block.getCropScaleRatio(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop scale ratio should be queried.\n * @returns The crop scale ratio.\n */\n getCropScaleRatio(id: DesignBlockId): number;\n /**\n * Gets the horizontal crop translation of a block in percentage of the crop frame width.\n *\n * ```javascript\n * const cropTranslationX = engine.block.getCropTranslationX(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose translation should be queried.\n * @returns The translation on the x axis.\n */\n getCropTranslationX(id: DesignBlockId): number;\n /**\n * Gets the vertical crop translation of a block in percentage of the crop frame height.\n *\n * ```javascript\n * const cropTranslationY = engine.block.getCropTranslationY(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose translation should be queried.\n * @returns The translation on the y axis.\n */\n getCropTranslationY(id: DesignBlockId): number;\n /**\n * Adjusts the crop position and scale of the given image block to fill its crop frame, while maintaining the position and size of the crop frame.\n *\n * ```javascript\n * const adjustedScaleRatio = engine.block.adjustCropToFillFrame(image, 1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be adjusted.\n * @param minScaleRatio - The minimal crop scale ratio to use.\n * @returns The adjusted scale ratio.\n */\n adjustCropToFillFrame(id: DesignBlockId, minScaleRatio: number): number;\n /**\n * Flips the content horizontally within its crop frame.\n *\n * ```javascript\n * engine.block.flipCropHorizontal(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be updated.\n */\n flipCropHorizontal(id: DesignBlockId): void;\n /**\n * Flips the content vertically within its crop frame.\n *\n * ```javascript\n * engine.block.flipCropVertical(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be updated.\n */\n flipCropVertical(id: DesignBlockId): void;\n /**\n * Checks if the crop aspect ratio is locked for a block.\n *\n * When locked, crop handles will maintain the current aspect ratio during resize.\n *\n * ```javascript\n * const isLocked = engine.block.isCropAspectRatioLocked(block);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns True if aspect ratio is locked, false otherwise.\n */\n isCropAspectRatioLocked(id: DesignBlockId): boolean;\n /**\n * Sets whether the crop aspect ratio should be locked for a block.\n *\n * When enabled, crop handles will maintain the current aspect ratio.\n * When disabled, free resizing is allowed.\n *\n * ```javascript\n * engine.block.setCropAspectRatioLocked(block, true);\n * ```\n *\n * @category Block Crop\n * @param id - The block to update.\n * @param locked - Whether aspect ratio should be locked.\n */\n setCropAspectRatioLocked(id: DesignBlockId, locked: boolean): void;\n /**\n * Checks whether the \"Original\" crop preset (`ContentAspectRatio`) can be applied to a block.\n *\n * This runs the same preliminary check the apply path performs: it resolves the intrinsic\n * content dimensions from the block's image/video fill (an image fill resolves only from its\n * `sourceSet`; a video fill resolves from its `sourceSet` or the first decoded frame). Use it\n * to gate UI that would otherwise call the preset and fail — e.g. an unreplaced placeholder\n * image fill with an empty `sourceSet`.\n *\n * ```javascript\n * const canRevert = engine.block.canRevertToOriginalRatio(block);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns True if the preset would resolve, false if it cannot (no/placeholder fill, empty\n * sourceSet, video not yet decoded, or unsupported fill type).\n */\n canRevertToOriginalRatio(id: DesignBlockId): boolean;\n /**\n * Checks if a block has an opacity property.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has an opacity.\n * @deprecated Use supportsOpacity() instead.\n */\n hasOpacity(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports opacity.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports opacity.\n */\n supportsOpacity(id: DesignBlockId): boolean;\n /**\n * Sets the opacity of a block.\n *\n * @category Block Appearance\n * @param id - The block whose opacity should be set.\n * @param opacity - The opacity to be set. The valid range is 0 to 1.\n */\n setOpacity(id: DesignBlockId, opacity: number): void;\n /**\n * Gets the opacity of a block.\n *\n * @category Block Appearance\n * @param id - The block whose opacity should be queried.\n * @returns The opacity value.\n */\n getOpacity(id: DesignBlockId): number;\n /**\n * Checks if a block has a blend mode property.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has a blend mode.\n * @deprecated Use supportsBlendMode() instead.\n */\n hasBlendMode(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports blend modes.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports blend modes.\n */\n supportsBlendMode(id: DesignBlockId): boolean;\n /**\n * Sets the blend mode of a block.\n *\n * @category Block Appearance\n * @param id - The block whose blend mode should be set.\n * @param blendMode - The blend mode to be set.\n */\n setBlendMode(id: DesignBlockId, blendMode: BlendMode): void;\n /**\n * Gets the blend mode of a block.\n *\n * @category Block Appearance\n * @param id - The block whose blend mode should be queried.\n * @returns The blend mode.\n */\n getBlendMode(id: DesignBlockId): BlendMode;\n /**\n * Checks if a block has fill color properties.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has fill color properties.\n * @deprecated Query the fill's type using getFill() and getType() instead.\n */\n hasFillColor(id: DesignBlockId): boolean;\n /**\n * Checks if a block is included in exports.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns true, if the block is included on the exported result, false otherwise.\n */\n isIncludedInExport(id: DesignBlockId): boolean;\n /**\n * Sets whether a block should be included in exports.\n *\n * @category Block State\n * @param id - The block whose exportable state should be set.\n * @param enabled - If true, the block will be included on the exported result.\n */\n setIncludedInExport(id: DesignBlockId, enabled: boolean): void;\n /**\n * Sets the fill color of a block using RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setFillSolidColor() instead.\n */\n setFillColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the fill color of a block as RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be queried.\n * @returns The fill color.\n * @deprecated Use getFillSolidColor() instead.\n */\n getFillColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the fill of a block.\n *\n * @category Block Fills\n * @param id - The block whose fill should be enabled or disabled.\n * @param enabled - If true, the fill will be enabled.\n * @deprecated Use setFillEnabled() instead.\n */\n setFillColorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the fill of a block is enabled.\n *\n * @category Block Fills\n * @param id - The block whose fill state should be queried.\n * @returns True, if fill is enabled.\n * @deprecated Use isFillEnabled() instead.\n */\n isFillColorEnabled(id: DesignBlockId): boolean;\n /**\n * Creates a new effect block.\n *\n * @category Block Effects\n * @param type - The type of the effect.\n * @returns The created effect's handle.\n */\n createEffect(type: EffectType): DesignBlockId;\n /**\n * Checks if a block supports effects.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns True, if the block can render effects, false otherwise.\n * @deprecated Use supportsEffects instead.\n */\n hasEffects(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports effects.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns True, if the block can render effects, false otherwise.\n */\n supportsEffects(id: DesignBlockId): boolean;\n /**\n * Gets all effects attached to a block.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns A list of effects or an error, if the block doesn't support effects.\n */\n getEffects(id: DesignBlockId): DesignBlockId[];\n /**\n * Inserts an effect into a block's effect list at a given index.\n *\n * @category Block Effects\n * @param id - The block to update.\n * @param effectId - The effect to insert.\n * @param index - The index at which the effect shall be inserted.\n */\n insertEffect(id: DesignBlockId, effectId: DesignBlockId, index: number): void;\n /**\n * Appends an effect to a block's effect list.\n *\n * @category Block Effects\n * @param id - The block to append the effect to.\n * @param effectId - The effect to append.\n */\n appendEffect(id: DesignBlockId, effectId: DesignBlockId): void;\n /**\n * Removes an effect from a block's effect list at a given index.\n *\n * @category Block Effects\n * @param id - The block to remove the effect from.\n * @param index - The index where the effect is stored.\n */\n removeEffect(id: DesignBlockId, index: number): void;\n /**\n * Checks if an effect block can be enabled or disabled.\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to query.\n * @returns True, if the block supports enabling and disabling, false otherwise.\n * @deprecated Calls to this function can be removed. All effects can be enabled and disabled.\n */\n hasEffectEnabled(effectId: DesignBlockId): boolean;\n /**\n * Sets the enabled state of an effect block.\n *\n * ```javascript\n * engine.block.setEffectEnabled(effects[0], false);\n * ```\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to update.\n * @param enabled - The new state.\n */\n setEffectEnabled(effectId: DesignBlockId, enabled: boolean): void;\n /**\n * Queries if an effect block is enabled.\n *\n * ```javascript\n * engine.block.isEffectEnabled(effects[0]);\n * ```\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to query.\n * @returns True, if the effect is enabled. False otherwise.\n */\n isEffectEnabled(effectId: DesignBlockId): boolean;\n /**\n * Creates a new blur block.\n *\n * @category Block Blur\n * @param type - The type of blur.\n * @returns The handle of the newly created blur.\n */\n createBlur(type: BlurType): DesignBlockId;\n /**\n * Checks if a block supports blur.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the block supports blur.\n * @deprecated Use supportsBlur instead.\n */\n hasBlur(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports blur.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the block supports blur.\n */\n supportsBlur(id: DesignBlockId): boolean;\n /**\n * Sets the blur effect for a block.\n *\n * @category Block Blur\n * @param id - The block to update.\n * @param blurId - A 'blur' block to apply.\n */\n setBlur(id: DesignBlockId, blurId: DesignBlockId): void;\n /**\n * Gets the blur block of a given design block.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns The 'blur' block.\n */\n getBlur(id: DesignBlockId): DesignBlockId;\n /**\n * Enables or disables the blur effect on a block.\n *\n * ```javascript\n * engine.block.setBlurEnabled(block, true);\n * ```\n *\n * @category Block Blur\n * @param id - The block to update.\n * @param enabled - The new enabled value.\n */\n setBlurEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if blur is enabled for a block.\n *\n * ```javascript\n * const isBlurEnabled = engine.block.isBlurEnabled(block);\n * ```\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the blur is enabled. False otherwise.\n */\n isBlurEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has background color properties.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has background color properties.\n * @deprecated Use supportsBackgroundColor() instead.\n */\n hasBackgroundColor(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a background color.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports a background color.\n */\n supportsBackgroundColor(id: DesignBlockId): boolean;\n /**\n * Sets the background color of a block using RGBA values.\n *\n * @category Block Appearance\n * @param id - The block whose background color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use `Use setColor() with the key path 'backgroundColor/color' instead.`.\n */\n setBackgroundColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the background color of a block as RGBA values.\n *\n * @category Block Appearance\n * @param id - The block whose background color should be queried.\n * @returns The background color.\n * @deprecated Use `Use getColor() with the key path 'backgroundColor/color' instead.`.\n */\n getBackgroundColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the background of a block.\n *\n * ```javascript\n * engine.block.setBackgroundColorEnabled(block, true);\n * ```\n *\n * @category Block Appearance\n * @param id - The block whose background should be enabled or disabled.\n * @param enabled - If true, the background will be enabled.\n */\n setBackgroundColorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the background of a block is enabled.\n *\n * ```javascript\n * const backgroundColorIsEnabled = engine.block.isBackgroundColorEnabled(block);\n * ```\n *\n * @category Block Appearance\n * @param id - The block whose background state should be queried.\n * @returns True, if background is enabled.\n */\n isBackgroundColorEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has a stroke property.\n *\n * @category Block Strokes\n * @param id - The block to query.\n * @returns True if the block has a stroke property.\n * @deprecated Use supportsStroke() instead.\n */\n hasStroke(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a stroke.\n *\n * @category Block Strokes\n * @param id - The block to query.\n * @returns True if the block supports a stroke.\n */\n supportsStroke(id: DesignBlockId): boolean;\n /**\n * Enables or disables the stroke of a block.\n *\n * ```javascript\n * engine.block.setStrokeEnabled(block, true);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke should be enabled or disabled.\n * @param enabled - If true, the stroke will be enabled.\n */\n setStrokeEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the stroke of a block is enabled.\n *\n * ```javascript\n * const strokeIsEnabled = engine.block.isStrokeEnabled(block);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke state should be queried.\n * @returns True if the block's stroke is enabled.\n */\n isStrokeEnabled(id: DesignBlockId): boolean;\n /**\n * Marks the stroke of a block as overprint for PDF export.\n *\n * The flag is only honored by the PDF writer when the stroke uses a spot color\n * (Separation/DeviceN). For process-color strokes it is a silent no-op. On-screen\n * rendering ignores the flag.\n *\n * ```javascript\n * engine.block.setStrokeOverprint(block, true);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke overprint flag should be set.\n * @param overprint - If true, the stroke is marked as overprint in exported PDFs.\n */\n setStrokeOverprint(id: DesignBlockId, overprint: boolean): void;\n /**\n * Queries whether the stroke of a block is marked as overprint for PDF export.\n *\n * ```javascript\n * const overprint = engine.block.getStrokeOverprint(block);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke overprint flag should be queried.\n * @returns The stroke overprint flag.\n */\n getStrokeOverprint(id: DesignBlockId): boolean;\n /**\n * Sets the stroke color of a block using RGBA values.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setStrokeColor() instead.\n */\n setStrokeColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Sets the stroke color of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be set.\n * @param color - The color to set.\n */\n setStrokeColor(id: DesignBlockId, color: Color): void;\n /**\n * Gets the stroke color of a block as RGBA values.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be queried.\n * @returns The stroke color.\n * @deprecated Use getStrokeColor() instead.\n */\n getStrokeColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Gets the stroke color of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be queried.\n * @returns The stroke color.\n */\n getStrokeColor(id: DesignBlockId): Color;\n /**\n * Sets the stroke width of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke width should be set.\n * @param width - The stroke width to be set.\n */\n setStrokeWidth(id: DesignBlockId, width: number): void;\n /**\n * Gets the stroke width of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke width should be queried.\n * @returns The stroke's width.\n */\n getStrokeWidth(id: DesignBlockId): number;\n /**\n * Sets the stroke style of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke style should be set.\n * @param style - The stroke style to be set.\n */\n setStrokeStyle(id: DesignBlockId, style: StrokeStyle): void;\n /**\n * Gets the stroke style of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke style should be queried.\n * @returns The stroke's style.\n */\n getStrokeStyle(id: DesignBlockId): StrokeStyle;\n /**\n * Sets the stroke position of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke position should be set.\n * @param position - The stroke position to be set.\n */\n setStrokePosition(id: DesignBlockId, position: StrokePosition): void;\n /**\n * Gets the stroke position of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke position should be queried.\n * @returns The stroke position.\n */\n getStrokePosition(id: DesignBlockId): StrokePosition;\n /**\n * Sets the stroke corner geometry of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke corner geometry should be set.\n * @param cornerGeometry - The stroke corner geometry to be set.\n */\n setStrokeCornerGeometry(id: DesignBlockId, cornerGeometry: StrokeCornerGeometry): void;\n /**\n * Gets the stroke corner geometry of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke corner geometry should be queried.\n * @returns The stroke corner geometry.\n */\n getStrokeCornerGeometry(id: DesignBlockId): StrokeCornerGeometry;\n /**\n * Sets the stroke cap of a block. Writes both the start and end caps to the\n * same value.\n *\n * @category Block Strokes\n * @param id - The block whose stroke cap should be set.\n * @param cap - The stroke cap to be set.\n * @deprecated Use `setStrokeStartCap` and `setStrokeEndCap` to set each end\n * independently.\n */\n setStrokeCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the legacy single stroke cap of a block. Tracks the value last written\n * via `setStrokeCap` or `setStrokeStartCap`; ignores changes made via\n * `setStrokeEndCap`.\n *\n * @category Block Strokes\n * @param id - The block whose stroke cap should be queried.\n * @returns The stroke cap.\n * @deprecated Use `getStrokeStartCap` and `getStrokeEndCap` instead.\n */\n getStrokeCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the start of an open stroked path. Use this with\n * `setStrokeEndCap` to set distinct caps for each end of a stroke (for\n * example a flat start with an arrowhead end). `setStrokeCap` continues to\n * set both ends at once and is preserved for backwards compatibility.\n *\n * @category Block Strokes\n * @param id - The block whose stroke start cap should be set.\n * @param cap - The cap geometry to use at the path start.\n */\n setStrokeStartCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the start of an open stroked path.\n *\n * @category Block Strokes\n * @param id - The block whose stroke start cap should be queried.\n * @returns The start cap.\n */\n getStrokeStartCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the end of an open stroked path. Use this with\n * `setStrokeStartCap` to set distinct caps for each end of a stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke end cap should be set.\n * @param cap - The cap geometry to use at the path end.\n */\n setStrokeEndCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the end of an open stroked path.\n *\n * @category Block Strokes\n * @param id - The block whose stroke end cap should be queried.\n * @returns The end cap.\n */\n getStrokeEndCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the leading edge of each dash piece (excluding the\n * line's actual start). Only takes effect when a dash pattern is active.\n * Distinct from `setStrokeStartCap`, which only applies to the start of the\n * open path itself.\n *\n * @category Block Strokes\n * @param id - The block whose dash start cap should be set.\n * @param cap - The cap geometry to use at the leading edge of each dash piece.\n */\n setStrokeDashStartCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the leading edge of each dash piece.\n *\n * @category Block Strokes\n * @param id - The block whose dash start cap should be queried.\n * @returns The dash start cap.\n */\n getStrokeDashStartCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the trailing edge of each dash piece (excluding the\n * line's actual end). Only takes effect when a dash pattern is active. Distinct\n * from `setStrokeEndCap`, which only applies to the end of the open path itself.\n *\n * @category Block Strokes\n * @param id - The block whose dash end cap should be set.\n * @param cap - The cap geometry to use at the trailing edge of each dash piece.\n */\n setStrokeDashEndCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the trailing edge of each dash piece.\n *\n * @category Block Strokes\n * @param id - The block whose dash end cap should be queried.\n * @returns The dash end cap.\n */\n getStrokeDashEndCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets a custom dash pattern for the block's stroke. Semantics match SVG's\n * `stroke-dasharray`: alternating on/off lengths in design-unit space. When the\n * pattern is non-empty it overrides the preset implied by `StrokeStyle`. Pass an\n * empty array to fall back to the preset.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash pattern should be set.\n * @param dashArray - Alternating on/off lengths. Odd-length arrays are doubled to\n * an even length, matching SVG behaviour.\n */\n setStrokeDashArray(id: DesignBlockId, dashArray: number[]): void;\n /**\n * Gets the custom dash pattern of the block's stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash pattern should be queried.\n * @returns The dash pattern, or an empty array if no custom pattern is set.\n */\n getStrokeDashArray(id: DesignBlockId): number[];\n /**\n * Sets the dash offset of the block's stroke. Semantics match SVG's\n * `stroke-dashoffset`. Ignored when the custom dash pattern is empty.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash offset should be set.\n * @param dashOffset - The dash offset in design-unit space.\n */\n setStrokeDashOffset(id: DesignBlockId, dashOffset: number): void;\n /**\n * Gets the dash offset of the block's stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash offset should be queried.\n * @returns The dash offset.\n */\n getStrokeDashOffset(id: DesignBlockId): number;\n /**\n * Checks if a block has a drop shadow property.\n *\n * @category Block Drop Shadow\n * @param id - The block to query.\n * @returns True if the block has a drop shadow property.\n * @deprecated Use supportsDropShadow() instead.\n */\n hasDropShadow(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a drop shadow.\n *\n * @category Block Drop Shadow\n * @param id - The block to query.\n * @returns True if the block supports a drop shadow.\n */\n supportsDropShadow(id: DesignBlockId): boolean;\n /**\n * Enables or disables the drop shadow of a block.\n *\n * ```javascript\n * engine.block.setDropShadowEnabled(block, true);\n * ```\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow should be enabled or disabled.\n * @param enabled - If true, the drop shadow will be enabled.\n */\n setDropShadowEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the drop shadow of a block is enabled.\n *\n * ```javascript\n * const dropShadowIsEnabled = engine.block.isDropShadowEnabled(block);\n * ```\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow state should be queried.\n * @returns True if the block's drop shadow is enabled.\n */\n isDropShadowEnabled(id: DesignBlockId): boolean;\n /**\n * Sets the drop shadow color of a block using RGBA values.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setDropShadowColor() instead.\n */\n setDropShadowColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Sets the drop shadow color of a block.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be set.\n * @param color - The color to set.\n */\n setDropShadowColor(id: DesignBlockId, color: Color): void;\n /**\n * Gets the drop shadow color of a block as RGBA values.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be queried.\n * @returns The drop shadow color.\n * @deprecated Use getDropShadowColor instead.\n */\n getDropShadowColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Gets the drop shadow color of a block.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be queried.\n * @returns The drop shadow color.\n */\n getDropShadowColor(id: DesignBlockId): Color;\n /**\n * Sets the drop shadow's horizontal offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's X offset should be set.\n * @param offsetX - The X offset to be set.\n */\n setDropShadowOffsetX(id: DesignBlockId, offsetX: number): void;\n /**\n * Gets the drop shadow's horizontal offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's X offset should be queried.\n * @returns The offset.\n */\n getDropShadowOffsetX(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's vertical offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's Y offset should be set.\n * @param offsetY - The Y offset to be set.\n */\n setDropShadowOffsetY(id: DesignBlockId, offsetY: number): void;\n /**\n * Gets the drop shadow's vertical offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's Y offset should be queried.\n * @returns The offset.\n */\n getDropShadowOffsetY(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's horizontal blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be set.\n * @param blurRadiusX - The blur radius to be set.\n */\n setDropShadowBlurRadiusX(id: DesignBlockId, blurRadiusX: number): void;\n /**\n * Gets the drop shadow's horizontal blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be queried.\n * @returns The blur radius.\n */\n getDropShadowBlurRadiusX(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's vertical blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be set.\n * @param blurRadiusY - The blur radius to be set.\n */\n setDropShadowBlurRadiusY(id: DesignBlockId, blurRadiusY: number): void;\n /**\n * Gets the drop shadow's vertical blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be queried.\n * @returns The blur radius.\n */\n getDropShadowBlurRadiusY(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's clipping behavior.\n *\n * This only applies to shapes.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's clip should be set.\n * @param clip - The drop shadow's clip to be set.\n */\n setDropShadowClip(id: DesignBlockId, clip: boolean): void;\n /**\n * Gets the drop shadow's clipping behavior.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's clipping should be queried.\n * @returns The drop shadow's clipping state.\n */\n getDropShadowClip(id: DesignBlockId): boolean;\n /**\n * Creates a cutout block from the contours of other blocks.\n *\n * The path is derived from either existing vector paths or by vectorizing the block's appearance.\n *\n * @category Block Cutout\n * @param ids - The blocks whose shape will serve as the basis for the cutout's path.\n * @param vectorizeDistanceThreshold - Max deviation from the original contour during vectorization.\n * @param simplifyDistanceThreshold - Max deviation for path simplification. 0 disables simplification.\n * @param useExistingShapeInformation - If true, use existing vector paths.\n * @returns The newly created block or an error.\n */\n createCutoutFromBlocks(ids: DesignBlockId[], vectorizeDistanceThreshold?: number, simplifyDistanceThreshold?: number, useExistingShapeInformation?: boolean): DesignBlockId;\n /**\n * Creates a cutout block from an SVG path string.\n *\n * @category Block Cutout\n * @param path - An SVG string describing a path.\n * @returns The newly created block or an error.\n */\n createCutoutFromPath(path: string): DesignBlockId;\n /**\n * Creates a new cutout block by performing a boolean operation on existing cutout blocks.\n *\n * @category Block Cutout\n * @param ids - The cutout blocks with which to perform to the operation.\n * @param op - The boolean operation to perform.\n * @returns The newly created block or an error.\n */\n createCutoutFromOperation(ids: DesignBlockId[], op: CutoutOperation): DesignBlockId;\n /**\n * Replaces a range of text in a text block.\n *\n * ```javascript\n * engine.block.replaceText(text, 'Hello World');\n * engine.block.replaceText(text, 'Alex', 6, 11);\n * ```\n *\n * @category Block Text\n * @param id - The text block into which to insert the given text.\n * @param text - The text which should replace the selected range in the block.\n * @param from - The start index of the UTF-16 range to replace. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to replace. Defaults to the end of the current selection or text.\n */\n replaceText(id: DesignBlockId, text: string, from?: number, to?: number): void;\n /**\n * Removes a range of text from a text block.\n *\n * ```javascript\n * engine.block.removeText(text, 0, 6);\n * ```\n * @category Block Text\n * @param id - The text block from which the selected text should be removed.\n * @param from - The start index of the UTF-16 range to remove. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to remove. Defaults to the end of the current selection or text.\n */\n removeText(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Sets the color for a range of text.\n *\n * ```javascript\n * engine.block.setTextColor(text, { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, 1, 4);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose color should be changed.\n * @param color - The new color of the selected text range.\n * @param from - The start index of the UTF-16 range to change. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to change. Defaults to the end of the current selection or text.\n */\n setTextColor(id: DesignBlockId, color: Color, from?: number, to?: number): void;\n /**\n * Gets the unique colors within a range of text.\n *\n * ```javascript\n * const colorsInRange = engine.block.getTextColors(text, 2, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose colors should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of colors.\n */\n getTextColors(id: DesignBlockId, from?: number, to?: number): Array<Color>;\n /**\n * Sets the font weight for a range of text.\n *\n * ```javascript\n * engine.block.setTextFontWeight(text, 'bold', 0, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose weight should be changed.\n * @param fontWeight - The new weight of the selected text range.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextFontWeight(id: DesignBlockId, fontWeight: FontWeight, from?: number, to?: number): void;\n /**\n * Gets the unique font weights within a range of text.\n *\n * ```javascript\n * const fontWeights = engine.block.getTextFontWeights(text, 0, 6);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font weights should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font weights.\n */\n getTextFontWeights(id: DesignBlockId, from?: number, to?: number): FontWeight[];\n /**\n * Sets the font size for a range of text.\n *\n * ```javascript\n * // With numeric fontSize (in points)\n * engine.block.setTextFontSize(text, 12, 0, 5);\n *\n * // With font size and options object\n * engine.block.setTextFontSize(text, 16, { unit: 'Pixel' });\n * engine.block.setTextFontSize(text, 24, { unit: 'Point', from: 0, to: 10 });\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font size should be changed.\n * @param fontSize - The new font size value.\n * @param options - An options object with unit, from, and to properties.\n */\n setTextFontSize(id: DesignBlockId, fontSize: number, options?: TextFontSizeOptions): void;\n /**\n * Sets the font size for a range of text.\n *\n * @category Block Text\n * @param id - The text block whose font size should be changed.\n * @param fontSize - The new font size in points.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @deprecated Use the new signature with options object instead.\n * @example\n * ```typescript\n * // Before migration\n * engine.block.setTextFontSize(text, 18, 0, 5);\n * // After migration\n * engine.block.setTextFontSize(text, 18, { from: 0, to: 5 });\n * ```\n */\n setTextFontSize(id: DesignBlockId, fontSize: number, from?: number, to?: number): void;\n /**\n * Gets the unique font sizes within a range of text.\n *\n * ```javascript\n * // Get all font sizes\n * const fontSizes = engine.block.getTextFontSizes(text);\n *\n * // Get font sizes for a range\n * const fontSizes = engine.block.getTextFontSizes(text, 0, 10);\n *\n * // With options object\n * const sizesInPx = engine.block.getTextFontSizes(text, { unit: 'Pixel' });\n * const sizesInRange = engine.block.getTextFontSizes(text, { unit: 'Millimeter', from: 5, to: 15 });\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font sizes should be returned.\n * @param options - An options object with unit, from, and to properties.\n * @returns The ordered unique list of font sizes.\n */\n getTextFontSizes(id: DesignBlockId, options?: TextFontSizeOptions): number[];\n /**\n * Gets the unique font sizes within a range of text.\n *\n * @category Block Text\n * @param id - The text block whose font sizes should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font sizes in points.\n * @deprecated Use the new signature with options object instead.\n * @example\n * ```typescript\n * // Before migration\n * const fontSizes = engine.block.getTextFontSizes(text, 0, 10);\n * // After migration\n * const fontSizes = engine.block.getTextFontSizes(text, { from: 0, to: 10 });\n * ```\n */\n getTextFontSizes(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Sets the font style for a range of text.\n *\n * ```javascript\n * engine.block.setTextFontStyle(text, 'italic', 0, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose style should be changed.\n * @param fontStyle - The new style of the selected text range.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextFontStyle(id: DesignBlockId, fontStyle: FontStyle, from?: number, to?: number): void;\n /**\n * Gets the unique font styles within a range of text.\n *\n * ```javascript\n * const fontStyles = engine.block.getTextFontStyles(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font styles should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font styles.\n */\n getTextFontStyles(id: DesignBlockId, from?: number, to?: number): FontStyle[];\n /**\n * Gets the unique text cases within a range of text.\n *\n * ```javascript\n * const textCases = engine.block.getTextCases(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text cases should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered list of text cases.\n */\n getTextCases(id: DesignBlockId, from?: number, to?: number): TextCase[];\n /**\n * Sets the text case for a range of text.\n *\n * ```javascript\n * engine.block.setTextCase(text, 'Titlecase');\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text case should be changed.\n * @param textCase - The new text case value.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextCase(id: DesignBlockId, textCase: TextCase, from?: number, to?: number): void;\n /**\n * Gets the unique text decoration configurations within a range of text.\n *\n * Each element of the returned array is a decoration configuration representing\n * a unique combination of lines, style, color, and thickness found in the range.\n *\n * ```javascript\n * const decorations = engine.block.getTextDecorations(text);\n * // e.g., [{ lines: ['None'] }, { lines: ['Underline'], style: 'Dashed' }]\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text decorations should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered list of unique decoration configurations.\n */\n getTextDecorations(id: DesignBlockId, from?: number, to?: number): TextDecorationConfig[];\n /**\n * Sets the text decoration for a range of text.\n *\n * The config specifies which decoration lines, style, underline color, thickness, and offset to apply.\n * Use `{ lines: ['None'] }` to remove all decorations.\n *\n * ```javascript\n * engine.block.setTextDecoration(text, { lines: ['Underline'] });\n * engine.block.setTextDecoration(text, { lines: ['Underline', 'Strikethrough'], style: 'Dashed' });\n * engine.block.setTextDecoration(text, { lines: ['Overline'], style: 'Wavy', underlineThickness: 2.0 });\n * engine.block.setTextDecoration(text, { lines: ['None'] }); // Remove decorations\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text decoration should be changed.\n * @param config - The decoration configuration to apply.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextDecoration(id: DesignBlockId, config: TextDecorationConfig, from?: number, to?: number): void;\n /**\n * Sets kerning for a grapheme range.\n *\n * Applies an additional offset in em units on top of the font's built-in kern.\n * `1.0` equals the run's font size, so the offset scales proportionally with text size.\n *\n * ```javascript\n * engine.block.setTextKerning(text, 0.1); // add 10% of font size as extra spacing\n * engine.block.setTextKerning(text, -0.05, 0, 5); // tighten first 5 graphemes\n * engine.block.setTextKerning(text, 0); // reset to no extra offset\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param kerning - Additional kerning in em units (1.0 = one full em). Use 0 for no extra offset.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextKerning(id: DesignBlockId, kerning: number, from?: number, to?: number): void;\n /**\n * Returns the unique kerning values across the grapheme range.\n *\n * ```javascript\n * const kernings = engine.block.getTextKernings(text); // e.g. [0] or [0.1, 0]\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n getTextKernings(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Toggles the underline decoration for a text range.\n *\n * If any part of the range does not have underline, the entire range gets underline.\n * If the entire range already has underline, it is removed.\n * Other decoration lines (strikethrough, overline) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationUnderline(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationUnderline(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the strikethrough decoration for a text range.\n *\n * If any part of the range does not have strikethrough, the entire range gets strikethrough.\n * If the entire range already has strikethrough, it is removed.\n * Other decoration lines (underline, overline) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationStrikethrough(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationStrikethrough(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the overline decoration for a text range.\n *\n * If any part of the range does not have overline, the entire range gets overline.\n * If the entire range already has overline, it is removed.\n * Other decoration lines (underline, strikethrough) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationOverline(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationOverline(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Gets the paragraph-level horizontal alignment override for a specific paragraph,\n * or the block-level alignment.\n *\n * ```javascript\n * const alignment = engine.block.getTextHorizontalAlignment(text, 0);\n * const blockAlignment = engine.block.getTextHorizontalAlignment(text); // paragraphIndex defaults to -1\n * // e.g. 'Left' | 'Center' | 'Right' | 'Auto' | undefined\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param paragraphIndex - The 0-based index of the paragraph to query.\n * Negative values return the block-level `text/horizontalAlignment` setting.\n * @returns The paragraph override, `undefined` if no override is set,\n * or the block-level alignment when `paragraphIndex < 0`.\n */\n getTextHorizontalAlignment(id: DesignBlockId, paragraphIndex?: number): TextHorizontalAlignment | undefined;\n /**\n * Sets the paragraph-level horizontal alignment override for one or all paragraphs.\n *\n * ```javascript\n * engine.block.setTextHorizontalAlignment(text, 'Center', 0);\n * engine.block.setTextHorizontalAlignment(text, undefined, 0); // clear override\n * engine.block.setTextHorizontalAlignment(text, 'Right'); // apply to all\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param alignment - The alignment to apply, or `undefined` to clear the paragraph override.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * Negative values clear all paragraph-level alignment overrides and, when `alignment` is provided,\n * apply that alignment to the whole text block.\n */\n setTextHorizontalAlignment(id: DesignBlockId, alignment: TextHorizontalAlignment | undefined, paragraphIndex?: number): void;\n /**\n * Gets the list style for a specific paragraph of a text block.\n *\n * ```javascript\n * const listStyle = engine.block.getTextListStyle(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list style should be returned.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The list style of the paragraph.\n */\n getTextListStyle(id: DesignBlockId, paragraphIndex: number): ListStyle;\n /**\n * Sets the list style for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextListStyle(text, 'Unordered');\n * engine.block.setTextListStyle(text, 'Ordered', 0, 2);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list style should be changed.\n * @param listStyle - The list style to apply.\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n * @param listLevel - Optional list nesting level to set atomically with the list style (0 = outermost).\n * When omitted the existing list level of each paragraph is preserved.\n * Has no visual effect when listStyle is 'None'.\n */\n setTextListStyle(id: DesignBlockId, listStyle: ListStyle, paragraphIndex?: number, listLevel?: number): void;\n /**\n * Gets the list nesting level for a specific paragraph of a text block.\n *\n * ```javascript\n * const listLevel = engine.block.getTextListLevel(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list level should be returned.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The list nesting level of the paragraph.\n */\n getTextListLevel(id: DesignBlockId, paragraphIndex: number): number;\n /**\n * Sets the list nesting level for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextListLevel(text, 1);\n * engine.block.setTextListLevel(text, 2, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list level should be changed.\n * @param listLevel - The list nesting level (0 = outermost).\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n */\n setTextListLevel(id: DesignBlockId, listLevel: number, paragraphIndex?: number): void;\n /**\n * Returns the 0-based paragraph indices that overlap the given UTF-16 range.\n *\n * The range is half-open (exclusive): `from` is inclusive, `to` is exclusive (one past the last\n * code unit of interest). When `from === to` the range is a cursor position and the paragraph\n * containing `from` is returned. This convention matches `getTextCursorRange`, so the values\n * it returns can be passed directly without adjustment.\n *\n * Negative values for either parameter cause all paragraph indices to be returned.\n *\n * ```javascript\n * const indices = engine.block.getTextParagraphIndices(text);\n * const { from, to } = engine.block.getTextCursorRange();\n * const indices = engine.block.getTextParagraphIndices(text, from, to);\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - The inclusive start UTF-16 index. Negative values reference the entire text.\n * @param to - The exclusive end UTF-16 index. Negative values reference the entire text.\n * @returns The paragraph indices overlapping the range.\n */\n getTextParagraphIndices(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Sets the line height multiplier for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextLineHeight(text, 1.5);\n * engine.block.setTextLineHeight(text, 1.5, 0);\n * engine.block.setTextLineHeight(text, null); // reset all paragraphs to block default\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param lineHeight - The line height multiplier, or `null` to reset to the block-level default.\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n */\n setTextLineHeight(id: DesignBlockId, lineHeight: number | null, paragraphIndex?: number): void;\n /**\n * Returns the line height multiplier for a specific paragraph of a text block.\n *\n * Returns the per-paragraph override if one is set, otherwise returns the block-level `lineHeight`.\n *\n * ```javascript\n * const lineHeight = engine.block.getTextLineHeight(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The line height multiplier for the paragraph.\n */\n getTextLineHeight(id: DesignBlockId, paragraphIndex: number): number;\n /**\n * Checks if the bold font weight can be toggled for a range of text.\n *\n * Returns true if any part of the range is not bold and the bold font is available.\n *\n * ```javascript\n * const canToggleBold = engine.block.canToggleBoldFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to check.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns Whether the font weight can be toggled.\n */\n canToggleBoldFont(id: DesignBlockId, from?: number, to?: number): boolean;\n /**\n * Checks if the italic font style can be toggled for a range of text.\n *\n * Returns true if any part of the range is not italic and the italic font is available.\n *\n * ```javascript\n * const canToggleItalic = engine.block.canToggleItalicFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to check.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns Whether the font style can be toggled.\n */\n canToggleItalicFont(id: DesignBlockId, from?: number, to?: number): boolean;\n /**\n * Toggles the font weight of a text range between bold and normal.\n *\n * If any part of the range is not bold, the entire range becomes bold. If the entire range is already bold, it becomes normal.\n *\n *\n * ```javascript\n * engine.block.toggleBoldFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleBoldFont(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the font style of a text range between italic and normal.\n *\n * If any part of the range is not italic, the entire range becomes italic. If the entire range is already italic, it becomes normal.\n *\n *\n * ```javascript\n * engine.block.toggleItalicFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleItalicFont(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Sets the font and typeface for an entire text block.\n *\n * Existing formatting is reset.\n *\n * ```javascript\n * engine.block.setFont(text, font.uri, typeface);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font should be changed.\n * @param fontFileUri - The URI of the new font file.\n * @param typeface - The typeface of the new font.\n */\n setFont(id: DesignBlockId, fontFileUri: string, typeface: Typeface): void;\n /**\n * Sets the typeface for a range of text.\n *\n * The current formatting is retained as much as possible.\n *\n *\n * ```javascript\n * engine.block.setTypeface(text, typeface, 2, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font should be changed.\n * @param typeface - The new typeface.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTypeface(id: DesignBlockId, typeface: Typeface, from?: number, to?: number): void;\n /**\n * Gets the base typeface of a text block.\n *\n * This does not return the typefaces of individual text runs.\n *\n * ```javascript\n * const defaultTypeface = engine.block.getTypeface(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose typeface should be queried.\n * @returns the typeface property of the text block.\n */\n getTypeface(id: DesignBlockId): Typeface;\n /**\n * Gets the unique typefaces within a range of text.\n *\n * ```javascript\n * const currentTypefaces = engine.block.getTypefaces(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose typefaces should be queried.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The unique typefaces in the range.\n */\n getTypefaces(id: DesignBlockId, from?: number, to?: number): Typeface[];\n /**\n * Gets the current text cursor or selection range.\n *\n * Returns the UTF-16 indices of the selected range of the text block that is currently being\n * edited. The range is half-open (exclusive): `from` is the index of the first selected code\n * unit, `to` is one past the last selected code unit. When `from === to` the cursor is\n * positioned between characters with no text selected.\n *\n * ```javascript\n * const selectedRange = engine.block.getTextCursorRange();\n * ```\n *\n * @category Block Text\n * @returns The selected UTF-16 range or `{ from: -1, to: -1 }` if no text block is being edited.\n */\n getTextCursorRange(): Range_2;\n /**\n * Sets the text cursor range (selection) within the text block that is currently being edited.\n *\n * @category Block Text\n * @param range - The UTF-16 range to set as the selection. If `from` equals `to`, the cursor is positioned at that index. If `from` and `to` are set to -1, the whole text is selected.\n * @throws Error if no text block is currently being edited or if the range is invalid.\n */\n setTextCursorRange(range: Range_2): void;\n /**\n * Gets the number of visible lines in a text block.\n *\n * ```javascript\n * const lineCount = engine.block.getTextVisibleLineCount(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose line count should be returned.\n * @returns The number of lines in the text block.\n */\n getTextVisibleLineCount(id: DesignBlockId): number;\n /**\n * Gets the global bounding box of a visible line of text.\n *\n * The values are in the scene's global coordinate space.\n *\n * ```javascript\n * const lineBoundingBox = engine.block.getTextVisibleLineGlobalBoundingBoxXYWH(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose line bounding box should be returned.\n * @param lineIndex - The index of the line whose bounding box should be returned.\n * @returns The bounding box of the line.\n */\n getTextVisibleLineGlobalBoundingBoxXYWH(id: DesignBlockId, lineIndex: number): XYWH;\n /**\n * Gets the text content of a visible line.\n *\n * @category Block Text\n * @param id - The text block whose line content should be returned.\n * @param lineIndex - The index of the line whose content should be returned.\n * @returns The text content of the line.\n */\n getTextVisibleLineContent(id: DesignBlockId, lineIndex: number): string;\n /**\n * Returns the tight ink-paint bounding box for each grapheme in the range.\n * One entry per grapheme in [from, to). Non-printable graphemes get a zero-rect.\n * Coordinates are in global scene space.\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - Start grapheme index (-1 = start of cursor selection or 0).\n * @param to - End grapheme index (-1 = end of cursor selection or text length).\n * @returns Array of CharacterInkBox, one per grapheme in range, in text order.\n */\n getTextCharacterInkBoxes(id: DesignBlockId, from?: number, to?: number): CharacterInkBox[];\n /**\n * Gets the effective horizontal alignment of a text block.\n * If the alignment is set to Auto, this returns the resolved alignment (Left or Right)\n * based on the text direction of the first logical run. This never returns 'Auto'.\n *\n * @category Block Text\n * @param id - The text block whose effective alignment should be returned.\n * @returns The effective alignment ('Left', 'Right', or 'Center').\n */\n getTextEffectiveHorizontalAlignment(id: DesignBlockId): 'Left' | 'Right' | 'Center';\n /**\n * Checks if a block has fill properties.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has fill properties.\n * @deprecated Use supportsFill instead.\n */\n hasFill(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a fill.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block supports a fill.\n */\n supportsFill(id: DesignBlockId): boolean;\n /**\n * Checks if the fill of a block is enabled.\n *\n * ```javascript\n * engine.block.isFillEnabled(block);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill state should be queried.\n * @returns The fill state.\n */\n isFillEnabled(id: DesignBlockId): boolean;\n /**\n * Enables or disables the fill of a block.\n *\n * ```javascript\n * engine.block.setFillEnabled(block, false);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill should be enabled or disabled.\n * @param enabled - If true, the fill will be enabled.\n */\n setFillEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Queries whether the fill of a block is marked as overprint for PDF export.\n *\n * ```javascript\n * const overprint = engine.block.getFillOverprint(block);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill overprint flag should be queried.\n * @returns The fill overprint flag.\n */\n getFillOverprint(id: DesignBlockId): boolean;\n /**\n * Marks the fill of a block as overprint for PDF export.\n *\n * The flag is only honored by the PDF writer when the fill uses a spot color\n * (Separation/DeviceN). For process-color fills it is a silent no-op. On-screen\n * rendering ignores the flag.\n *\n * ```javascript\n * engine.block.setFillOverprint(block, true);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill overprint flag should be set.\n * @param overprint - If true, the fill is marked as overprint in exported PDFs.\n */\n setFillOverprint(id: DesignBlockId, overprint: boolean): void;\n /**\n * Gets the fill block attached to a given block.\n *\n * @category Block Fills\n * @param id - The block whose fill block should be returned.\n * @returns The block that currently defines the given block's fill.\n */\n getFill(id: DesignBlockId): DesignBlockId;\n /**\n * Sets the fill block for a given block.\n *\n * The previous fill block is not destroyed automatically.\n *\n * @category Block Fills\n * @param id - The block whose fill should be changed.\n * @param fill - The new fill block.\n */\n setFill(id: DesignBlockId, fill: DesignBlockId): void;\n /**\n * Sets the solid fill color of a block.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1. Defaults to 1.\n */\n setFillSolidColor(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the solid fill color of a block as RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be queried.\n * @returns The fill color.\n */\n getFillSolidColor(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the placeholder function for a block.\n *\n * When set to `true`, the given block becomes selectable by users and its placeholder capabilities are enabled in Adopter mode.\n *\n * ```javascript\n * engine.block.setPlaceholderEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder function should be enabled or disabled.\n * @param enabled - Whether the function should be enabled or disabled.\n */\n setPlaceholderEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder function for a block is enabled and can be selected by users in Adopter mode.\n *\n * ```javascript\n * const placeholderIsEnabled = engine.block.isPlaceholderEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder function state should be queried.\n * @returns The enabled state of the placeholder function.\n */\n isPlaceholderEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder behavior.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder behavior.\n * @deprecated Use supportsPlaceholderBehavior instead.\n */\n hasPlaceholderBehavior(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder behavior.\n *\n * ```javascript\n * const placeholderBehaviorSupported = engine.block.supportsPlaceholderBehavior(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder behavior.\n */\n supportsPlaceholderBehavior(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder behavior for a block.\n *\n * When its fill block is set to `true`, an image block will act as a placeholder, showing a control overlay and a replacement button.\n *\n * ```javascript\n * engine.block.setPlaceholderBehaviorEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder behavior should be enabled or disabled.\n * @param enabled - Whether the placeholder behavior should be enabled or disabled.\n */\n setPlaceholderBehaviorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder behavior for a block is enabled.\n *\n * ```javascript\n * engine.block.setPlaceholderBehaviorEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder behavior state should be queried.\n * @returns The enabled state of the placeholder behavior.\n */\n isPlaceholderBehaviorEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder controls.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder controls.\n * @deprecated Use supportsPlaceholderControls instead.\n */\n hasPlaceholderControls(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder controls, e.g. a control overlay and a replacement button.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder controls.\n */\n supportsPlaceholderControls(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder overlay pattern.\n *\n * ```javascript\n * engine.block.setPlaceholderControlsOverlayEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder overlay should be enabled or disabled.\n * @param enabled - Whether the placeholder overlay should be shown or not.\n */\n setPlaceholderControlsOverlayEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder overlay pattern is enabled.\n *\n * ```javascript\n * const overlayEnabled = engine.block.isPlaceholderControlsOverlayEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder overlay visibility state should be queried.\n * @returns The visibility state of the block's placeholder overlay pattern.\n */\n isPlaceholderControlsOverlayEnabled(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder button.\n *\n * ```javascript\n * engine.block.setPlaceholderControlsButtonEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder button should be shown or not.\n * @param enabled - Whether the placeholder button should be shown or not.\n */\n setPlaceholderControlsButtonEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder button is enabled.\n *\n * ```javascript\n * const buttonEnabled = engine.block.isPlaceholderControlsButtonEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder button visibility state should be queried.\n * @returns The visibility state of the block's placeholder button.\n */\n isPlaceholderControlsButtonEnabled(id: DesignBlockId): boolean;\n /**\n * Sets a metadata value for a given key on a block.\n *\n * If the key does not exist, it will be added.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @param value - The value to set.\n */\n setMetadata(id: DesignBlockId, key: string, value: string): void;\n /**\n * Gets a metadata value for a given key from a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @returns The value associated with the key.\n */\n getMetadata(id: DesignBlockId, key: string): string;\n /**\n * Checks if a block has metadata for a given key.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @returns Whether the key exists.\n */\n hasMetadata(id: DesignBlockId, key: string): boolean;\n /**\n * Finds all metadata keys on a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @returns A list of all metadata keys on this block.\n */\n findAllMetadata(id: DesignBlockId): string[];\n /**\n * Removes metadata for a given key from a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n */\n removeMetadata(id: DesignBlockId, key: string): void;\n /**\n * Enables or disables a scope for a block.\n *\n * ```javascript\n * // Allow the user to move the image block.\n * engine.block.setScopeEnabled(image, 'layer/move', true);\n * ```\n *\n * @category Block Scopes\n * @param id - The block whose scope should be enabled or disabled.\n * @param key - The scope to enable or disable.\n * @param enabled - Whether the scope should be enabled or disabled.\n */\n setScopeEnabled(id: DesignBlockId, key: Scope, enabled: boolean): void;\n /**\n * Checks if a scope is enabled for a block.\n *\n * ```javascript\n * engine.block.isScopeEnabled(image, 'layer/move');\n * ```\n *\n * @category Block Scopes\n * @param id - The block whose scope state should be queried.\n * @param key - The scope to query.\n * @returns The enabled state of the scope for the given block.\n */\n isScopeEnabled(id: DesignBlockId, key: Scope): boolean;\n /**\n * Checks if an operation is allowed by a block's scopes.\n *\n * ```javascript\n * // This will return true when the global scope is set to 'Defer'.\n * engine.block.isAllowedByScope(image, 'layer/move');\n * ```\n *\n * @category Block Scopes\n * @param id - The block to check.\n * @param key - The scope to check.\n * @returns Whether the scope is allowed for the given block.\n */\n isAllowedByScope(id: DesignBlockId, key: Scope): boolean;\n /**\n * Checks if a block has a duration property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true if the block has a duration property.\n * @deprecated Use supportsDuration instead.\n */\n hasDuration(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a duration property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true if the block supports a duration property.\n */\n supportsDuration(id: DesignBlockId): boolean;\n /**\n * Sets the playback duration of a block.\n *\n * The duration defines how long the block is active in the scene during playback.\n *\n * @category Block Video\n * @param id - The block whose duration should be changed.\n * @param duration - The new duration in seconds.\n */\n setDuration(id: DesignBlockId, duration: number): void;\n /**\n * Gets the playback duration of a block.\n *\n * @category Block Video\n * @param id - The block whose duration should be returned.\n * @returns The block's duration in seconds.\n */\n getDuration(id: DesignBlockId): number;\n /**\n * Sets a block as the page's duration source.\n *\n * This causes the page's total duration to be automatically determined by this block.\n *\n * @category Block Video\n * @param page - The page block for which it should be enabled.\n * @param id - The block that should become the duration source.\n */\n setPageDurationSource(page: DesignBlockId, id: DesignBlockId): void;\n /**\n * Checks if a block is the duration source for its page.\n *\n * @category Block Video\n * @param id - The block whose duration source property should be queried.\n * @returns true if the block is a duration source for a page.\n */\n isPageDurationSource(id: DesignBlockId): boolean;\n /**\n * Checks if a block can be set as the page's duration source.\n *\n * @category Block Video\n * @param page - The page to check against.\n * @param id - The block to query.\n * @returns true, if the block can be marked as the page's duration source.\n */\n supportsPageDurationSource(page: DesignBlockId, id: DesignBlockId): boolean;\n /**\n * Removes a block as the page's duration source.\n *\n * If a scene or page is given, it is deactivated for all blocks within it.\n *\n * @category Block Video\n * @param id - The block whose duration source property should be removed.\n */\n removePageDurationSource(id: DesignBlockId): void;\n /**\n * Checks if a block has a time offset property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block has a time offset property.\n * @deprecated Use supportsTimeOffset instead.\n */\n hasTimeOffset(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a time offset.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block supports a time offset.\n */\n supportsTimeOffset(id: DesignBlockId): boolean;\n /**\n * Sets the time offset of a block relative to its parent.\n *\n * The time offset controls when the block first becomes active in the timeline.\n *\n * @category Block Video\n * @param id - The block whose time offset should be changed.\n * @param offset - The new time offset in seconds.\n */\n setTimeOffset(id: DesignBlockId, offset: number): void;\n /**\n * Gets the time offset of a block relative to its parent.\n *\n * @category Block Video\n * @param id - The block whose time offset should be queried.\n * @returns The time offset of the block in seconds.\n */\n getTimeOffset(id: DesignBlockId): number;\n /**\n * Checks if a block has trim properties.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block has trim properties.\n * @deprecated Use supportsTrim instead.\n */\n hasTrim(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports trim properties.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block supports trim properties.\n */\n supportsTrim(id: DesignBlockId): boolean;\n /**\n * Sets the trim offset of a block's media content.\n *\n * This sets the time within the media clip where playback should begin.\n *\n * @category Block Video\n * @param id - The block whose trim should be updated.\n * @param offset - The new trim offset, measured in timeline seconds (scaled by playback rate).\n */\n setTrimOffset(id: DesignBlockId, offset: number): void;\n /**\n * Gets the trim offset of a block's media content.\n *\n * @category Block Video\n * @param id - The block whose trim offset should be queried.\n * @returns the trim offset in seconds.\n */\n getTrimOffset(id: DesignBlockId): number;\n /**\n * Sets the trim length of a block's media content.\n *\n * This is the duration of the media clip that should be used for playback.\n *\n * @category Block Video\n * @param id - The object whose trim length should be updated.\n * @param length - The new trim length in seconds.\n */\n setTrimLength(id: DesignBlockId, length: number): void;\n /**\n * Gets the trim length of a block's media content.\n *\n * @category Block Video\n * @param id - The object whose trim length should be queried.\n * @returns The trim length of the object in seconds.\n */\n getTrimLength(id: DesignBlockId): number;\n /**\n * Splits a block at the specified time.\n *\n * The original block will be trimmed to end at the split time, and the returned duplicate\n * will start at the split time and continue to the original end time.\n *\n * ```javascript\n * const duplicate = engine.block.split(video, 10.0);\n * ```\n *\n * @category Block\n * @param id - The block to split.\n * @param atTime - The time (in seconds) relative to the block's time offset where the split should occur.\n * @param options - The options for configuring the split operation.\n * @returns The newly created second half of the split block.\n */\n split(id: DesignBlockId, atTime: number, options?: SplitOptions): DesignBlockId;\n /**\n * Gets the total duration of a scene in video mode.\n *\n * @category Block Video\n * @param scene - The scene whose duration is being queried.\n * @returns the total scene duration.\n * @deprecated Use `getDuration` and pass a page block.\n */\n getTotalSceneDuration(scene: DesignBlockId): number;\n /**\n * Sets whether a block should play its content during active playback.\n *\n * @category Block Video\n * @param id - The block that should be updated.\n * @param enabled - Whether the block should be playing its contents.\n */\n setPlaying(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if a block is playing its content.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block is playing during playback.\n */\n isPlaying(id: DesignBlockId): boolean;\n /**\n * Checks if a block has a playback time property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block has a playback time property.\n * @deprecated Use supportsPlaybackTime instead.\n */\n hasPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a playback time property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block supports a playback time property.\n */\n supportsPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Sets the current playback time of a block's content.\n *\n * @category Block Video\n * @param id - The block whose playback time should be updated.\n * @param time - The new playback time of the block in seconds.\n */\n setPlaybackTime(id: DesignBlockId, time: number): void;\n /**\n * Gets the current playback time of a block's content.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The playback time of the block in seconds.\n */\n getPlaybackTime(id: DesignBlockId): number;\n /**\n * Checks if a block is visible at the current scene playback time.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns Whether the block should be visible on the canvas at the current playback time.\n */\n isVisibleAtCurrentPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Enables or disables solo playback for a block.\n *\n * When enabled, only this block's content will play while the rest of the scene remains paused.\n *\n * ```javascript\n * engine.block.setSoloPlaybackEnabled(videoFill, true);\n * ```\n *\n * @category Block Video\n * @param id - The block or fill to update.\n * @param enabled - Whether solo playback should be enabled.\n */\n setSoloPlaybackEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if solo playback is enabled for a block.\n *\n * ```javascript\n * engine.block.isSoloPlaybackEnabled(videoFill);\n * ```\n *\n * @category Block Video\n * @param id - The block or fill to query.\n * @returns Whether solo playback is enabled for this block.\n */\n isSoloPlaybackEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has playback controls.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block has playback control.\n * @deprecated Use supportsPlaybackControl instead\n */\n hasPlaybackControl(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports playback controls.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block supports playback control.\n */\n supportsPlaybackControl(id: DesignBlockId): boolean;\n /**\n * Sets whether a block's media content should loop.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param looping - Whether the block should loop to the beginning or stop.\n */\n setLooping(id: DesignBlockId, looping: boolean): void;\n /**\n * Checks if a block's media content is set to loop.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is looping.\n */\n isLooping(id: DesignBlockId): boolean;\n /**\n * Sets whether the audio of a block is muted.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param muted - Whether the audio should be muted.\n */\n setMuted(id: DesignBlockId, muted: boolean): void;\n /**\n * Checks if a block's audio is muted due to engine rules.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is force muted.\n */\n isForceMuted(id: DesignBlockId): boolean;\n /**\n * Checks if a block's audio is muted.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is muted.\n */\n isMuted(id: DesignBlockId): boolean;\n /**\n * Sets the audio volume of a block.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param volume - The desired volume, ranging from 0.0 to 1.0.\n */\n setVolume(id: DesignBlockId, volume: number): void;\n /**\n * Gets the audio volume of a block.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The volume, ranging from 0.0 to 1.0.\n */\n getVolume(id: DesignBlockId): number;\n /**\n * Sets the playback speed multiplier of a block that supports playback control.\n * Note: This also adjusts the trim and duration of the block.\n * Video fills running faster than 3.0x are force muted until reduced to 3.0x or below.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param speed - The desired playback speed multiplier. Valid range is [0.25, 3.0] for audio blocks and\n * [0.25, infinity) for video fills.\n */\n setPlaybackSpeed(id: DesignBlockId, speed: number): void;\n /**\n * Gets the playback speed multiplier of a block that supports playback control.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The playback speed multiplier.\n */\n getPlaybackSpeed(id: DesignBlockId): number;\n /**\n * Forces the loading of a block's audio/video resource.\n *\n * If the resource failed to load previously, it will be reloaded.\n *\n * @category Block Video\n * @param id - The video fill or audio block whose resource should be loaded.\n * @returns A Promise that resolves once the resource has finished loading.\n */\n forceLoadAVResource(id: DesignBlockId): Promise<void>;\n /**\n * Checks if a block's audio/video resource is loaded.\n *\n * @category Block Video\n * @param id - The video fill or audio block.\n * @returns The loading state of the resource.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isAVResourceLoaded(id: DesignBlockId): boolean;\n /**\n * Gets the total duration of a block's audio/video resource.\n *\n * @category Block Video\n * @param id - The video fill or audio block.\n * @returns The video or audio file duration in seconds.\n */\n getAVResourceTotalDuration(id: DesignBlockId): number;\n /**\n * Gets the width of a block's video resource.\n *\n * @category Block Video\n * @param id - The video fill block.\n * @returns The video width in pixels.\n */\n getVideoWidth(id: DesignBlockId): number;\n /**\n * Gets the height of a block's video resource.\n *\n * @category Block Video\n * @param id - The video fill block.\n * @returns The video height in pixels.\n */\n getVideoHeight(id: DesignBlockId): number;\n /**\n * Generate a sequence of thumbnails for the given video fill or design block.\n *\n * Note: There can only be one thumbnail generation request in progress for a given block.\n * Note: During playback, the thumbnail generation will be paused.\n * @category Block Video\n * @param id - The video fill or design block.\n * @param thumbnailHeight - The height of each thumbnail.\n * @param timeBegin - The start time in seconds for the thumbnail sequence.\n * @param timeEnd - The end time in seconds for the thumbnail sequence.\n * @param numberOfFrames - The number of frames to generate.\n * @param onFrame - A callback that receives the frame index and image data.\n * @returns A function to cancel the thumbnail generation request.\n */\n generateVideoThumbnailSequence(id: DesignBlockId, thumbnailHeight: number, timeBegin: number, timeEnd: number, numberOfFrames: number, onFrame: (frameIndex: number, result: ImageData | Error) => void): () => void;\n /**\n * Generate a thumbnail sequence for the given audio block or video fill.\n *\n * A thumbnail in this case is a chunk of samples in the range of 0 to 1.\n * In case stereo data is requested, the samples are interleaved, starting with the left channel.\n * Note: During playback, the thumbnail generation will be paused.\n *\n * @category Block Video\n * @param id - The audio block or video fill.\n * @param samplesPerChunk - The number of samples per chunk.\n * @param timeBegin - The start time in seconds for the thumbnail sequence.\n * @param timeEnd - The end time in seconds for the thumbnail sequence.\n * @param numberOfSamples - The total number of samples to generate.\n * @param numberOfChannels - The number of channels in the output (1 for mono, 2 for stereo).\n * @param onChunk - A callback that receives the chunk index and sample data.\n * @returns A function to cancel the thumbnail generation request.\n */\n generateAudioThumbnailSequence(id: DesignBlockId, samplesPerChunk: number, timeBegin: number, timeEnd: number, numberOfSamples: number, numberOfChannels: number, onChunk: (chunkIndex: number, result: Float32Array | Error) => void): () => void;\n /**\n * Generates a thumbnail for a video fill.\n *\n * @category Block Video\n * @param id - The video fill.\n * @param thumbnailHeight - The height of a thumbnail. The width will be calculated from the video aspect ratio.\n * @returns A promise that resolves with a thumbnail encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getVideoFillThumbnail(id: DesignBlockId, thumbnailHeight: number): Promise<Blob>;\n /**\n * Generates a thumbnail atlas for a video fill.\n *\n * @category Block Video\n * @param id - The video fill.\n * @param numberOfColumns - The number of columns in the atlas.\n * @param numberOfRows - The number of rows in the atlas.\n * @param thumbnailHeight - The height of a single thumbnail.\n * @returns A promise that resolves with a thumbnail atlas encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getVideoFillThumbnailAtlas(id: DesignBlockId, numberOfColumns: number, numberOfRows: number, thumbnailHeight: number): Promise<Blob>;\n /**\n * Generates a thumbnail atlas for a page.\n *\n * @category Block Video\n * @param id - The page.\n * @param numberOfColumns - The number of columns in the atlas.\n * @param numberOfRows - The number of rows in the atlas.\n * @param thumbnailHeight - The height of a single thumbnail.\n * @returns A promise that resolves with a thumbnail atlas encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getPageThumbnailAtlas(id: DesignBlockId, numberOfColumns: number, numberOfRows: number, thumbnailHeight: number): Promise<Blob>;\n /**\n * Creates a new animation block.\n *\n * @category Block Animations\n * @param type - The type of animation to create.\n * @returns The handle of the new animation instance.\n */\n createAnimation(type: AnimationType): DesignBlockId;\n /**\n * Checks if a block supports animation.\n *\n * @category Block Animations\n * @param id - The block to query.\n * @returns Whether the block supports animation.\n */\n supportsAnimation(id: DesignBlockId): boolean;\n /**\n * Sets the \"in\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"in\" animation should be set.\n * @param animation - The animation to set.\n */\n setInAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Sets the \"loop\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"loop\" animation should be set.\n * @param animation - The animation to set.\n */\n setLoopAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Sets the \"out\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"out\" animation should be set.\n * @param animation - The animation to set.\n */\n setOutAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Gets the \"in\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"in\" animation should be queried.\n * @returns The \"in\" animation of the block.\n */\n getInAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Gets the \"loop\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"loop\" animation should be queried.\n * @returns The \"loop\" animation of the block.\n */\n getLoopAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Gets the \"out\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"out\" animation should be queried.\n * @returns The \"out\" animation of the block.\n */\n getOutAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Updates a pixel stream fill block with a new pixel buffer.\n *\n * @category Block Video\n * @param id - The pixel stream fill block.\n * @param buffer - A canvas or video element to use as the pixel source.\n */\n setNativePixelBuffer(id: number, buffer: HTMLCanvasElement | HTMLVideoElement): void;\n /**\n * Gets the current state of a block.\n *\n * A block's state is determined by its own state and that of its shape, fill, and effects.\n *\n * ```javascript\n * const state = engine.block.getState(block);\n * ```\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's state: 'Ready', 'Pending', or 'Error'.\n */\n getState(id: DesignBlockId): BlockState;\n /**\n * Sets the state of a block.\n *\n * ```javascript\n * engine.block.setState(video, {type: 'Pending', progress: 0.5});\n * engine.block.setState(page, {type: 'Ready'});\n * engine.block.setState(image, {type: 'Error', error: 'ImageDecoding'});\n * ```\n *\n * @category Block State\n * @param id - The block whose state should be set.\n * @param state - The new state to set.\n */\n setState(id: DesignBlockId, state: BlockState): void;\n /**\n * Subscribes to state changes for a set of blocks.\n *\n * The state is determined by the block and its associated shape, fill, and effects.\n *\n * ```javascript\n * const unsubscribe = engine.block.onStateChanged([], (blocks) => {\n * blocks.forEach(block => console.log(block));\n * });\n * ```\n *\n * @category Block Events\n * @param ids - A list of block IDs to monitor. If empty, all blocks are monitored.\n * @param callback - The function to call when a state changes.\n * @returns A function to unsubscribe from the event.\n */\n onStateChanged: (ids: DesignBlockId[], callback: (ids: DesignBlockId[]) => void) => (() => void);\n /**\n * Forces the loading of resources for a set of blocks and their children.\n *\n * This is useful for preloading resources. If a resource failed to load previously, it will be reloaded.\n *\n * Pass an empty array to load resources for every block currently known to the engine.\n *\n * @category Block Lifecycle\n * @param ids - The blocks whose resources should be loaded. Pass an empty array to load resources for every\n * block currently known to the engine.\n * @returns A Promise that resolves once all resources have finished loading.\n */\n forceLoadResources(ids: DesignBlockId[]): Promise<void>;\n /**\n * Adds an image to the current page. The image will be automatically loaded\n * and sized appropriately. In Video mode, timeline and animation options can be applied.\n *\n * @category Helper\n * @param url - URL or path to the image file\n * @param options - Configuration options for the image\n * @returns Promise that resolves to the ID of the created image block\n * @throws Error if no current page exists\n */\n addImage(url: string, options?: AddImageOptions): Promise<DesignBlockId>;\n /**\n * Adds a video block to the current scene page. The video will be positioned and sized\n * according to the provided parameters. Timeline and animation effects can be applied.\n *\n * @category Helper\n * @param url - URL or path to the video file\n * @param width - Width of the video in scene design units\n * @param height - Height of the video in scene design units\n * @param options - Configuration options for the video\n * @returns Promise that resolves to the ID of the created video block\n * @throws Error if no current page exists\n */\n addVideo(url: string, width: number, height: number, options?: AddVideoOptions): Promise<DesignBlockId>;\n /**\n * Applies an animation to a block.\n *\n * @category Helper\n * @param block - The ID of the block to apply the animation to\n * @param animation - The animation configuration options\n */\n applyAnimation(block: DesignBlockId, animation?: AnimationOptions): void;\n /**\n * Applies a drop shadow effect to any block.\n *\n * @category Helper\n * @param block - The ID of the block to apply the shadow to\n * @param options - Shadow configuration options. If not provided, enables shadow with default settings\n */\n applyDropShadow(block: DesignBlockId, options?: DropShadowOptions): void;\n /**\n * Generates a thumbnail image of the scene at a specific time.\n *\n * @category Helper\n * @param height - Height of the thumbnail in scene design units (maximum 512)\n * @param time - Time position in seconds to capture the thumbnail\n * @returns Promise that resolves to a Blob containing the PNG thumbnail image\n * @throws Error if no page exists or if height exceeds 512 pixels\n */\n generateThumbnailAtTimeOffset(height: number, time: number): Promise<Blob>;\n /**\n * Gets the background track of the current scene.\n * The background track is the track that determines the page duration.\n *\n * @category Helper\n * @returns The ID of the background track, or null if none exists\n */\n getBackgroundTrack(): DesignBlockId | null;\n /**\n * Moves a block to the background track.\n * This is useful for organizing content in video scenes where you want\n * certain elements to be part of the background layer.\n * The background track is the track that determines the page duration.\n * If no background track exists, one will be created automatically.\n *\n * @category Helper\n * @param block - The ID of the block to move to the background track\n */\n moveToBackgroundTrack(block: DesignBlockId): void;\n}\n\n/** @public */\nexport declare type BlockEnumType = {\n 'blend/mode': BlendMode;\n 'contentFill/mode': ContentFillMode;\n 'height/mode': HeightMode;\n 'page/guides/source': PageGuidesSource;\n 'position/x/mode': PositionXMode;\n 'position/y/mode': PositionYMode;\n 'scene/designUnit': SceneDesignUnit;\n 'scene/layout': SceneLayout;\n 'scene/mode': SceneMode;\n 'width/mode': WidthMode;\n 'stroke/cap': StrokeCap;\n 'stroke/cornerGeometry': StrokeCornerGeometry;\n 'stroke/position': StrokePosition;\n 'stroke/style': StrokeStyle;\n 'text/horizontalAlignment': TextHorizontalAlignment;\n 'text/verticalAlignment': TextVerticalAlignment;\n 'cutout/type': CutoutType;\n 'caption/horizontalAlignment': CaptionHorizontalAlignment;\n 'caption/verticalAlignment': CaptionVerticalAlignment;\n animationEasing: AnimationEasing;\n textAnimationWritingStyle: TextAnimationWritingStyle;\n 'animation/grow/direction': AnimationGrowDirection;\n 'animation/wipe/direction': AnimationWipeDirection;\n 'animation/baseline/direction': AnimationBaselineDirection;\n 'animation/spin/direction': AnimationSpinDirection;\n 'animation/spin_loop/direction': AnimationSpinLoopDirection;\n 'animation/jump_loop/direction': AnimationJumpLoopDirection;\n 'animation/typewriter_text/writingStyle': AnimationTypewriterTextWritingStyle;\n 'animation/block_swipe_text/direction': AnimationBlockSwipeTextDirection;\n 'animation/merge_text/direction': AnimationMergeTextDirection;\n 'animation/ken_burns/direction': AnimationKenBurnsDirection;\n 'animation/scale_loop/direction': AnimationScaleLoopDirection;\n 'fill/pixelStream/orientation': FillPixelStreamOrientation;\n 'shape/vector_path/fillRule': ShapeVectorPathFillRule;\n};\n\n/**\n * Represents an event related to a design block.\n *\n * The `BlockEvent` interface provides a set of properties that describe an event related to\n * a design block, including the block ID and the type of event.\n *\n * @public\n */\nexport declare interface BlockEvent {\n block: DesignBlockId;\n type: 'Created' | 'Updated' | 'Destroyed';\n}\n\n/**\n * Represents the state of a design block.\n *\n * The `BlockState` type is a union of the `BlockStateError`, `BlockStatePending`, and\n * `BlockStateReady` interfaces, which describe the possible states of a design block.\n *\n * @categoryDescription BlockState\n * Methods for working with the state of design blocks.\n *\n * @public\n */\nexport declare type BlockState = BlockStateError | BlockStatePending | BlockStateReady;\n\n/**\n * Represents an error state for a design block.\n *\n * The `BlockStateError` interface provides a set of properties that describe an error state\n * for a design block, including the type of error and a description of the error.\n *\n * @public\n */\nexport declare interface BlockStateError {\n type: 'Error';\n error: 'AudioDecoding' | 'ImageDecoding' | 'FileFetch' | 'Unknown' | 'VideoDecoding';\n}\n\n/**\n * Represents a pending state for a design block.\n *\n * The `BlockStatePending` interface provides a set of properties that describe a pending\n * state for a design block, including the type of state and the progress of the operation.\n *\n * @public\n */\nexport declare interface BlockStatePending {\n type: 'Pending';\n /** Expected range is [0, 1] */\n progress: number;\n}\n\n/**\n * Represents a ready state for a design block.\n *\n * The `BlockStateReady` interface provides a set of properties that describe a ready state\n * for a design block, including the type of state.\n *\n * @public\n */\nexport declare interface BlockStateReady {\n type: 'Ready';\n}\n\n/**\n * The shorthand block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * @public\n */\nexport declare const BLUR_TYPES: readonly [\"uniform\", \"linear\", \"mirrored\", \"radial\"];\n\n/**\n * The block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * Refer to {@link BlurTypeShorthand} and {@link BlurTypeLonghand} for more details.\n * @public\n */\nexport declare type BlurType = BlurTypeShorthand | BlurTypeLonghand;\n\n/**\n * The longhand block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * @public\n */\nexport declare type BlurTypeLonghand = `//ly.img.ubq/blur/${BlurTypeShorthand}`;\n\n/** @public */\nexport declare type BlurTypeShorthand = (typeof BLUR_TYPES)[number];\n\n/**\n * Represents the names of boolean operations.\n *\n * Defines the possible boolean operations.\n * - 'Difference': The difference between two shapes.\n * - 'Intersection': The intersection of two shapes.\n * - 'Union': The union of two shapes.\n * - 'XOR': The exclusive OR of two shapes.\n *\n * @public\n */\nexport declare type BooleanOperation = 'Difference' | 'Intersection' | 'Union' | 'XOR';\n\n/** @public */\nexport declare type BoolPropertyName = 'alwaysOnBottom' | 'alwaysOnTop' | 'clipped' | 'flip/horizontal' | 'flip/vertical' | 'highlightEnabled' | 'includedInExport' | 'placeholder/enabled' | 'playback/playing' | 'playback/soloPlaybackEnabled' | 'scene/aspectRatioLock' | 'selected' | 'selectionEnabled' | 'transformLocked' | 'visible' | 'blur/enabled' | 'dropShadow/clip' | 'dropShadow/enabled' | 'fill/enabled' | 'page/guides/gridEnabled' | 'page/guides/gridSnapEnabled' | 'page/marginEnabled' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'playback/looping' | 'playback/muted' | 'stroke/enabled' | 'backgroundColor/enabled' | 'placeholderBehavior/enabled' | 'text/automaticFontSizeEnabled' | 'text/clipLinesOutsideOfFrame' | 'text/hasClippedLines' | 'text/useLigatures' | 'text/useKerning' | 'text/useContextualLigatures' | 'text/useDiscretionaryLigatures' | 'track/automaticallyManageBlockOffsets' | 'caption/automaticFontSizeEnabled' | 'caption/clipLinesOutsideOfFrame' | 'caption/hasClippedLines' | 'caption/useLigatures' | 'caption/useKerning' | 'caption/useContextualLigatures' | 'caption/useDiscretionaryLigatures' | 'captionTrack/automaticallyManageBlockOffsets' | 'animation/slide/fade' | 'animation/pan/fade' | 'animation/blur/fade' | 'animation/zoom/fade' | 'animation/crop_zoom/fade' | 'animation/spin/fade' | 'animation/block_swipe_text/useTextColor' | 'animation/spread_text/fade' | 'animation/ken_burns/fade' | 'effect/enabled' | (string & {});\n\n/**\n * Represents a buffer of data.\n *\n * The `Buffer` interface provides a set of properties that describe a buffer of data,\n * including a handle and the buffer itself.\n *\n * @public\n */\ndeclare interface Buffer_2 {\n handle: string;\n buffer: Uint8Array;\n}\nexport { Buffer_2 as Buffer }\n\n/** @public */\nexport declare type CameraClampingOvershootMode = (typeof CameraClampingOvershootModeValues)[number];\n\n/** @public */\nexport declare const CameraClampingOvershootModeValues: readonly [\"Center\", \"Reverse\"];\n\n/** @public */\nexport declare type CaptionHorizontalAlignment = (typeof CaptionHorizontalAlignmentValues)[number];\n\n/** @public */\nexport declare const CaptionHorizontalAlignmentValues: readonly [\"Left\", \"Right\", \"Center\", \"Auto\"];\n\n/** @public */\nexport declare type CaptionVerticalAlignment = (typeof CaptionVerticalAlignmentValues)[number];\n\n/** @public */\nexport declare const CaptionVerticalAlignmentValues: readonly [\"Top\", \"Bottom\", \"Center\"];\n\n/**\n * Tight ink-paint bounding box of a single grapheme, in global scene\n * coordinates. Returned by `block.getTextCharacterInkBoxes`. The baseline\n * Y is reported separately because it does not equal `y + height` (the\n * box is the tight ink rect; the baseline anchors glyph descenders).\n */\nexport declare interface CharacterInkBox {\n /** Global X of the tight ink rect (left edge, Y-down scene space). */\n x: number;\n /** Global Y of the tight ink rect (top edge, Y-down scene space). */\n y: number;\n /** Width of the tight ink rect. */\n width: number;\n /** Height of the tight ink rect. */\n height: number;\n /** Global Y of the glyph baseline. */\n baselineY: number;\n}\n\n/**\n * Represents a color in the CMYK color space.\n *\n * The `CMYK` type is a tuple that contains four numbers representing the cyan, magenta,\n * yellow, and black components of the color.\n *\n * @categoryDescription CMYK\n * Methods for working with colors in the CMYK color space.\n *\n * @public\n */\nexport declare type CMYK = [c: number, m: number, y: number, k: number];\n\n/**\n * Represents a CMYK color value.\n *\n * Defines a CMYK color value with components between 0 and 1.\n * - 'c': The cyan component.\n * - 'm': The magenta component.\n * - 'y': The yellow component.\n * - 'k': The black component.\n * - 'tint': The tint factor.\n *\n * @public\n */\nexport declare interface CMYKColor {\n /** Cyan */\n c: number;\n /** Magenta */\n m: number;\n /** Yellow */\n y: number;\n /** Black */\n k: number;\n /** The tint factor */\n tint: number;\n}\n\n/**\n * Represents all color types supported by the engine.\n *\n * @categoryDescription Color\n * Defines all color types supported by the engine.\n * - 'RGBAColor': An RGBA color value.\n * - 'CMYKColor': A CMYK color value.\n * - 'SpotColor': A spot color value.\n *\n * @public\n */\nexport declare type Color = RGBAColor | CMYKColor | SpotColor;\n\n/** @public */\nexport declare type ColorPickerColorMode = (typeof ColorPickerColorModeValues)[number];\n\n/** @public */\nexport declare const ColorPickerColorModeValues: readonly [\"RGB\", \"CMYK\", \"Any\"];\n\n/** @public */\nexport declare type ColorPropertyName = 'dropShadow/color' | 'fill/solid/color' | 'page/guides/gridColor' | 'stroke/color' | 'backgroundColor/color' | 'animation/block_swipe_text/blockColor' | 'effect/duotone_filter/darkColor' | 'effect/duotone_filter/lightColor' | 'effect/green_screen/fromColor' | 'effect/recolor/fromColor' | 'effect/recolor/toColor' | 'fill/color/value' | (string & {});\n\n/**\n * Represents the color space used in the editor.\n *\n * @categoryDescription Color Space\n * Defines the possible color spaces used in the editor.\n * - 'sRGB': The sRGB color space.\n * - 'CMYK': The CMYK color space.\n * - 'SpotColor': The spot color space.\n *\n * @public\n */\nexport declare type ColorSpace = 'sRGB' | 'CMYK' | 'SpotColor';\n\n/**\n * Asset results that are returned from the engine.\n *\n * They contain additional information about the context of the asset.\n * @public\n */\nexport declare interface CompleteAssetResult extends AssetResult {\n /**\n * Context how an asset was added or shall be used in the future.\n * This is added to all assets coming from the engine.\n */\n context: {\n sourceId: string;\n };\n /** This is optional in `AssetResult` but always present here */\n active: boolean;\n}\n\n/**\n * Compression format for scene serialization.\n * @public\n */\ndeclare enum CompressionFormat_2 {\n None = 0,\n Zstd = 1\n}\nexport { CompressionFormat_2 as CompressionFormat }\n\n/**\n * Compression level for scene serialization.\n * @public\n */\nexport declare enum CompressionLevel {\n Fastest = 0,\n Default = 1,\n Best = 2\n}\n\n/**\n * Specifies the configuration for the Creative Editor SDK.\n *\n * The `Configuration` interface provides a set of properties that control the behavior\n * and settings of the editor. These options include settings for the base URL, license,\n * user ID, core settings, logger, feature flags, presets, force WebGL1, audio output,\n * and role.\n *\n * @public\n */\nexport declare interface Configuration {\n baseURL: string;\n license?: string;\n userId?: string;\n core: {\n baseURL: string;\n };\n logger: Logger;\n featureFlags?: {\n [flag: string]: boolean | string;\n };\n /**\n * @deprecated This config key is not used anymore and will be removed.\n */\n presets: {\n /**\n * @deprecated The configuration option `presets.typefaces` does not exist anymore.\n * Custom typefaces should be defined as asset sources using\n * the `cesdk.engine.asset.addSource` or `cesdk.engine.asset.addLocalSource` instead.\n */\n typefaces?: {\n [id: string]: TypefaceDefinition;\n };\n };\n /**\n * By default the engine tries to create a webgl2 context. If this fails it\n * falls back to trying to create a webgl1 context. If this configuration\n * option is set to true, it will no longer try to create a webgl2 context\n * and always create a webgl1 context.\n */\n forceWebGL1?: boolean;\n /**\n * Whether the engine should automatically choose an audio output device or\n * should not output audio at all.\n *\n * If not configured the fallback value is 'auto'.\n */\n audioOutput?: 'auto' | 'none';\n role?: RoleString;\n}\n\n/** @public */\nexport declare type ContentFillMode = (typeof ContentFillModeValues)[number];\n\n/** @public */\nexport declare const ContentFillModeValues: readonly [\"Crop\", \"Cover\", \"Contain\"];\n\n/**\n * Options for creating a video scene.\n * @public\n */\nexport declare type CreateSceneOptions = {\n /** The page options */\n page?: {\n /** The size of the page */\n size: number | {\n width: number;\n height: number;\n };\n /** The background color of the page */\n color?: Color;\n };\n /**\n * The design unit of the new scene. Defaults to `Pixel`.\n */\n designUnit?: SceneDesignUnit;\n /**\n * The unit in which font sizes for `setTextFontSize` and `getTextFontSizes` are interpreted.\n * If omitted, it is paired with `designUnit`: `Pixel` scenes get `Pixel`, all other scenes get `Point`.\n */\n fontSizeUnit?: SceneFontSizeUnit;\n};\n\n/**\n * The CreativeEngine is the core processing unit of CE.SDK and handles state management, rendering, input handling, and much more.\n * It provides APIs to directly interact with assets, blocks, scenes, and variables. These APIs can be used in a headless environment\n * to build and manipulate designs programmatically, or in a browser to create interactive applications.\n *\n * @public\n */\ndeclare class CreativeEngine {\n #private;\n /**\n * The version of the CE.SDK Node package.\n */\n static readonly version: string;\n asset: AssetAPI;\n block: BlockAPI;\n editor: EditorAPI;\n event: EventAPI;\n scene: SceneAPI;\n variable: VariableAPI;\n version: string;\n\n /**\n * Update the engine's internal state and render to the canvas, if a scene exists.\n *\n * @category Engine Management\n */\n update(): boolean;\n /**\n * Dispose the engine and clean up all resources.\n *\n * @category Engine Management\n */\n dispose(): void;\n /**\n * Initialize a CreativeEngine with an optional configuration.\n *\n * @category Engine Management\n * @param config - Optional configuration object for engine initialization.\n * @returns A promise that resolves to an engine instance.\n */\n static init(config?: Partial<Configuration>): Promise<CreativeEngine>;\n /**\n * Register a set of asset sources containing default assets.\n *\n * Available default asset sources:\n * - `'ly.img.sticker'` - Various stickers\n * - `'ly.img.vectorpath'` - Shapes and arrows\n * - `'ly.img.filter.lut'` - LUT effects of various kinds\n * - `'ly.img.filter.duotone'` - Color effects of various kinds\n *\n * These assets are parsed at \\{\\{base_url\\}\\}/<id>/content.json, where\n * `base_url` defaults to the IMG.LY CDN.\n * Each source is created via `addLocalSource` and populated with the parsed assets. To modify the available\n * assets, you may either exclude certain IDs via `excludeAssetSourceIds` or alter the sources after creation.\n *\n * @category Asset Sources\n * @param options - Configuration options for loading default asset sources.\n * @returns A promise that resolves when all asset sources are loaded.\n */\n addDefaultAssetSources({ baseURL, excludeAssetSourceIds }?: {\n /** The source of the asset definitions, must be absolute. Defaults to IMG.LY CDN. */\n baseURL?: string;\n /** A list of IDs, that will be ignored during load. */\n excludeAssetSourceIds?: DefaultAssetSourceId[];\n }): Promise<void>;\n /**\n * Register a set of demo asset sources containing example assets.\n *\n * **Note**: These are demonstration assets not meant for production use.\n *\n * Available demo asset sources:\n * - `'ly.img.image'` - Sample images\n * - `'ly.img.image.upload'` - Demo source to upload image assets\n * - `'ly.img.audio'` - Sample audios\n * - `'ly.img.audio.upload'` - Demo source to upload audio assets\n * - `'ly.img.video'` - Sample videos\n * - `'ly.img.video.upload'` - Demo source to upload video assets\n *\n * @category Asset Sources\n * @param options - Configuration options for loading demo asset sources.\n * @returns A promise that resolves when all demo asset sources are loaded.\n */\n addDemoAssetSources({ baseURL, excludeAssetSourceIds, sceneMode, withUploadAssetSources }?: {\n /** The source of the demo asset definitions, must be absolute. Defaults to IMG.LY CDN. */\n baseURL?: string;\n /** A list of IDs, that will be ignored during load */\n excludeAssetSourceIds?: DemoAssetSourceId[];\n /** If 'Video' video specific demo asset sources will be loaded as well (default 'Design') */\n sceneMode?: SceneMode;\n /** If 'true' asset sources for uploads are added (default false) */\n withUploadAssetSources?: boolean;\n }): Promise<void>;\n /**\n * Returns the configured base URL for the engine's assets.\n *\n * @category Engine Management\n * @returns The absolute base URL configured for this engine instance.\n *\n * @example\n * ```typescript\n * const engine = await CreativeEngine.init({\n * baseURL: 'https://my-cdn.example.com/assets/'\n * });\n *\n * console.log(engine.getBaseURL()); // 'https://my-cdn.example.com/assets/'\n * ```\n */\n getBaseURL(): string;\n}\nexport default CreativeEngine;\n\n/**\n * Represents the type of a cutout.\n *\n * @categoryDescription Cutout Type\n * Defines the possible types for a cutout.\n * - 'Solid': A solid cutout.\n * - 'Dashed': A dashed cutout.\n *\n * @public\n */\nexport declare type CutoutOperation = 'Difference' | 'Intersection' | 'Union' | 'XOR';\n\n/** @public */\nexport declare type CutoutType = (typeof CutoutTypeValues)[number];\n\n/** @public */\nexport declare const CutoutTypeValues: readonly [\"Solid\", \"Dashed\"];\n\n/**\n * Represents the default asset source IDs used in the editor.\n *\n * @categoryDescription Default Asset Source ID\n * Defines the possible default asset source IDs used in the editor.\n * - 'ly.img.sticker': Asset source for stickers.\n * - 'ly.img.vectorpath': Asset source for vector paths.\n * - 'ly.img.colors.defaultPalette': Asset source for the default color palette.\n * - 'ly.img.filter.lut': Asset source for LUT filters.\n * - 'ly.img.filter.duotone': Asset source for duotone filters.\n * - 'ly.img.effect': Asset source for effects.\n * - 'ly.img.blur': Asset source for blur effects.\n * - 'ly.img.typeface': Asset source for typefaces.\n * - 'ly.img.page.presets': Asset source for page presets.\n * - 'ly.img.page.presets.video': Asset source for video page presets.\n * - 'ly.img.crop.presets': Asset source for crop presets.\n * - 'ly.img.captionPresets': Asset source for caption presets.\n *\n * @deprecated This function uses legacy v4 asset source IDs. Please migrate to v5 asset sources using engine.asset.addLocalAssetSourceFromJSONURI() directly.\n * @public\n */\nexport declare type DefaultAssetSourceId = 'ly.img.sticker' | 'ly.img.vectorpath' | 'ly.img.colors.defaultPalette' | 'ly.img.filter.lut' | 'ly.img.filter.duotone' | 'ly.img.effect' | 'ly.img.blur' | 'ly.img.typeface' | 'ly.img.page.presets' | 'ly.img.page.presets.video' | 'ly.img.crop.presets' | 'ly.img.text' | 'ly.img.captionPresets';\n\n/**\n * Represents the default demo asset source IDs used in the editor.\n *\n * @categoryDescription Default Demo Asset Source ID\n * Defines the possible default demo asset source IDs used in the editor.\n * - 'ly.img.template': Asset source for templates.\n * - 'ly.img.image.upload': Asset source for uploading images.\n * - 'ly.img.video.upload': Asset source for uploading videos.\n * - 'ly.img.audio.upload': Asset source for uploading audio.\n * - 'ly.img.image': Asset source for images.\n * - 'ly.img.video': Asset source for videos.\n * - 'ly.img.video.template': Asset source for video templates.\n * - 'ly.img.audio': Asset source for audio.\n * - 'ly.img.textComponents': Asset source for text components.\n *\n * @deprecated This function uses legacy v3 demo asset source IDs. Please migrate to v4 asset sources using engine.asset.addLocalAssetSourceFromJSONURI() directly.\n * @public\n */\nexport declare type DemoAssetSourceId = 'ly.img.template' | 'ly.img.image.upload' | 'ly.img.video.upload' | 'ly.img.audio.upload' | 'ly.img.image' | 'ly.img.video' | 'ly.img.video.template' | 'ly.img.audio' | 'ly.img.textComponents';\n\n/**\n * The shorthand block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * @public\n */\nexport declare const DESIGN_BLOCK_TYPES: readonly [\"scene\", \"stack\", \"camera\", \"page\", \"graphic\", \"audio\", \"text\", \"group\", \"cutout\", \"track\", \"caption\", \"captionTrack\"];\n\n/**\n * A numerical identifier for a design block\n * @public\n */\nexport declare type DesignBlockId = number;\n\n/**\n * The block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * Refer to {@link DesignBlockTypeShorthand} and {@link DesignBlockTypeLonghand} for more details.\n * @public\n */\nexport declare type DesignBlockType = DesignBlockTypeShorthand | DesignBlockTypeLonghand;\n\n/**\n * The longhand block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * @public\n */\nexport declare type DesignBlockTypeLonghand = `//ly.img.ubq/${DesignBlockTypeShorthand}`;\n\n/** @public */\nexport declare type DesignBlockTypeShorthand = (typeof DESIGN_BLOCK_TYPES)[number];\n\n/**\n * A single color extracted from the rendered appearance of a block.\n *\n * @public\n */\nexport declare interface DominantColor {\n /** Red component in sRGB, normalized to the range [0, 1]. */\n r: number;\n /** Green component in sRGB, normalized to the range [0, 1]. */\n g: number;\n /** Blue component in sRGB, normalized to the range [0, 1]. */\n b: number;\n /**\n * Share of analyzed pixels represented by this color, in the range [0, 1].\n * Higher values indicate a more prominent color. The sum of weights returned\n * by a single `BlockAPI.getDominantColors` call is `1.0`.\n */\n weight: number;\n}\n\n/**\n * Options for `BlockAPI.getDominantColors`.\n *\n * @public\n */\nexport declare interface DominantColorsOptions {\n /**\n * Number of dominant colors to extract.\n * The returned palette may contain fewer entries for images with very little variation,\n * and is empty when `count` is `0`.\n *\n * @defaultValue 5\n */\n count?: number;\n /**\n * If `true`, near-white pixels are excluded from the analysis.\n * Useful when analyzing images on white backgrounds to avoid the background\n * dominating the result.\n *\n * @defaultValue false\n */\n ignoreWhite?: boolean;\n}\n\n/** @public */\nexport declare type DoubleClickSelectionMode = (typeof DoubleClickSelectionModeValues)[number];\n\n/** @public */\nexport declare const DoubleClickSelectionModeValues: readonly [\"Direct\", \"Hierarchical\"];\n\n/** @public */\nexport declare type DoublePropertyName = 'playback/time' | 'playback/duration' | 'playback/timeOffset' | 'audio/totalDuration' | 'playback/trimLength' | 'playback/trimOffset' | 'fill/video/totalDuration' | 'animation/scale_loop/startDelay' | 'animation/scale_loop/holdDuration' | 'animation/scale_loop/easingDuration' | (string & {});\n\n/**\n * Information about a single audio track from a video.\n * This interface provides comprehensive metadata about audio tracks,\n * including codec information, technical specifications, and track details.\n * @public\n */\n/**\n * Options for configuring drop shadow effects on blocks.\n * @public\n */\nexport declare type DropShadowOptions = {\n /** The color of the drop shadow */\n color?: Color;\n /** The offset position of the shadow */\n offset?: {\n /** Horizontal offset in scene design units */\n x?: number;\n /** Vertical offset in scene design units */\n y?: number;\n };\n /** The blur radius of the shadow */\n blur?: {\n /** Horizontal blur radius in scene design units */\n x?: number;\n /** Vertical blur radius in scene design units */\n y?: number;\n };\n};\n\n/**\n * Represents the current edit mode of the editor.\n *\n * @categoryDescription Edit Mode\n * Defines the possible edit modes of the editor.\n * - 'Transform': The mode for transforming blocks (e.g., resizing, rotating).\n * - 'Crop': The mode for cropping images.\n * - 'Text': The mode for editing text.\n * - 'Playback': The mode for playing back animations or videos.\n * - 'Trim': The mode for trimming video or audio.\n * - 'Custom': A custom edit mode defined by the user.\n *\n * @public\n */\nexport declare type EditMode = 'Transform' | 'Crop' | 'Text' | 'Playback' | 'Trim' | 'Vector' | (string & {});\n\n/**\n * @public Control the design editor's behavior and settings.\n *\n * The EditorAPI provides access to edit modes, history management, editor settings, color management,\n * resource handling, and global scope controls. It serves as the central configuration and control interface\n * for the design editor engine.\n *\n * @categoryDescription Edit Mode Management\n * Control the editor's current editing mode and interaction state.\n *\n * @categoryDescription History Management\n * Create, manage, and operate on undo/redo history stacks.\n *\n * @categoryDescription Editor Settings\n * Configure editor behavior through typed settings for different data types.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to editor state changes, history updates, and role changes.\n *\n * @categoryDescription Role & Scope Management\n * Manage user roles and global scope permissions.\n *\n * @categoryDescription Color Management\n * Handle spot colors, color conversion, and color space operations.\n *\n * @categoryDescription Resource Management\n * Manage buffers, URIs, and resource data handling.\n *\n * @categoryDescription System Information\n * Access memory usage, export limits, and system capabilities.\n */\nexport declare class EditorAPI {\n #private;\n\n\n\n\n\n\n\n /**\n * Subscribe to editor state changes.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the editor state changes.\n * @returns A method to unsubscribe from the event.\n */\n onStateChanged: (callback: () => void) => (() => void);\n /**\n * Set the editor's current edit mode.\n *\n * Edit modes represent different tools or interaction states within the editor. Common ones, are \"Crop\" while the crop tool is shown or \"Text\" when inline-editing text.\n *\n * ```javascript\n * engine.editor.setEditMode('Crop');\n * // With a base mode\n * engine.editor.setEditMode('CustomMode', 'Crop');\n * ```\n *\n * @category Edit Mode Management\n * @param mode - \"Transform\", \"Crop\", \"Text\", \"Playback\", \"Trim\", \"Vector\" or a custom value.\n * @param baseMode - Optional base mode from which the custom mode will inherit the settings.\n */\n setEditMode(mode: EditMode, baseMode?: string): void;\n /**\n * Get the editor's current edit mode.\n *\n * Edit modes represent different tools or interaction states within the editor. Common ones, are \"Crop\" while the crop tool is shown or \"Text\" when inline-editing text.\n *\n * @category Edit Mode Management\n * @returns \"Transform\", \"Crop\", \"Text\", \"Playback\", \"Trim\", \"Vector\" or a custom value.\n */\n getEditMode(): EditMode;\n /**\n * Check if a user interaction is currently happening.\n *\n * Detects active interactions like resize edits with drag handles or touch gestures.\n *\n * @category Experimental\n * @returns True if an interaction is happening.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isInteractionHappening(): boolean;\n /**\n * Check whether a vector anchor node is currently selected in vector edit mode.\n *\n * @category Vector Edit\n * @returns True if a vector anchor node is selected.\n */\n hasSelectedVectorNode(): boolean;\n /**\n * Add a new vertex by splitting the segment after the currently selected vector node.\n *\n * @category Vector Edit\n */\n addVectorNode(): void;\n /**\n * Delete the currently selected vector node from the path.\n *\n * @category Vector Edit\n */\n deleteVectorNode(): void;\n /**\n * Check whether a vector control point handle is currently selected.\n *\n * @category Vector Edit\n */\n hasSelectedVectorControlPoint(): boolean;\n /**\n * Delete (reset) the currently selected vector control point handles.\n * Removes the bezier handle from the node, converting that side to a straight line.\n * If the node has two handles, only the selected one is removed.\n *\n * @category Vector Edit\n */\n deleteSelectedVectorControlPoints(): void;\n /**\n * Toggle the currently selected vector node between smooth (bezier handles)\n * and corner (no handles).\n *\n * @category Vector Edit\n */\n toggleSelectedVectorNodeSmooth(): void;\n /**\n * Enable or disable bend mode for vector editing.\n *\n * When bend mode is active, clicking an anchor node automatically toggles\n * it between smooth (bezier handles) and corner (no handles).\n *\n * @param active - true to enable bend mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditBendMode(active: boolean): void;\n /**\n * Check whether vector edit bend mode is currently active.\n *\n * @returns true if bend mode is active.\n * @category Vector Edit\n */\n getVectorEditBendMode(): boolean;\n /**\n * Enable or disable add mode for vector editing.\n *\n * When add mode is active, clicking on a path segment inserts a new anchor\n * point at the click position. Mutually exclusive with bend and delete modes.\n *\n * @param active - true to enable add mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditAddMode(active: boolean): void;\n /**\n * Check whether vector edit add mode is currently active.\n *\n * @returns true if add mode is active.\n * @category Vector Edit\n */\n getVectorEditAddMode(): boolean;\n /**\n * Enable or disable delete mode for vector editing.\n *\n * When delete mode is active, clicking an anchor node instantly deletes it\n * from the path. Mutually exclusive with bend and add modes.\n *\n * @param active - true to enable delete mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditDeleteMode(active: boolean): void;\n /**\n * Check whether vector edit delete mode is currently active.\n *\n * @returns true if delete mode is active.\n * @category Vector Edit\n */\n getVectorEditDeleteMode(): boolean;\n /**\n * Set the bezier handle mirror mode for the currently selected vector node.\n *\n * Mirror modes control how the opposite handle behaves when one handle is dragged:\n * - 0 (None): handles move independently\n * - 1 (AngleAndLength): the opposite handle mirrors both angle and length\n * - 2 (AngleOnly): the opposite handle mirrors the angle but keeps its own length\n *\n * @param mode - The mirror mode (0, 1, or 2).\n * @category Vector Edit\n */\n setSelectedVectorNodeMirrorMode(mode: number): void;\n /**\n * Get the bezier handle mirror mode of the currently selected vector node.\n *\n * @returns The mirror mode as a number (0 = None, 1 = AngleAndLength, 2 = AngleOnly).\n * @throws Error if no node is selected or no vector path is being edited.\n * @category Vector Edit\n */\n getSelectedVectorNodeMirrorMode(): number;\n /**\n * Get the cursor type that should be displayed.\n *\n * @category Edit Mode Management\n * @returns The cursor type.\n */\n getCursorType(): 'Arrow' | 'Move' | 'MoveNotPermitted' | 'Resize' | 'Rotate' | 'Text' | 'Cell';\n /**\n * Get the cursor rotation angle.\n *\n * @category Edit Mode Management\n * @returns The angle in radians.\n */\n getCursorRotation(): number;\n /**\n * Get the text cursor's x position in screen space.\n *\n * @category Edit Mode Management\n * @returns The text cursor's x position in screen space.\n */\n getTextCursorPositionInScreenSpaceX(): number;\n /**\n * Get the text cursor's y position in screen space.\n *\n * @category Edit Mode Management\n * @returns The text cursor's y position in screen space.\n */\n getTextCursorPositionInScreenSpaceY(): number;\n /**\n * Create a new undo/redo history stack.\n *\n * Multiple histories can exist, but only one can be active at a time.\n *\n * ```javascript\n * const newHistory = engine.editor.createHistory();\n * ```\n *\n * @category History Management\n * @returns The handle of the created history.\n */\n createHistory(): HistoryId;\n /**\n * Destroy a history stack and free its resources.\n *\n * ```javascript\n * engine.editor.destroyHistory(oldHistory);\n * ```\n *\n * @category History Management\n * @param history - The history handle to destroy.\n * @throws Error if the handle doesn't refer to a valid history.\n */\n destroyHistory(history: HistoryId): void;\n /**\n * Set a history as the active undo/redo stack.\n *\n * All other histories lose their active state. Undo/redo operations only apply to the active history.\n *\n * ```javascript\n * engine.editor.setActiveHistory(newHistory);\n * ```\n *\n * @category History Management\n * @param history - The history handle to make active.\n * @throws Error if the handle doesn't refer to a valid history.\n */\n setActiveHistory(history: HistoryId): void;\n /**\n * Get the currently active history handle.\n *\n * Creates a new history if none exists.\n *\n * ```javascript\n * const oldHistory = engine.editor.getActiveHistory();\n * ```\n *\n * @category History Management\n * @returns The handle of the active history.\n */\n getActiveHistory(): HistoryId;\n /**\n * Add a new history state to the undo stack.\n *\n * Only adds a state if undoable changes were made since the last undo step.\n *\n * ```javascript\n * engine.editor.addUndoStep();\n * ```\n *\n * @category History Management\n */\n addUndoStep(): void;\n /**\n * Remove the last history state from the undo stack.\n *\n * Removes the most recent undo step if available.\n *\n * ```javascript\n * engine.editor.removeUndoStep();\n * ```\n *\n * @category History Management\n */\n removeUndoStep(): void;\n /**\n * Undo one step in the active history if an undo step is available.\n *\n * ```javascript\n * engine.editor.undo();\n * ```\n *\n * @category History Management\n */\n undo(): void;\n /**\n * Redo one step in the active history if a redo step is available.\n *\n * ```javascript\n * engine.editor.redo();\n * ```\n *\n * @category History Management\n */\n redo(): void;\n /**\n * Check if an undo step is available.\n *\n * ```javascript\n * if (engine.editor.canUndo()) {\n * engine.editor.undo();\n * }\n * ```\n *\n * @category History Management\n * @returns True if an undo step is available.\n */\n canUndo(): boolean;\n /**\n * Check if a redo step is available.\n *\n * ```javascript\n * if (engine.editor.canRedo()) {\n * engine.editor.redo();\n * }\n * ```\n *\n * @category History Management\n * @returns True if a redo step is available.\n */\n canRedo(): boolean;\n /**\n * Subscribe to undo/redo history changes.\n *\n * @deprecated Use {@link onHistoryUpdatedWithKind} instead, which additionally reports a {@link HistoryUpdate}\n * describing the kind of update.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the undo/redo history changes.\n * @returns A method to unsubscribe from the event.\n */\n onHistoryUpdated: (callback: () => void) => (() => void);\n /**\n * Subscribe to undo/redo history changes.\n *\n * The callback receives a {@link HistoryUpdate} describing what kind of update happened so consumers can\n * distinguish a real change to the active history's snapshots (e.g. an edit, undo, or redo) from a pure activation\n * via `setActiveHistory`.\n *\n * ```javascript\n * const unsubscribe = engine.editor.onHistoryUpdatedWithKind((kind) => {\n * if (kind === 'Activated') {\n * // The active history was switched; no scene change happened on this event.\n * return;\n * }\n * const canUndo = engine.editor.canUndo();\n * const canRedo = engine.editor.canRedo();\n * console.log('History updated', { canUndo, canRedo });\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - Function called when the undo/redo history changes. The argument describes the kind of update.\n * @returns A method to unsubscribe from the event.\n */\n onHistoryUpdatedWithKind: (callback: (kind: HistoryUpdate) => void) => (() => void);\n /**\n * Subscribe to editor settings changes.\n *\n * @category Event Subscriptions\n * @param callback - Function called when editor settings change.\n * @returns A method to unsubscribe from the event.\n */\n onSettingsChanged: (callback: () => void) => (() => void);\n /**\n * Subscribe to editor role changes.\n *\n * Allows reacting to role changes and updating engine settings accordingly.\n * The callback is triggered immediately after role changes and default settings are applied.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the user role changes.\n * @returns A method to unsubscribe from the event.\n */\n onRoleChanged: (callback: (role: RoleString) => void) => (() => void);\n /**\n * Set a setting value using the unified API.\n * The value type is automatically validated based on the key.\n *\n * @category Editor Settings\n * @param keypath - The setting key from Settings\n * @param value - The value to set (type-safe based on key)\n * @throws Error if the keypath is invalid or value type doesn't match\n *\n * @example\n * ```typescript\n * // Boolean setting\n * engine.editor.setSetting('doubleClickToCropEnabled', false);\n *\n * // Color setting\n * engine.editor.setSetting('highlightColor', { r: 1, g: 0, b: 1, a: 1 });\n *\n * // Enum setting\n * engine.editor.setSetting('doubleClickSelectionMode', 'Direct');\n * ```\n */\n setSetting<K extends SettingKey>(keypath: OptionalPrefix<K>, value: SettingValueType<K>): void;\n /**\n * Get a setting value using the unified API.\n * The return type is automatically inferred from the key.\n *\n * @category Editor Settings\n * @param keypath - The setting key from Settings\n * @returns The value of the setting (type-safe based on key)\n * @throws Error if the keypath is invalid\n *\n * @example\n * ```typescript\n * // Boolean setting\n * const cropEnabled = engine.editor.getSetting('doubleClickToCropEnabled');\n *\n * // Color setting\n * const highlight = engine.editor.getSetting('highlightColor');\n *\n * // Enum setting\n * const selectionMode = engine.editor.getSetting('doubleClickSelectionMode');\n * ```\n */\n getSetting<K extends SettingKey>(keypath: OptionalPrefix<K>): SettingValueType<K>;\n\n\n\n /**\n * Set a boolean setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickToCropEnabled`.\n * @param value - The boolean value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingBool(keypath: SettingsBool, value: boolean): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingBool(keypath: `ubq://${SettingsBool}`, value: boolean): void;\n /**\n * Get a boolean setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickToCropEnabled`.\n * @returns The boolean value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingBool(keypath: SettingsBool): boolean;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingBool(keypath: `ubq://${SettingsBool}`): boolean;\n getSettingBool(keypath: SettingBoolPropertyName): boolean;\n /**\n * Set an integer setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath.\n * @param value - The integer value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingInt(keypath: SettingsInt, value: number): void;\n setSettingInt(keypath: SettingIntPropertyName, value: number): void;\n /**\n * Get an integer setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath.\n * @returns The integer value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingInt(keypath: SettingsInt): number;\n getSettingInt(keypath: SettingIntPropertyName): number;\n /**\n * Set a float setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `positionSnappingThreshold`.\n * @param value - The float value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingFloat(keypath: SettingsFloat, value: number): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingFloat(keypath: `ubq://${SettingsFloat}`, value: number): void;\n setSettingFloat(keypath: SettingFloatPropertyName, value: number): void;\n /**\n * Get a float setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `positionSnappingThreshold`.\n * @returns The float value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingFloat(keypath: SettingsFloat): number;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingFloat(keypath: `ubq://${SettingsFloat}`): number;\n getSettingFloat(keypath: SettingFloatPropertyName): number;\n /**\n * Set a string setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `license`.\n * @param value - The string value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingString(keypath: SettingsString, value: string): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingString(keypath: `ubq://${SettingsString}`, value: string): void;\n setSettingString(keypath: SettingStringPropertyName, value: string): void;\n /**\n * Get a string setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `license`.\n * @returns The string value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingString(keypath: SettingsString): string;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingString(keypath: `ubq://${SettingsString}`): string;\n getSettingString(keypath: SettingStringPropertyName): string;\n /**\n * Set a color setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @param value - The The value to set.\n */\n setSettingColor(keypath: SettingsColor, value: Color): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingColor(keypath: `ubq://${SettingsColor}`, value: Color): void;\n setSettingColor(keypath: SettingColorPropertyName, value: Color): void;\n /**\n * Get a color setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @throws An error, if the keypath is invalid.\n */\n getSettingColor(keypath: SettingsColor): Color;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingColor(keypath: `ubq://${SettingsColor}`): Color;\n getSettingColor(keypath: SettingColorPropertyName): Color;\n /**\n * Set a color setting.\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setSettingColor() instead.\n */\n setSettingColorRGBA(keypath: SettingsColorRGBA | `ubq://${SettingsColorRGBA}`, r: number, g: number, b: number, a?: number): void;\n /**\n * Get a color setting.\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @returns A tuple of channels red, green, blue and alpha in the range of 0 to 1.\n * @deprecated Use getSettingColor() instead.\n */\n getSettingColorRGBA(keypath: SettingsColorRGBA | `ubq://${SettingsColorRGBA}`): RGBA;\n /**\n * Set an enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @param value - The enum value as string.\n */\n setSettingEnum<T extends keyof SettingEnumType>(keypath: T, value: SettingEnumType[T]): void;\n setSettingEnum(keypath: string, value: string): void;\n /**\n * Get an enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The value as string.\n */\n getSettingEnum<T extends keyof SettingEnumType>(keypath: T): SettingEnumType[T];\n getSettingEnum(keypath: string): string;\n /**\n * Get the possible enum options for a given enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The possible enum options as strings.\n */\n getSettingEnumOptions<T extends keyof SettingEnumType>(keypath: T): SettingEnumType[T][];\n getSettingEnumOptions(keypath: string): string[];\n /**\n * Set the user role and apply role-dependent defaults.\n *\n * Automatically configures scopes and settings based on the specified role.\n *\n * @category Role & Scope Management\n * @param role - The role to assign to the user.\n */\n setRole(role: RoleString): void;\n /**\n * Get the current user role.\n *\n * @category Role & Scope Management\n * @returns The current role of the user.\n */\n getRole(): RoleString;\n /**\n * Returns a list of all the settings available.\n * @category Editor Settings\n * @returns A list of settings keypaths.\n */\n findAllSettings(): string[];\n /**\n * Returns the type of a setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The setting type.\n */\n getSettingType(keypath: string): SettingType;\n /**\n * Get the currently available memory.\n *\n * @category System Information\n * @returns The available memory in bytes.\n */\n getAvailableMemory(): number;\n /**\n * Get the engine's current memory usage.\n *\n * @category System Information\n * @returns The current memory usage in bytes.\n */\n getUsedMemory(): number;\n /**\n * Get the maximum export size limit for the current device.\n *\n * Exports are only possible when both width and height are below this limit.\n * Note that exports may still fail due to other constraints like memory.\n *\n * @category System Information\n * @returns The upper export size limit in pixels, or maximum 32-bit integer if unlimited.\n */\n getMaxExportSize(): number;\n /**\n * Sets a custom URI resolver.\n *\n * This function can be called more than once. Subsequent calls will overwrite previous calls.\n * To remove a previously set resolver, pass the value `null`.\n * The given function must return an absolute path with a scheme and cannot be asynchronous. The input is allowed to be an invalid URI, e.g., due to placeholders.\n *\n * ```javascript\n * // Replace all .jpg files with the IMG.LY logo\n * engine.editor.setURIResolver((uri) => {\n * if (uri.endsWith('.jpg')) {\n * return 'https://img.ly/static/ubq_samples/imgly_logo.jpg';\n * }\n * // Make use of the default URI resolution behavior.\n * return engine.editor.defaultURIResolver(uri);\n * });\n * ```\n *\n * @category Editor Settings\n * @param resolver - Custom resolution function. The resolution function\n * should not reference variables outside of its scope.\n * It receives the default URI resolver as its second argument\n */\n setURIResolver(resolver: SyncURIResolver): void;\n /**\n * Sets a custom async URI resolver.\n *\n * This function can be called more than once. Subsequent calls will overwrite previous calls.\n * To remove a previously set resolver, pass the value `null`.\n * The given function must return an absolute path with a scheme. The input is allowed to be invalid URI, e.g., due\n * to placeholders.\n *\n * @category Editor Settings\n * @param resolver - Custom async resolution function.\n */\n setURIResolverAsync(resolver: AsyncURIResolver | null): void;\n\n\n /**\n * This is the default implementation for the URI resolver.\n *\n * It resolves the given path relative to the `basePath` setting.\n *\n * ```javascript\n * engine.editor.defaultURIResolver(uri);\n * ```\n *\n * @category Editor Settings\n * @param relativePath - The relative path that should be resolved.\n * @returns The resolved absolute URI.\n */\n defaultURIResolver(relativePath: string): string;\n /**\n * Resolves the given path asynchronously.\n *\n * If a custom resolver has been set with `setURIResolverAsync` (or `setURIResolver`), it invokes it with the given\n * path. Else, it resolves it as relative to the `basePath` setting.\n * This performs NO validation of whether a file exists at the specified location.\n *\n * **Breaking change:** This method now returns a `Promise<string>` instead\n * of a plain `string`. Callers must `await` the result.\n *\n * @category Editor Settings\n * @param relativePath - A relative path string\n * @returns Promise resolving to the resolved absolute uri or rejecting if an invalid path was given.\n */\n getAbsoluteURI(relativePath: string): Promise<string>;\n /**\n * Get all available global scope names.\n *\n * @category Role & Scope Management\n * @returns The names of all available global scopes.\n */\n findAllScopes(): Scope[];\n /**\n * Set a global scope permission level.\n *\n * @category Role & Scope Management\n * @param key - The scope to configure.\n * @param value - `Allow` always allows, `Deny` always denies, `Defer` defers to block-level.\n */\n setGlobalScope(key: Scope, value: 'Allow' | 'Deny' | 'Defer'): void;\n /**\n * Get a global scope's permission level.\n *\n * @category Role & Scope Management\n * @param key - The scope to query.\n * @returns `Allow`, `Deny`, or `Defer` indicating the scope's permission level.\n */\n getGlobalScope(key: Scope): 'Allow' | 'Deny' | 'Defer';\n /**\n * Get all spot color names currently defined.\n *\n * @category Color Management\n * @returns The names of all defined spot colors.\n */\n findAllSpotColors(): string[];\n /**\n * Queries the RGB representation set for a spot color.\n *\n * If the value of the queried spot color has not been set yet, returns the default RGB representation (of magenta).\n * The alpha value is always 1.0.\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns A result holding a float array of the four color components.\n */\n getSpotColorRGBA(name: string): RGBA;\n /**\n * Queries the CMYK representation set for a spot color.\n *\n * If the value of the queried spot color has not been set yet, returns the default CMYK representation (of magenta).\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns A result holding a float array of the four color components.\n */\n getSpotColorCMYK(name: string): CMYK;\n /**\n * Sets the RGB representation of a spot color.\n *\n * Use this function to both create a new spot color or update an existing spot color.\n * @category Color Management\n * @param name - The name of a spot color.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n */\n setSpotColorRGB(name: string, r: number, g: number, b: number): void;\n /**\n * Sets the CMYK representation of a spot color.\n *\n * Use this function to both create a new spot color or update an existing spot color.\n * @category Color Management\n * @param name - The name of a spot color.\n * @param c - The cyan color component in the range of 0 to 1.\n * @param m - The magenta color component in the range of 0 to 1.\n * @param y - The yellow color component in the range of 0 to 1.\n * @param k - The key color component in the range of 0 to 1.\n */\n setSpotColorCMYK(name: string, c: number, m: number, y: number, k: number): void;\n /**\n * Removes a spot color from the list of set spot colors.\n *\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns An empty result on success, an error otherwise.\n */\n removeSpotColor(name: string): void;\n /**\n * Set the spot color assign to a cutout type.\n *\n * All cutout blocks of the given type will be immediately assigned that spot color.\n * @category Color Management\n * @param type - The cutout type.\n * @param color - The spot color name to assign.\n */\n setSpotColorForCutoutType(type: CutoutType, color: string): void;\n /**\n * Get the name of the spot color assigned to a cutout type.\n * @category Color Management\n * @param type - The cutout type.\n * @returns The color spot name.\n */\n getSpotColorForCutoutType(type: CutoutType): string;\n /**\n * Converts a color to the given color space.\n * @category Color Management\n * @param color - The color to convert.\n * @param colorSpace - The color space to convert to.\n * @returns The converted color.\n */\n convertColorToColorSpace(color: Color, colorSpace: 'sRGB'): RGBAColor;\n /** */\n convertColorToColorSpace(color: Color, colorSpace: 'CMYK'): CMYKColor;\n /** */\n convertColorToColorSpace(color: Color, colorSpace: ColorSpace): never;\n /**\n * Create a resizable buffer for arbitrary data.\n *\n * ```javascript\n * const buffer = engine.editor.createBuffer();\n *\n * // Reference the buffer resource from the audio block\n * engine.block.setString(audioBlock, 'audio/fileURI', buffer);\n * ```\n *\n * @category Resource Management\n * @returns A URI to identify the created buffer.\n */\n createBuffer(): string;\n /**\n * Destroy a buffer and free its resources.\n *\n * ```javascript\n * engine.editor.destroyBuffer(buffer);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to destroy.\n */\n destroyBuffer(uri: string): void;\n /**\n * Set the data of a buffer at a given offset.\n *\n * ```javascript\n * // Generate 10 seconds of stereo 48 kHz audio data\n * const samples = new Float32Array(10 * 2 * 48000);\n * for (let i = 0; i < samples.length; i += 2) {\n * samples[i] = samples[i + 1] = Math.sin((440 * i * Math.PI) / 48000);\n * }\n * // Assign the audio data to the buffer\n * engine.editor.setBufferData(buffer, 0, new Uint8Array(samples.buffer));\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to update.\n * @param offset - The offset in bytes at which to start writing.\n * @param data - The data to write.\n */\n setBufferData(uri: string, offset: number, data: Uint8Array): void;\n /**\n * Get the data of a buffer at a given offset.\n *\n * ```javascript\n * engine.editor.findAllTransientResources().forEach((resource) => {\n * const bufferURI = resource.URL;\n * const length = engine.editor.getBufferLength(buffer);\n * const data = engine.editor.getBufferData(buffer, 0, length);\n * const blob = new Blob([data]);\n * })\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to query.\n * @param offset - The offset in bytes at which to start reading.\n * @param length - The number of bytes to read.\n * @returns The data at the given offset.\n */\n getBufferData(uri: string, offset: number, length: number): Uint8Array;\n /**\n * Set the length of a buffer.\n *\n * ```javascript\n * // Reduce the buffer to half its length\n * const currentLength = engine.editor.getBufferLength(buffer);\n * engine.editor.setBufferLength(buffer, currentLength / 2);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to update.\n * @param length - The new length of the buffer in bytes.\n */\n setBufferLength(uri: string, length: number): void;\n /**\n * Get the length of a buffer.\n *\n * ```javascript\n * const length = engine.editor.getBufferLength(buffer);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to query.\n * @returns The length of the buffer in bytes.\n */\n getBufferLength(uri: string): number;\n\n\n /**\n * Get the MIME type of a resource.\n *\n * Downloads the resource if not already cached.\n *\n * @category Resource Management\n * @param uri - The URI of the resource.\n * @returns Promise resolving to the resource's MIME type.\n * @throws Error if the resource cannot be downloaded or MIME type determined.\n */\n getMimeType(uri: string): Promise<string>;\n /**\n * Gets the font metrics for a given font file URI.\n *\n * If the font is not yet loaded, it will be fetched asynchronously.\n * The returned metrics are in the font's design units coordinate space.\n *\n * ```javascript\n * const metrics = await engine.editor.getFontMetrics('/extensions/ly.img.cesdk.fonts/fonts/Roboto/Roboto-Regular.ttf');\n * console.log(metrics.ascender, metrics.descender, metrics.unitsPerEm);\n * console.log(metrics.lineGap);\n * console.log(metrics.capHeight, metrics.xHeight);\n * console.log(metrics.underlineOffset, metrics.underlineSize, metrics.strikeoutOffset, metrics.strikeoutSize);\n * ```\n *\n * @category Resource Management\n * @param fontFileUri - The URI of the font file to get metrics from.\n * @returns A promise resolving to the font metrics.\n */\n getFontMetrics(fontFileUri: string): Promise<FontMetrics>;\n /**\n * Get all transient resources that would be lost during export.\n *\n * Useful for identifying resources that need relocation (e.g., to a CDN) before export,\n * as these resources are not included in the exported scene.\n *\n * @category Resource Management\n * @returns The URLs and sizes of transient resources.\n */\n findAllTransientResources(): TransientResource[];\n /**\n * Get all media URIs referenced by blocks in the scene.\n *\n * Returns URIs from image fills, video fills, and audio blocks, including their source sets.\n * Only returns valid media URIs (http://, https://, file://), excluding transient resources\n * like buffer URIs. Useful for determining which media files are referenced by a scene\n * (e.g., for cleanup operations, CDN management, or file system tracking).\n *\n * @category Resource Management\n * @returns The URLs of all media resources referenced in the scene, deduplicated.\n */\n findAllMediaURIs(): string[];\n /**\n * Provides the data of a resource at the given URL.\n *\n * @category Resource Management\n * @param uri - The URL of the resource.\n * @param chunkSize - The size of the chunks in which the resource data is provided.\n * @param onData - The callback function that is called with the resource data or an error if an error occurred.\n * The callback will be called as long as there is data left to provide and the callback returns `true`.\n */\n getResourceData(uri: string, chunkSize: number, onData: (result: Uint8Array) => boolean): void;\n /**\n * Changes the URL associated with a resource.\n *\n * This function can be used change the URL of a resource that has been relocated (e.g., to a CDN).\n * @category Resource Management\n * @param currentUrl - The current URL of the resource.\n * @param relocatedUrl - The new URL of the resource.\n */\n relocateResource(currentUrl: string, relocatedUrl: string): void;\n /**\n * Checks wether the block has selection and hover highlighting enabled or disabled.\n *\n * ```javascript\n * const highlightingIsEnabled = engine.editor.isHighlightingEnabled(block);\n * ```\n *\n * @param id - The block to query.\n * @returns True if highlighting is enabled, false otherwise.\n */\n isHighlightingEnabled(id: DesignBlockId): boolean;\n /**\n * Enable or disable selection and hover highlighting for a block.\n *\n * ```javascript\n * engine.editor.setHighlightingEnabled(block, true);\n * ```\n *\n * @param id - The block to update.\n * @param enabled - Whether or not the block should show highlighting when selected or hovered.\n */\n setHighlightingEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Set global safe area insets for UI overlays.\n *\n * Safe area insets define UI-safe regions by specifying padding from screen edges.\n * These insets are automatically applied to all camera operations (zoom, pan, clamping)\n * to ensure important content remains visible when UI elements overlap the viewport edges.\n * Set to zero to disable (default state).\n *\n * @param insets - The inset values in CSS pixels (device-independent)\n * @public\n * @category Viewport\n */\n setSafeAreaInsets(insets: {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n }): void;\n /**\n * Get the current global safe area insets configuration.\n *\n * @returns The current inset values in CSS pixels (device-independent)\n * @public\n * @category Viewport\n */\n getSafeAreaInsets(): {\n left: number;\n top: number;\n right: number;\n bottom: number;\n };\n /**\n * Checks whether the block can currently be selected.\n *\n * ```javascript\n * const selectionIsEnabled = engine.editor.isSelectionEnabled(block);\n * ```\n *\n * @param id - The block to query.\n * @returns True if selection is enabled, false otherwise.\n */\n isSelectionEnabled(id: DesignBlockId): boolean;\n /**\n * Enable or disable selection for a block.\n *\n * ```javascript\n * engine.editor.setSelectionEnabled(block, true);\n * ```\n *\n * @param id - The block to update.\n * @param enabled - Whether the block should be selectable.\n */\n setSelectionEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Set one or more rules that limit how far blocks can be positioned outside their\n * parent page during user interactions (drag, resize, touch gestures, crop).\n * Programmatic API calls are not affected.\n *\n * `overshoot` is a non-negative fraction of the moved block's own size: `0`\n * pins blocks fully inside the page, `0.3` allows 30% to extend past the page\n * bounds. Each rule's scope is determined by its keys:\n * - `{ overshoot }` — scene-wide default for every page in the scene.\n * - `{ overshoot, block }` — applies to a specific block. Pages are blocks, so\n * setting this on a page acts as the default for blocks inside that page.\n * - `{ overshoot, blockType }` — applies to every block of the given type\n * (e.g. `\"text\"` or `\"//ly.img.ubq/text\"`).\n *\n * Use `removeMovementConstraint` to clear a rule.\n *\n * When multiple rules match a block, the most specific one wins:\n * block \\> parent page \\> blockType \\> scene-wide.\n *\n * @param rules - A single rule or an array of rules to apply.\n */\n setMovementConstraint(rules: MovementConstraintRule | MovementConstraintRule[]): void;\n /**\n * Get the effective movement constraint for a block, picking the most specific\n * matching rule: block \\> parent page \\> blockType \\> scene-wide.\n *\n * The returned `overshoot` is a fraction of the block's own size.\n *\n * @param id - The block to query.\n * @returns `{ overshoot }` with the effective value, or `null` if unconstrained.\n */\n getMovementConstraint(id: DesignBlockId): ResolvedMovementConstraint;\n /**\n * Remove previously set movement constraints.\n *\n * - No argument: removes the scene-wide default.\n * - `{ block }` / `{ blockType }` (or an array): removes the matching scope(s).\n *\n * Removing a scope falls through to the next tier on subsequent resolution.\n *\n * @param scopes - Scope or array of scopes to remove. Omit to remove the\n * scene-wide default.\n */\n removeMovementConstraint(scopes?: MovementConstraintScope | MovementConstraintScope[]): void;\n}\n\n/**\n * The shorthand block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * @public\n */\nexport declare const EFFECT_TYPES: readonly [\"adjustments\", \"cross_cut\", \"dot_pattern\", \"duotone_filter\", \"extrude_blur\", \"glow\", \"green_screen\", \"half_tone\", \"linocut\", \"liquid\", \"lut_filter\", \"mirror\", \"outliner\", \"pixelize\", \"posterize\", \"radial_pixel\", \"recolor\", \"sharpie\", \"shifter\", \"tilt_shift\", \"tv_glitch\", \"vignette\"];\n\n/**\n * The block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * Refer to {@link EffectTypeShorthand} and {@link EffectTypeLonghand} for more details.\n * @public\n */\nexport declare type EffectType = EffectTypeShorthand | EffectTypeLonghand;\n\n/**\n * The longhand block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * @public\n */\nexport declare type EffectTypeLonghand = `//ly.img.ubq/effect/${EffectTypeShorthand}`;\n\n/** @public */\nexport declare type EffectTypeShorthand = (typeof EFFECT_TYPES)[number];\n\n/**\n * Represents an engine plugin.\n *\n * Defines the structure of an engine plugin, including its name, version, and initialization function.\n * - 'name': The name of the plugin.\n * - 'version': The version of the plugin.\n * - 'initialize': The function to initialize the plugin with the provided context. Can be synchronous or asynchronous.\n *\n * @public\n */\nexport declare interface EnginePlugin {\n name: string;\n version: string;\n initialize: (context: EnginePluginContext) => void | Promise<void>;\n}\n\n/**\n * Represents the context for an engine plugin.\n *\n * Defines the context provided to an engine plugin, including APIs for assets, blocks, scenes, editor, events, and variables.\n * - 'engine': The engine instance containing APIs for asset, block, scene, editor, event, and variable management.\n *\n * @public\n */\nexport declare type EnginePluginContext = {\n engine: CreativeEngine;\n};\n\n/** @public */\nexport declare type EnumPropertyName = 'blend/mode' | 'contentFill/mode' | 'height/mode' | 'position/x/mode' | 'position/y/mode' | 'scene/designUnit' | 'scene/layout' | 'scene/mode' | 'width/mode' | 'page/guides/source' | 'stroke/cornerGeometry' | 'stroke/position' | 'stroke/style' | 'text/horizontalAlignment' | 'text/verticalAlignment' | 'cutout/type' | 'caption/horizontalAlignment' | 'caption/verticalAlignment' | 'animationEasing' | 'textAnimationWritingStyle' | 'animation/grow/direction' | 'animation/wipe/direction' | 'animation/baseline/direction' | 'animation/spin/direction' | 'animation/spin_loop/direction' | 'animation/jump_loop/direction' | 'animation/typewriter_text/writingStyle' | 'animation/block_swipe_text/direction' | 'animation/merge_text/direction' | 'animation/ken_burns/direction' | 'animation/scale_loop/direction' | 'fill/pixelStream/orientation' | 'shape/vector_path/fillRule' | (string & {});\n\n/** @public */\nexport declare type EnumValues = BlendMode | ContentFillMode | HeightMode | PageGuidesSource | PositionXMode | PositionYMode | SceneDesignUnit | SceneLayout | SceneMode | WidthMode | StrokeCap | StrokeCornerGeometry | StrokePosition | StrokeStyle | TextHorizontalAlignment | TextVerticalAlignment | CutoutType | CaptionHorizontalAlignment | CaptionVerticalAlignment | AnimationEasing | TextAnimationWritingStyle | AnimationGrowDirection | AnimationWipeDirection | AnimationBaselineDirection | AnimationSpinDirection | AnimationSpinLoopDirection | AnimationJumpLoopDirection | AnimationTypewriterTextWritingStyle | AnimationBlockSwipeTextDirection | AnimationMergeTextDirection | AnimationKenBurnsDirection | AnimationScaleLoopDirection | FillPixelStreamOrientation | ShapeVectorPathFillRule | (string & {});\n\n/**\n * @public Subscribe to block lifecycle events in the design engine.\n *\n * The EventAPI enables real-time monitoring of block changes through event subscriptions.\n * Events are bundled and delivered efficiently at the end of each engine update cycle.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to block lifecycle events with filtering and callback management.\n */\nexport declare class EventAPI {\n #private;\n\n /**\n * Subscribe to block lifecycle events.\n *\n * Events are bundled and delivered at the end of each engine update cycle for efficient processing.\n *\n * @category Event Subscriptions\n * @param blocks - List of blocks to filter events by. If empty, events for all blocks are sent.\n * @param callback - Function called with bundled events.\n * @returns A method to unsubscribe from the events.\n */\n subscribe: (blocks: DesignBlockId[], callback: (events: BlockEvent[]) => void) => (() => void);\n}\n\n/**\n * Represents the options for exporting a design block.\n *\n * Defines the possible options for exporting a design block.\n * - 'mimeType': The MIME type of the output file.\n * - 'pngCompressionLevel': The PNG compression level to use, when exporting to PNG.\n * - 'jpegQuality': The JPEG quality to use when encoding to JPEG.\n * - 'webpQuality': The WebP quality to use when encoding to WebP.\n * - 'targetWidth': An optional target width used in conjunction with target height.\n * - 'targetHeight': An optional target height used in conjunction with target width.\n * - 'exportPdfWithHighCompatibility': Export the PDF document with a higher compatibility to different PDF\n viewers.\n * - 'exportPdfWithUnderlayer': Export the PDF document with an underlayer.\n * - 'underlayerSpotColorName': The name of the spot color to be used for the underlayer's fill.\n * - 'underlayerOffset': The adjustment in size of the shape of the underlayer.\n * - 'underlayerRenderRatio': Resolution multiplier for the underlayer contour extraction.\n * - 'underlayerMaxError': Curve-fit error tolerance for the underlayer contour.\n * - 'abortSignal': An abort signal that can be used to cancel the export.\n *\n * @public\n */\nexport declare type ExportOptions = {\n /**\n * The MIME type of the output file.\n *\n * @defaultValue 'image/png'\n */\n mimeType?: ImageMimeType | Exclude<ApplicationMimeType, 'application/zip'>;\n /**\n * The PNG compression level to use, when exporting to PNG.\n *\n * Valid values are 0 to 9, higher means smaller, but slower.\n * Quality is not affected.\n * Ignored for other encodings.\n * @defaultValue 5.\n */\n pngCompressionLevel?: number;\n /**\n * The JPEG quality to use when encoding to JPEG.\n *\n * Valid values are (0-1], higher means better quality.\n * Ignored for other encodings.\n *\n * @defaultValue 0.9\n */\n jpegQuality?: number;\n /**\n * The WebP quality to use when encoding to WebP. Valid values are (0-1], higher means better quality.\n * WebP uses a special lossless encoding that usually produces smaller file sizes than PNG.\n * Ignored for other encodings. Defaults to 1.0.\n */\n webpQuality?: number;\n /**\n * An optional target width used in conjunction with target height.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetWidth?: number;\n /**\n * An optional target height used in conjunction with target width.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetHeight?: number;\n /**\n * Export the PDF document with a higher compatibility to different PDF viewers.\n * Bitmap images and some effects like gradients will be rasterized with the DPI\n * setting instead of embedding them directly.\n */\n exportPdfWithHighCompatibility?: boolean;\n /**\n * Export the PDF document with an underlayer.\n * An underlayer is generated by adding a graphics block behind the existing elements of the shape of the elements on\n * the page.\n */\n exportPdfWithUnderlayer?: boolean;\n /**\n * The name of the spot color to be used for the underlayer's fill.\n */\n underlayerSpotColorName?: string;\n /**\n * The adjustment in size of the shape of the underlayer.\n */\n underlayerOffset?: number;\n /**\n * Resolution multiplier for the raster pass that extracts the underlayer contour.\n * Higher values produce sharper underlayer outlines at the cost of memory and export time.\n * Useful for small text on large pages, where the 1.0 default can miss fine glyph details.\n * Values `<= 0` fall back to 1.0. `NaN` / `Infinity` are rejected at the binding boundary\n * with a `StructError`; pass a real number or leave the field undefined to use the default.\n *\n * @defaultValue 1.0\n */\n underlayerRenderRatio?: number;\n /**\n * Maximum acceptable curve-fit error, in pixels, when vectorising the underlayer contour.\n * Smaller values produce tighter fits at the cost of more path complexity.\n * Useful together with `underlayerRenderRatio` for small text on large pages.\n * Values `<= 0` fall back to 2.0. `NaN` / `Infinity` are rejected at the binding boundary\n * with a `StructError`; pass a real number or leave the field undefined to use the default.\n *\n * @defaultValue 2.0\n */\n underlayerMaxError?: number;\n /**\n * If true, the export will include text bounding boxes that account for glyph overhangs.\n * When enabled, text blocks with glyphs that extend beyond their frame (e.g., decorative fonts with swashes)\n * will be exported with the full glyph bounds visible, preventing text clipping.\n *\n * @defaultValue false\n */\n allowTextOverhang?: boolean;\n /**\n * Export CMYK colors using their native color spaces in the PDF.\n * When enabled, direct CMYK colors are written as DeviceCMYK (k/K operators) and spot colors with CMYK values\n * (set via setSpotColorCMYK) are written as DeviceN with process CMYK components.\n * When disabled (default), all colors are exported as DeviceRGB.\n *\n * @defaultValue false\n */\n exportPdfWithDeviceCMYK?: boolean;\n /**\n * An abortsignal that can be used to cancel the export.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * The shorthand block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * @public\n */\nexport declare const FILL_TYPES: readonly [\"color\", \"gradient/linear\", \"gradient/radial\", \"gradient/conical\", \"image\", \"video\", \"pixelStream\"];\n\n/** @public */\nexport declare type FillPixelStreamOrientation = (typeof FillPixelStreamOrientationValues)[number];\n\n/** @public */\nexport declare const FillPixelStreamOrientationValues: readonly [\"Up\", \"Down\", \"Left\", \"Right\", \"UpMirrored\", \"DownMirrored\", \"LeftMirrored\", \"RightMirrored\"];\n\n/**\n * The block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * Refer to {@link FillTypeShorthand} and {@link FillTypeLonghand} for more details.\n * @public\n */\nexport declare type FillType = FillTypeShorthand | FillTypeLonghand;\n\n/**\n * The longhand block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * @public\n */\nexport declare type FillTypeLonghand = `//ly.img.ubq/fill/${FillTypeShorthand}`;\n\n/** @public */\nexport declare type FillTypeShorthand = (typeof FILL_TYPES)[number];\n\n/**\n * Represents a query for finding assets.\n *\n * The `FindAssetsQuery` interface provides a set of properties that describe a query for finding\n * assets, including the number of assets per page, the page number, the query string, the tags,\n * the groups, the excluded groups, the locale, the sorting order, the sort key, and whether to\n * sort active assets first.\n *\n * Methods for working with queries for finding assets.\n *\n * @public\n */\ndeclare interface FindAssetsQuery {\n perPage: number;\n page: number;\n query: string;\n tags: string[];\n groups: string[];\n excludeGroups: string[];\n locale: string;\n sortingOrder: SortingOrder;\n sortKey: string;\n sortActiveFirst: boolean;\n filter: AssetFilter[];\n}\n\n/**\n * Specifies the horizontal and vertical flip states of a design block.\n *\n * The `Flip` interface provides a set of properties that indicate whether the design block\n * is flipped horizontally or vertically.\n *\n * Methods for configuring the flip states of a design block.\n *\n * @public\n */\ndeclare interface Flip {\n horizontal: boolean;\n vertical: boolean;\n}\n\n/** @public */\nexport declare type FloatPropertyName = 'globalBoundingBox/height' | 'globalBoundingBox/width' | 'globalBoundingBox/x' | 'globalBoundingBox/y' | 'height' | 'lastFrame/height' | 'lastFrame/width' | 'lastFrame/x' | 'lastFrame/y' | 'position/x' | 'position/y' | 'rotation' | 'scene/dpi' | 'scene/pageDimensions/height' | 'scene/pageDimensions/width' | 'scene/pixelScaleFactor' | 'width' | 'camera/pixelRatio' | 'camera/resolution/height' | 'camera/resolution/width' | 'camera/zoomLevel' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'page/guides/gridSpacingX' | 'page/guides/gridSpacingY' | 'page/margin/bottom' | 'page/margin/left' | 'page/margin/right' | 'page/margin/top' | 'playback/speed' | 'playback/volume' | 'stroke/width' | 'opacity' | 'backgroundColor/cornerRadius' | 'backgroundColor/paddingBottom' | 'backgroundColor/paddingLeft' | 'backgroundColor/paddingRight' | 'backgroundColor/paddingTop' | 'text/fontSize' | 'text/letterSpacing' | 'text/lineHeight' | 'text/maxAutomaticFontSize' | 'text/minAutomaticFontSize' | 'text/paragraphSpacing' | 'cutout/offset' | 'cutout/smoothing' | 'caption/fontSize' | 'caption/letterSpacing' | 'caption/lineHeight' | 'caption/maxAutomaticFontSize' | 'caption/minAutomaticFontSize' | 'caption/paragraphSpacing' | 'animation/slide/direction' | 'textAnimationOverlap' | 'animation/pan/direction' | 'animation/pan/distance' | 'animation/blur/intensity' | 'animation/grow/scaleFactor' | 'animation/crop_zoom/scale' | 'animation/spin/intensity' | 'animation/blur_loop/intensity' | 'animation/pulsating_loop/intensity' | 'animation/breathing_loop/intensity' | 'animation/jump_loop/intensity' | 'animation/sway_loop/intensity' | 'animation/scale_loop/startScale' | 'animation/scale_loop/endScale' | 'animation/spread_text/intensity' | 'animation/merge_text/intensity' | 'animation/ken_burns/travelDistanceRatio' | 'animation/ken_burns/zoomIntensity' | 'blur/uniform/intensity' | 'blur/linear/blurRadius' | 'blur/linear/x1' | 'blur/linear/x2' | 'blur/linear/y1' | 'blur/linear/y2' | 'blur/mirrored/blurRadius' | 'blur/mirrored/gradientSize' | 'blur/mirrored/size' | 'blur/mirrored/x1' | 'blur/mirrored/x2' | 'blur/mirrored/y1' | 'blur/mirrored/y2' | 'blur/radial/blurRadius' | 'blur/radial/gradientRadius' | 'blur/radial/radius' | 'blur/radial/x' | 'blur/radial/y' | 'effect/adjustments/blacks' | 'effect/adjustments/brightness' | 'effect/adjustments/clarity' | 'effect/adjustments/contrast' | 'effect/adjustments/exposure' | 'effect/adjustments/gamma' | 'effect/adjustments/highlights' | 'effect/adjustments/saturation' | 'effect/adjustments/shadows' | 'effect/adjustments/sharpness' | 'effect/adjustments/temperature' | 'effect/adjustments/whites' | 'effect/cross_cut/offset' | 'effect/cross_cut/slices' | 'effect/cross_cut/speedV' | 'effect/cross_cut/time' | 'effect/dot_pattern/blur' | 'effect/dot_pattern/dots' | 'effect/dot_pattern/size' | 'effect/duotone_filter/intensity' | 'effect/extrude_blur/amount' | 'effect/glow/amount' | 'effect/glow/darkness' | 'effect/glow/size' | 'effect/green_screen/colorMatch' | 'effect/green_screen/smoothness' | 'effect/green_screen/spill' | 'effect/half_tone/angle' | 'effect/half_tone/scale' | 'effect/linocut/scale' | 'effect/liquid/amount' | 'effect/liquid/scale' | 'effect/liquid/time' | 'effect/lut_filter/intensity' | 'effect/outliner/amount' | 'effect/outliner/passthrough' | 'effect/posterize/levels' | 'effect/radial_pixel/radius' | 'effect/radial_pixel/segments' | 'effect/recolor/brightnessMatch' | 'effect/recolor/colorMatch' | 'effect/recolor/smoothness' | 'effect/shifter/amount' | 'effect/shifter/angle' | 'effect/tilt_shift/amount' | 'effect/tilt_shift/position' | 'effect/tv_glitch/distortion' | 'effect/tv_glitch/distortion2' | 'effect/tv_glitch/rollSpeed' | 'effect/tv_glitch/speed' | 'effect/vignette/darkness' | 'effect/vignette/offset' | 'fill/gradient/linear/endPointX' | 'fill/gradient/linear/endPointY' | 'fill/gradient/linear/startPointX' | 'fill/gradient/linear/startPointY' | 'fill/gradient/radial/centerPointX' | 'fill/gradient/radial/centerPointY' | 'fill/gradient/radial/radius' | 'fill/gradient/conical/centerPointX' | 'fill/gradient/conical/centerPointY' | 'shape/rect/cornerRadiusBL' | 'shape/rect/cornerRadiusBR' | 'shape/rect/cornerRadiusTL' | 'shape/rect/cornerRadiusTR' | 'shape/polygon/cornerRadius' | 'shape/star/innerDiameter' | 'shape/vector_path/cornerRadius' | 'shape/vector_path/height' | 'shape/vector_path/width' | (string & {});\n\n/**\n * Individual font within a typeface. Field optionality matches `@cesdk/engine`\n * (WASM) — fields not present in the engine response are simply omitted\n * rather than empty strings.\n */\nexport declare interface Font {\n uri: string;\n subFamily?: string;\n weight?: FontWeight;\n style?: FontStyle;\n}\n\n/**\n * Font metrics extracted from a font file.\n * Values are in the font's design units coordinate space.\n * @public\n */\nexport declare interface FontMetrics {\n /** The ascender value in font design units. */\n ascender: number;\n /** The descender value in font design units (typically negative). */\n descender: number;\n /** The number of units per em square (typically 1000 or 2048). */\n unitsPerEm: number;\n /** The OS/2 sTypoLineGap value in font design units. */\n lineGap: number;\n /** The OS/2 sCapHeight value in font design units. */\n capHeight: number;\n /** The OS/2 sxHeight value in font design units. */\n xHeight: number;\n /** The post.underlinePosition value in font design units (typically negative). */\n underlineOffset: number;\n /** The post.underlineThickness value in font design units. */\n underlineSize: number;\n /** The OS/2 yStrikeoutPosition value in font design units. */\n strikeoutOffset: number;\n /** The OS/2 yStrikeoutSize value in font design units. */\n strikeoutSize: number;\n}\n\n/**\n * Extended design unit type that includes Point for font size operations.\n * Maintains consistency with SceneDesignUnit's capitalized naming convention.\n * @public\n */\nexport declare type FontSizeUnit = SceneDesignUnit | 'Point';\n\n/** Allowed font styles. Mirrors the WASM `FontStyle` union. */\nexport declare type FontStyle = 'normal' | 'italic';\n\n/**\n * Allowed font weights. Mirrors the `@cesdk/engine` (WASM) `FontWeight`\n * union so a single `Font` is interchangeable across bindings.\n */\nexport declare type FontWeight = 'thin' | 'extraLight' | 'light' | 'normal' | 'medium' | 'semiBold' | 'bold' | 'extraBold' | 'heavy';\n\n/**\n * Represents a gradient color stop.\n *\n * Defines a gradient color stop with a color and a stop position.\n * - 'color': The color value.\n * - 'stop': The relative position of the color within the gradient in the range [0, 1].\n *\n * @public\n */\nexport declare interface GradientColorStop {\n /** A color value within a gradient. */\n color: Color;\n /** The relative position of the color within the gradient in the range [0, 1]. */\n stop: number;\n}\n\n/**\n * Represents a gradient stop in the RGBA color space.\n *\n * The `GradientstopRGBA` type is a tuple that contains five numbers representing the stop\n * position and the red, green, blue, and alpha components of the color.\n *\n * @categoryDescription GradientstopRGBA\n * Methods for working with gradient stops in the RGBA color space.\n *\n * @public\n */\nexport declare type GradientstopRGBA = [\nstop: number,\nr: number,\ng: number,\nb: number,\na: number\n];\n\n/** @public */\nexport declare type HeightMode = (typeof HeightModeValues)[number];\n\n/** @public */\nexport declare const HeightModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Represents a hexadecimal color value (RGB or RGBA) that starts with a '#'.\n *\n * @categoryDescription Hex Color String\n * Defines a hexadecimal color value that starts with a '#'.\n * - '#6686FF': A hexadecimal color value for RGB.\n * - '#6686FFFF': A hexadecimal color value for RGBA.\n *\n * @public\n */\nexport declare type HexColorString = string;\n\n/**\n * A numerical identifier for a history stack\n * @public\n */\nexport declare type HistoryId = number;\n\n/**\n * Describes the kind of update that triggered an `onHistoryUpdatedWithKind` callback.\n *\n * - `Updated`: The active history's snapshots changed: a new snapshot was added (e.g. after an edit), or undo/redo\n * was applied. The scene state changed as a direct consequence.\n * - `Activated`: A different history buffer was activated via `setActiveHistory`. The undo/redo stack visible to the\n * user changed, but no new snapshot was created and no undo/redo was applied as part of this event.\n *\n * @public\n */\nexport declare type HistoryUpdate = 'Updated' | 'Activated';\n\n/** @public */\nexport declare type HorizontalBlockAlignment = TextHorizontalAlignment;\n\n/** @public */\nexport declare type HorizontalContentFillAlignment = (typeof HorizontalContentFillAlignmentValues)[number];\n\n/** @public */\nexport declare const HorizontalContentFillAlignmentValues: readonly [\"Left\", \"Center\", \"Right\"];\n\n/**\n * Represents the image MIME types used in the editor.\n *\n * @categoryDescription Image MIME Type\n * Defines the possible image MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n *\n * @public\n */\nexport declare type ImageMimeType = Extract<MimeType_2, 'image/png' | 'image/jpeg' | 'image/webp' | 'image/x-tga' | 'image/svg+xml'>;\n\n/** @public */\nexport declare type IntPropertyName = 'effect/lut_filter/horizontalTileCount' | 'effect/lut_filter/verticalTileCount' | 'effect/mirror/side' | 'effect/pixelize/horizontalPixelSize' | 'effect/pixelize/verticalPixelSize' | 'shape/polygon/sides' | 'shape/star/points' | (string & {});\n\n/**\n * Type guard for {@link CMYKColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for CMYKColor.\n *\n * @public\n */\nexport declare function isCMYKColor(color: Color): color is CMYKColor;\n\n/**\n * Type guard for {@link RGBAColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for RGBAColor.\n *\n * @public\n */\nexport declare function isRGBAColor(color: Color): color is RGBAColor;\n\n/**\n * Type guard for {@link SpotColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for SpotColor.\n *\n * @public\n */\nexport declare function isSpotColor(color: Color): color is SpotColor;\n\n/**\n * Represents the list style of a paragraph.\n *\n * @public\n */\nexport declare type ListStyle = 'None' | 'Unordered' | 'Ordered';\n\n/**\n * e.g. `en`, `de`, etc.\n * @public\n */\nexport declare type Locale = string;\n\n/**\n * Represents a logger function.\n *\n * The Logger interface defines the structure of a logger function within the Creative Editor SDK.\n * It includes a method for logging messages with an optional log level.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n */\nexport declare interface Logger {\n (message: string, level?: LogLevel): void;\n}\n\n/**\n * Provides logging functionality for the Creative Editor SDK.\n *\n * The `Logger` interface and associated types define a standardized way to log messages\n * at different severity levels within the SDK. This allows developers to track the\n * behavior of the editor, diagnose issues, and understand the flow of operations.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n */\nexport declare type LogLevel = 'Info' | 'Warning' | 'Error';\n\n/**\n * Provides a set of predefined log levels for the Creative Editor SDK.\n *\n * The `LogLevel` object contains constants representing different severity levels\n * for logging messages. These levels can be used to categorize log messages based\n * on their importance and urgency.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n * @deprecated Specifying log levels via `LogLevel.Info` has been deprecated.\n * Please use the desired LogLevel string directly.\n */\nexport declare const LogLevel: {\n readonly Info: \"Info\";\n readonly Warning: \"Warning\";\n readonly Error: \"Error\";\n};\n\n/**\n * Represents the MIME types used in the editor.\n *\n * @categoryDescription MIME Type\n * Defines the possible MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n * @deprecated Use the `MimeType` string literal types instead.\n */\ndeclare const MimeType_2: {\n readonly Png: \"image/png\";\n readonly Jpeg: \"image/jpeg\";\n readonly WebP: \"image/webp\";\n readonly Tga: \"image/x-tga\";\n readonly Svg: \"image/svg+xml\";\n readonly Wav: \"audio/wav\";\n readonly Mp4Audio: \"audio/mp4\";\n readonly Mp4: \"video/mp4\";\n readonly QuickTime: \"video/quicktime\";\n readonly Binary: \"application/octet-stream\";\n readonly Pdf: \"application/pdf\";\n readonly Zip: \"application/zip\";\n};\n\n/**\n * Represents the MIME types used in the editor.\n *\n * @categoryDescription MIME Type\n * Defines the possible MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n */\ndeclare type MimeType_2 = (typeof MimeType_2)[keyof typeof MimeType_2];\nexport { MimeType_2 as MimeType }\n\n/**\n * A movement constraint rule. The scope is determined by which key is present:\n * neither (scene-wide default), `block` (per-block, includes pages), or\n * `blockType` (per-block-type).\n *\n * `overshoot` is a non-negative fraction of the moved block's own size.\n */\ndeclare type MovementConstraintRule = {\n overshoot: number;\n} | {\n overshoot: number;\n block: DesignBlockId;\n} | {\n overshoot: number;\n blockType: string;\n};\n\n/**\n * A scope descriptor used to identify an existing movement constraint for\n * removal.\n */\ndeclare type MovementConstraintScope = {\n block: DesignBlockId;\n} | {\n blockType: string;\n};\n\n/**\n * The block type IDs for all blocks types in the Creative Engine. Those are the types that can be\n * passed to `cesdk.engine.block.findByType(type)` for example.\n * Refer to {@link ObjectTypeShorthand} and {@link ObjectTypeLonghand} for more details.\n * @public\n */\nexport declare type ObjectType = ObjectTypeShorthand | ObjectTypeLonghand;\n\n/**\n * The longhand block type IDs for all blocks types in the Creative Engine. Those are the Types returned by the\n * engine when calling `cesdk.engine.block.getType(blockId)` for example.\n * @public\n */\nexport declare type ObjectTypeLonghand = DesignBlockTypeLonghand | ShapeTypeLonghand | FillTypeLonghand | EffectTypeLonghand | BlurTypeLonghand | AnimationTypeLonghand;\n\n/**\n * The shorthand block type IDs for all blocks types in the Creative Engine. Those are the types that can be\n * passed to `cesdk.engine.block.findByType(type)` for example.\n * @public\n */\nexport declare type ObjectTypeShorthand = DesignBlockTypeShorthand | `shape/${ShapeTypeShorthand}` | `fill/${FillTypeShorthand}` | `effect/${EffectTypeShorthand}` | `blur/${BlurTypeShorthand}` | `animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport declare type OptionalPrefix<T extends string> = `ubq://${T}` | T;\n\n/** @public */\nexport declare interface PageDuration {\n pageId: DesignBlockId;\n duration: number;\n start: number;\n end: number;\n}\n\n/** @public */\nexport declare type PageGuidesSource = (typeof PageGuidesSourceValues)[number];\n\n/** @public */\nexport declare const PageGuidesSourceValues: readonly [\"Document\", \"Custom\"];\n\n/**\n * Represents a color definition for the custom color palette.\n *\n * @categoryDescription Palette Color\n * Defines a color definition for the custom color palette.\n * - 'HexColorString': A hexadecimal color value.\n * - 'RGBColor': An RGB color value.\n * - 'RGBAColor': An RGBA color value.\n * - 'SpotColor': A spot color value.\n *\n * @public\n */\nexport declare type PaletteColor = HexColorString | RGBColor | RGBAColor | SpotColor;\n\n/** @public */\nexport declare type PositionMode = PositionXMode | PositionYMode;\n\n/** @public */\nexport declare type PositionXMode = (typeof PositionXModeValues)[number];\n\n/** @public */\nexport declare const PositionXModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/** @public */\nexport declare type PositionYMode = (typeof PositionYModeValues)[number];\n\n/** @public */\nexport declare const PositionYModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Represents the various types of properties that can be associated with design blocks.\n * Each type corresponds to a different kind of data that can be used to define the properties\n * of a design block within the system.\n *\n * @categoryDescription Property Types\n * Defines the different types of properties that can be used to describe design blocks.\n *\n * @public\n */\nexport declare type PropertyType = 'Bool' | 'Int' | 'Float' | 'String' | 'Color' | 'Enum' | 'Struct' | 'Double' | 'SourceSet';\n\n/**\n * An open range.\n * @public\n * */\ndeclare interface Range_2 {\n /** The starting value of the range */\n from: number;\n /** The non-inclusive ending value of the range */\n to: number;\n}\nexport { Range_2 as Range }\n\n/**\n * The effective movement constraint for a block, or `null` when no constraint\n * applies.\n */\ndeclare type ResolvedMovementConstraint = {\n overshoot: number;\n} | null;\n\n/**\n * Represents a color in the RGBA color space.\n *\n * The `RGBA` type is a tuple that contains four numbers representing the red, green,\n * blue, and alpha components of the color.\n *\n * @categoryDescription RGBA\n * Methods for working with colors in the RGBA color space.\n *\n * @public\n */\nexport declare type RGBA = [r: number, g: number, b: number, a: number];\n\n/**\n * Represents an RGBA color value.\n *\n * Defines an RGBA color value with components between 0 and 1.\n * - 'r': The red component.\n * - 'g': The green component.\n * - 'b': The blue component.\n * - 'a': The alpha component.\n *\n * @public\n */\nexport declare interface RGBAColor {\n /** Red */\n r: number;\n /** Green */\n g: number;\n /** Blue */\n b: number;\n /** Alpha */\n a: number;\n}\n\n/**\n * Represents an RGB color value.\n *\n * Defines an RGB color value with components between 0 and 1.\n * - 'r': The red component.\n * - 'g': The green component.\n * - 'b': The blue component.\n *\n * @public\n */\nexport declare interface RGBColor {\n /** Red */\n r: number;\n /** Green */\n g: number;\n /** Blue */\n b: number;\n}\n\n/**\n * Represents a role string.\n *\n * The RoleString type defines the possible roles within the Creative Editor SDK.\n * Each role corresponds to a different level of access and permissions, allowing for flexibility in how users are managed.\n *\n * @categoryDescription Roles\n * Methods for managing roles within the editor.\n *\n * @public\n */\nexport declare type RoleString = 'Creator' | 'Adopter' | 'Viewer' | 'Presenter';\n\n/**\n * Options for saveSceneToString operation.\n * @public\n */\ndeclare interface SaveToStringOptions {\n /**\n * List of resource URL schemes that are allowed in the serialized scene.\n * Resources with other schemes will trigger the persistence callback.\n */\n resourceSchemesAllowed?: string[];\n /**\n * Optional callback for persisting resources with disallowed schemes.\n */\n persistenceCallback?: (url: string, dataHash: string, persistedCallback?: {\n invoke(url: string, persistedUrl: string): void;\n }) => void;\n /**\n * Compression options for the serialized scene.\n * When compression is enabled, base64 encoding is skipped and raw binary data is returned.\n */\n compression?: {\n /** Compression format (None = no compression, Zstd = zstd compression) */\n format?: CompressionFormat_2;\n /** Compression level (Fastest, Default, Best) */\n level?: CompressionLevel;\n };\n}\n\n/**\n * @public Create, load, save, and manipulate scenes.\n *\n * Scenes are the root element of every design hierarchy. Their children, stacks of pages, individual pages or other blocks, define the content of the design.\n * Scenes can be created from scratch, loaded from a file or URL, or created from an image or video. After manipulation, they can be saved to a string or an archive. This allows further processing in another editor instance, automated processing in scripts or sharing with other users.\n *\n * @categoryDescription Scene Loading\n * Load scenes from various sources including strings, URLs, and archives.\n *\n * @categoryDescription Scene Saving\n * Save and export scenes to different formats.\n *\n * @categoryDescription Scene Creation\n * Create new scenes from scratch or from media files.\n *\n * @categoryDescription Scene Properties\n * Get and set scene properties like design units and mode.\n *\n * @categoryDescription Template Operations\n * Apply templates to existing scenes.\n *\n * @categoryDescription Page Management\n * Manage pages within scenes and find elements.\n *\n * @categoryDescription Camera & Zoom\n * Control camera position, zoom levels, and auto-fit behavior.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to scene-related events and changes.\n *\n * @categoryDescription Experimental Features\n * Experimental features that may change or be removed in future versions.\n */\nexport declare class SceneAPI {\n #private;\n\n /**\n * Load the contents of a scene file.\n *\n * The string must be the binary contents of a scene file and is directly imported as blocks. Any existing scene is replaced by the new one.\n * This is useful for loading scenes that were saved with `saveToString` or scenes that were created in another editor instance.\n *\n * ```javascript\n * const sceneContent = await creativeEngine.scene.saveToString();\n * creativeEngine.scene.loadFromString(sceneContent);\n * ```\n *\n * @category Scene Loading\n * @param sceneContent - The scene file contents, a base64 string.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns A handle to the loaded scene.\n */\n loadFromString(sceneContent: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Load a scene from the URL to the scene file.\n *\n * The scene file will be fetched asynchronously by the engine and loaded into the engine once it is available. Any existing scene is replaced by the new one.\n *\n * ```javascript\n * const sceneURL = 'https://example.com/my-scene.json';\n * creativeEngine.scene.loadFromURL(sceneURL);\n * ```\n *\n * @category Scene Loading\n * @param url - The URL of the scene file.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns scene A promise that resolves once the scene was loaded or rejects with an error otherwise.\n */\n loadFromURL(url: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Load a previously archived scene from the URL to the scene file.\n *\n * The scene file will be fetched asynchronously by the engine. This requires continuous `render`\n * calls on this engines instance.\n *\n * @category Scene Loading\n * @param url - The URL of the scene archive file.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns scene A promise that resolves once the scene was loaded or rejects with an error otherwise.\n */\n loadFromArchiveURL(url: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Serializes the current scene into a string. Selection is discarded.\n *\n * @category Scene Saving\n * @param allowedResourceSchemes - The resource schemes to allow in the saved string.\n * @param onDisallowedResourceScheme - An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * @returns A promise that resolves with a string on success or an error on failure.\n * @deprecated Use saveToString(options) instead for better extensibility and to access compression features.\n */\n saveToString(allowedResourceSchemes: string[], onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>): Promise<string>;\n /**\n * Serializes the current scene into a string. Selection is discarded.\n *\n * @category Scene Saving\n * @param options - Save options containing:\n * - allowedResourceSchemes: The resource schemes to allow in the saved string. Defaults to ['blob', 'bundle', 'file', 'http', 'https', 'opfs'].\n * - onDisallowedResourceScheme: An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * - compression: Optional compression settings containing:\n * - format: Compression format (None or Zstd). Defaults to None.\n * - level: Compression level (Fastest, Default, or Best). Defaults to Default.\n * @returns A promise that resolves with a string on success or an error on failure.\n */\n saveToString(options?: {\n allowedResourceSchemes?: string[];\n onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>;\n compression?: {\n format?: CompressionFormat_2;\n level?: CompressionLevel;\n };\n }): Promise<string>;\n /**\n * Saves the current scene and all of its referenced assets into an archive.\n *\n * The archive contains all assets, that were accessible when this function was called.\n * Blocks in the archived scene reference assets relative from to the location of the scene\n * file. These references are resolved when loading such a scene via `loadSceneFromURL`.\n *\n * @category Scene Saving\n * @returns A promise that resolves with a Blob on success or an error on failure.\n */\n saveToArchive(): Promise<Blob>;\n /**\n * Create a new design scene, along with its own camera.\n *\n * ```javascript\n * const scene = engine.scene.create(layout);\n * // With a specific design unit and auto-paired font-size unit:\n * const pxScene = engine.scene.create('Free', { designUnit: 'Pixel' });\n * ```\n *\n * @category Scene Creation\n * @param sceneLayout - The layout of the scene.\n * @param options - Optional parameters for the scene. Properties:\n * - `page` - Page options. Properties:\n * - `size` - The size of the page.\n * - `color` - Optional background color of the page.\n * - `designUnit` - The design unit of the new scene. Defaults to `Pixel`.\n * - `fontSizeUnit` - The font-size unit. If omitted, paired with `designUnit`\n * (`Pixel` design unit → `Pixel` font unit, others → `Point`).\n * @returns The scene's handle.\n */\n create(sceneLayout?: SceneLayout, options?: CreateSceneOptions): DesignBlockId;\n /**\n * Create a new scene in video mode, along with its own camera.\n *\n * @deprecated Scene mode no longer affects engine behavior. Use `create()` followed by `setMode('Video')` instead.\n *\n * ```javascript\n * const scene = engine.scene.createVideo();\n * ```\n *\n * @category Scene Creation\n * @param options - Optional parameters for the scene. Properties:\n * - `page` - Page options. Properties:\n * - `size` - The size of the page.\n * - `color` - Optional background color of the page.\n * @returns The scene's handle.\n */\n createVideo(options?: CreateSceneOptions): DesignBlockId;\n /**\n * Loads the given image and creates a scene with a single page showing the image.\n *\n * Fetching the image may take an arbitrary amount of time, so the scene isn't immediately available.\n *\n * ```javascript\n * const scene = await engine.scene.createFromImage('https://img.ly/static/ubq_samples/sample_4.jpg');\n * ```\n *\n * @category Scene Creation\n * @param url - The image URL.\n * @param dpi - The scene's DPI.\n * @param pixelScaleFactor - The display's pixel scale factor.\n * @returns A promise that resolves with the scene ID on success or rejected with an error otherwise.\n */\n createFromImage(url: string, dpi?: number, pixelScaleFactor?: number, sceneLayout?: SceneLayout, spacing?: number, spacingInScreenSpace?: boolean): Promise<DesignBlockId>;\n /**\n * Loads the given video and creates a scene with a single page showing the video.\n *\n * Fetching the video may take an arbitrary amount of time, so the scene isn't immediately\n * available.\n *\n * ```javascript\n * const scene = await engine.scene.createFromVideo('https://img.ly/static/ubq_video_samples/bbb.mp4');\n * ```\n *\n * @category Scene Creation\n * @param url - The video URL.\n * @returns A promise that resolves with the scene ID on success or rejected with an error otherwise.\n */\n createFromVideo(url: string): Promise<DesignBlockId>;\n /**\n * Return the currently active scene.\n *\n * ```javascript\n * const scene = engine.scene.get();\n * ```\n *\n * @category Scene Properties\n * @returns The scene or null, if none was created yet.\n */\n get(): DesignBlockId | null;\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n *\n * This loads the template scene while keeping the design unit and page dimensions\n * of the current scene. The content of the pages is automatically adjusted to fit\n * the new dimensions.\n *\n *\n * ```javascript\n * engine.scene.applyTemplateFromString(\"UBQ1ewoiZm9ybWF0Ij...\");\n * ```\n *\n * @category Template Operations\n * @param content - The template scene file contents, a base64 string.\n * @returns A Promise that resolves once the template was applied or rejects if there was an error.\n */\n applyTemplateFromString(content: string): Promise<void>;\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n *\n * This loads the template scene while keeping the design unit and page dimensions\n * of the current scene. The content of the pages is automatically adjusted to fit\n * the new dimensions.\n *\n * ```javascript\n * engine.scene.applyTemplateFromURL('https://cdn.img.ly/assets/demo/v4/ly.img.template/templates/cesdk_postcard_1.scene');\n * ```\n *\n * @category Template Operations\n * @param url - The url to the template scene file.\n * @returns A Promise that resolves once the template was applied or rejects if there was an error.\n */\n applyTemplateFromURL(url: string): Promise<void>;\n /**\n * Get the current scene mode.\n *\n * @deprecated Scene mode no longer affects engine behavior. All features work regardless of mode.\n *\n * ```javascript\n * const mode = scene.getMode();\n * ```\n *\n * @category Scene Properties\n * @returns The current mode of the scene, or null if no mode has been set.\n */\n getMode(): SceneMode | null;\n /**\n * Set the mode of the scene.\n *\n * @deprecated Scene mode no longer affects engine behavior. All features work regardless of mode.\n *\n * ```javascript\n * engine.scene.setMode('Video');\n * ```\n *\n * @category Scene Properties\n * @param mode - The new mode for the scene.\n */\n setMode(mode: SceneMode): void;\n /**\n * Converts all values of the current scene into the given design unit.\n *\n * ```javascript\n * engine.scene.setDesignUnit('Pixel');\n * ```\n *\n * @category Scene Properties\n * @param designUnit - The new design unit of the scene\n */\n setDesignUnit(designUnit: SceneDesignUnit): void;\n /**\n * Returns the design unit of the current scene.\n *\n * ```javascript\n * engine.scene.getDesignUnit();\n * ```\n *\n * @category Scene Properties\n * @returns The current design unit.\n */\n getDesignUnit(): SceneDesignUnit;\n /**\n * Sets the unit in which font sizes for `setTextFontSize` and `getTextFontSizes` are interpreted.\n * The engine continues to store font sizes in points internally; this only affects how values\n * are interpreted at the API boundary when callers don't specify a `unit` in `TextFontSizeOptions`.\n *\n * ```javascript\n * engine.scene.setFontSizeUnit('Pixel');\n * ```\n *\n * @category Scene Properties\n * @param fontSizeUnit - The new font-size unit of the scene.\n */\n setFontSizeUnit(fontSizeUnit: SceneFontSizeUnit): void;\n /**\n * Returns the font-size unit of the current scene.\n *\n * ```javascript\n * engine.scene.getFontSizeUnit();\n * ```\n *\n * @category Scene Properties\n * @returns The current font-size unit.\n */\n getFontSizeUnit(): SceneFontSizeUnit;\n /**\n * Get the layout of the current scene.\n *\n * ```javascript\n * const layout = engine.scene.getLayout();\n * ```\n *\n * @category Scene Properties\n * @returns The current layout of the scene.\n */\n getLayout(): SceneLayout;\n /**\n * Set the layout of the current scene.\n * This will handle all necessary conversions including creating or destroying stack blocks\n * and reparenting pages as needed.\n *\n * When transitioning from stack layouts (VerticalStack, HorizontalStack, DepthStack) to Free layout,\n * the global positions of pages are preserved to maintain their visual appearance in the scene.\n *\n * ```javascript\n * engine.scene.setLayout('VerticalStack');\n * ```\n *\n * @category Scene Properties\n * @param layout - The new layout for the scene.\n */\n setLayout(layout: SceneLayout): void;\n /**\n * Get the sorted list of pages in the scene.\n *\n * ```javascript\n * const pages = engine.scene.getPages();\n * ```\n *\n * @category Page Management\n * @returns The sorted list of pages in the scene.\n */\n getPages(): DesignBlockId[];\n /**\n * Get the current page, i.e., the page of the first selected element if this page\n * is at least 25% visible or, otherwise, the page nearest to the viewport center.\n *\n * ```javascript\n * const currentPage = engine.scene.getCurrentPage();\n * ```\n *\n * @category Page Management\n * @returns The current page in the scene or null.\n */\n getCurrentPage(): DesignBlockId | null;\n /**\n * Find all blocks with the given type sorted by the distance to viewport center.\n *\n * ```javascript\n * // Use longhand block type ID to find nearest pages.\n * let nearestPageByType = engine.scene.findNearestToViewPortCenterByType('//ly.img.ubq/page')[0];\n * // Or use shorthand block type ID.\n * nearestPageByType = engine.scene.findNearestToViewPortCenterByType('page')[0];\n * ```\n *\n * @category Page Management\n * @param type - The type to search for.\n * @returns A list of block ids sorted by distance to viewport center.\n */\n findNearestToViewPortCenterByType(type: DesignBlockType): DesignBlockId[];\n /**\n * Find all blocks with the given kind sorted by the distance to viewport center.\n *\n * ```javascript\n * let nearestImageByKind = engine.scene.findNearestToViewPortCenterByKind('image')[0];\n * ```\n *\n * @category Page Management\n * @param kind - The kind to search for.\n * @returns A list of block ids sorted by distance to viewport center.\n */\n findNearestToViewPortCenterByKind(kind: string): DesignBlockId[];\n /**\n * Set the zoom level of the scene, e.g., for headless versions.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Setting a zoom level of 2.0f results in one dot in the design to be two pixels on the screen.\n *\n * ```javascript\n * // Zoom to 100%\n * engine.scene.setZoomLevel(1.0);\n *\n * // Zoom to 50%\n * engine.scene.setZoomLevel(0.5 * engine.scene.getZoomLevel());\n * ```\n *\n * @category Camera & Zoom\n * @param zoomLevel - The new zoom level.\n */\n setZoomLevel(zoomLevel?: number): void;\n /**\n * Get the zoom level of the scene or for a camera in the scene in unit `dpx/dot`. A zoom level of 2.0 results in one pixel in the design to be two pixels\n * on the screen.\n *\n * ```javascript\n * const zoomLevel = engine.scene.getZoomLevel();\n * ```\n *\n * @category Camera & Zoom\n * @returns The zoom level of the block's camera.\n */\n getZoomLevel(): number;\n /**\n * Sets the zoom and focus to show a block, optionally with animation.\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n *\n * @param id - The block that should be focused on.\n * @param options - Configuration for padding and animation.\n * @returns A promise that resolves once the zoom was set or rejects with an error otherwise.\n */\n zoomToBlock(id: DesignBlockId, options?: ZoomOptions): Promise<void>;\n /**\n * Sets the zoom and focus to show a block.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n *\n * ```javascript\n * // Bring entire scene in view with padding of 20px in all directions\n * engine.scene.zoomToBlock(scene, 20.0, 20.0, 20.0, 20.0);\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block that should be focused on.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n * @returns A promise that resolves once the zoom was set or rejects with an error otherwise.\n * @deprecated Use zoomToBlock with options object instead\n */\n zoomToBlock(id: DesignBlockId, paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): Promise<void>;\n /**\n * Continually adjusts the zoom level to fit the width or height of a block's axis-aligned bounding box.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n * No more than one block per scene can have zoom auto-fit enabled.\n * Calling `setZoomLevel` or `zoomToBlock` disables the continuous adjustment.\n *\n * ```javascript\n * // Follow page with padding of 20px horizontally before and after the block\n * engine.scene.enableZoomAutoFit(page, 'Horizontal', 20, 20)\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block for which the zoom is adjusted.\n * @param axis - The block axis for which the zoom is adjusted.\n * @param paddingBefore - Optional padding in screen pixels before the block.\n * @param paddingAfter - Optional padding in screen pixels after the block.\n */\n enableZoomAutoFit(id: DesignBlockId, axis: 'Horizontal' | 'Vertical', paddingBefore?: number, paddingAfter?: number): void;\n /**\n * Continually adjusts the zoom level to fit the width or height of a block's axis-aligned bounding box.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n * Calling `setZoomLevel` or `zoomToBlock` disables the continuous adjustment.\n *\n * ```javascript\n * // Follow page with padding of 20px in both directions\n * engine.scene.enableZoomAutoFit(page, 'Both', 20.0, 20.0, 20.0, 20.0);\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block for which the zoom is adjusted.\n * @param axis - The block axis for which the zoom is adjusted.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n */\n enableZoomAutoFit(id: DesignBlockId, axis: 'Both', paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): void;\n /**\n * Disables any previously set zoom auto-fit.\n *\n * ```javascript\n * engine.scene.disableZoomAutoFit(scene);\n * ```\n *\n * @category Camera & Zoom\n * @param blockOrScene - The scene or a block in the scene for which to disable zoom auto-fit.\n */\n disableZoomAutoFit(blockOrScene: DesignBlockId): void;\n /**\n * Queries whether zoom auto-fit is enabled for the given block.\n *\n * ```javascript\n * engine.scene.isZoomAutoFitEnabled(scene);\n * ```\n *\n * @category Camera & Zoom\n * @param blockOrScene - The scene or a block in the scene for which to query the zoom auto-fit.\n * @returns True if the given block has auto-fit set or the scene contains a block for which auto-fit is set, false\n * otherwise.\n */\n isZoomAutoFitEnabled(blockOrScene: DesignBlockId): boolean;\n /**\n * Continually ensures the camera position to be within the width and height of the blocks axis-aligned bounding box.\n * Disables any previously set camera position clamping in the scene and also takes priority over clamp camera commands.\n *\n * ```javascript\n * // Keep the scene with padding of 10px within the camera\n * engine.scene.unstable_enableCameraPositionClamping([scene], 10.0, 10.0, 10.0, 10.0, 0.0, 0.0, 0.0, 0.0);\n * ```\n *\n * Without padding, this results in a tight clamp on the block. With padding, the padded part of the\n * blocks is ensured to be visible.\n *\n * @category Experimental Features\n * @param ids - The blocks to which the camera position is adjusted to, usually, the scene or a page.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n * @param scaledPaddingLeft - Optional padding in screen pixels to the left of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingTop - Optional padding in screen pixels to the top of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingRight - Optional padding in screen pixels to the right of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingBottom - Optional padding in screen pixels to the bottom of the block that scales with the zoom level until five times the initial value.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_enableCameraPositionClamping(ids: DesignBlockId[], paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number, scaledPaddingLeft?: number, scaledPaddingTop?: number, scaledPaddingRight?: number, scaledPaddingBottom?: number): void;\n /**\n * Disables any previously set position clamping for the current scene.\n *\n * ```javascript\n * engine.scene.unstable_disableCameraPositionClamping();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block in the scene for which to query the position clamping.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_disableCameraPositionClamping(blockOrScene?: number | null): void;\n /**\n * Queries whether position clamping is enabled.\n *\n * ```javascript\n * engine.scene.unstable_isCameraPositionClampingEnabled();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block in the scene for which to query the position clamping.\n * @returns True if the given block has position clamping set or the scene contains a block for which position clamping is set, false\n * otherwise.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isCameraPositionClampingEnabled(blockOrScene?: number | null): boolean;\n /**\n * Continually ensures the zoom level of the camera in the active scene to be in the given range.\n *\n * ```javascript\n * // Allow zooming from 12.5% to 800% relative to the size of a page\n * engine.scene.unstable_enableCameraZoomClamping([page], 0.125, 8.0, 0.0, 0.0, 0.0, 0.0);\n * ```\n * @category Experimental Features\n * @param ids - The blocks to which the camera zoom limits are adjusted to, usually, the scene or a page.\n * @param minZoomLimit - The minimum zoom level limit when zooming out, unlimited when negative.\n * @param maxZoomLimit - The maximum zoom level limit when zooming in, unlimited when negative.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block. Only applied when the block is not a camera.\n * @param paddingTop - Optional padding in screen pixels to the top of the block. Only applied when the block is not a camera.\n * @param paddingRight - Optional padding in screen pixels to the right of the block. Only applied when the block is not a camera.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block. Only applied when the block is not a camera.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_enableCameraZoomClamping(ids: DesignBlockId[], minZoomLimit?: number, maxZoomLimit?: number, paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): void;\n /**\n * Disables any previously set zoom clamping for the current scene.\n *\n * ```javascript\n * engine.scene.unstable_disableCameraZoomClamping();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block for which to query the zoom clamping.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_disableCameraZoomClamping(blockOrScene?: number | null): void;\n /**\n * Queries whether zoom clamping is enabled.\n *\n * ```javascript\n * engine.scene.unstable_isCameraZoomClampingEnabled();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block for which to query the zoom clamping.\n * @returns True if the given block has zoom clamping set or the scene contains a block for which zoom clamping is set, false otherwise.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isCameraZoomClampingEnabled(blockOrScene?: number | null): boolean;\n /**\n * Subscribe to changes to the zoom level.\n *\n * ```javascript\n * const unsubscribeZoomLevelChanged = engine.scene.onZoomLevelChanged(() => {\n * const zoomLevel = engine.scene.getZoomLevel();\n * console.log('Zoom level is now: ', zoomLevel);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - This function is called at the end of the engine update, if the zoom level has changed.\n * @returns A method to unsubscribe.\n * @privateRemarks This will currently fire on _all_ changes to camera properties\n */\n onZoomLevelChanged: (callback: () => void) => (() => void);\n /**\n * Subscribe to changes to the active scene rendered by the engine.\n *\n * ```javascript\n * const unsubscribe = engine.scene.onActiveChanged(() => {\n * const newActiveScene = engine.scene.get();\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - This function is called at the end of the engine update, if the active scene has changed.\n * @returns A method to unsubscribe.\n */\n onActiveChanged: (callback: () => void) => (() => void);\n /**\n * Starts or stops playback of the current scene.\n * Only works in Video mode, not in Design mode.\n *\n * @param play - True to start playback, false to stop\n * @throws Error if no page is available for playback\n */\n setPlaying(play: boolean): void;\n}\n\n/** @public */\ndeclare type SceneDesignUnit = (typeof SceneDesignUnitValues)[number];\nexport { SceneDesignUnit as DesignUnit }\nexport { SceneDesignUnit }\n\n/** @public */\nexport declare const SceneDesignUnitValues: readonly [\"Pixel\", \"Millimeter\", \"Inch\"];\n\n/** @public */\nexport declare type SceneFontSizeUnit = (typeof SceneFontSizeUnitValues)[number];\n\n/** @public */\nexport declare const SceneFontSizeUnitValues: readonly [\"Pixel\", \"Point\"];\n\n/** @public */\nexport declare type SceneLayout = (typeof SceneLayoutValues)[number];\n\n/** @public */\nexport declare const SceneLayoutValues: readonly [\"Free\", \"VerticalStack\", \"HorizontalStack\", \"DepthStack\"];\n\n/** @public @deprecated Since v1.72. Scene mode no longer affects engine behavior. */\nexport declare type SceneMode = (typeof SceneModeValues)[number];\n\n/** @public @deprecated Since v1.72. Scene mode no longer affects engine behavior. */\nexport declare const SceneModeValues: readonly [\"Design\", \"Video\"];\n\n/**\n * @public\n * Represents the various scopes that define the capabilities and permissions\n * within the Creative Editor SDK. Each scope corresponds to a specific\n * functionality or action that can be performed within the editor.\n *\n * The `Scope` type is used to control access to different features and operations,\n * allowing for fine-grained control over what actions are permitted.\n *\n * @categoryDescription Scopes\n * Defines the various scopes that control the capabilities and permissions\n * within the Creative Editor SDK.\n *\n * @public\n */\nexport declare type Scope = 'text/edit' | 'text/character' | 'fill/change' | 'fill/changeType' | 'stroke/change' | 'shape/change' | 'layer/move' | 'layer/resize' | 'layer/rotate' | 'layer/flip' | 'layer/crop' | 'layer/opacity' | 'layer/blendMode' | 'layer/visibility' | 'layer/clipping' | 'appearance/adjustments' | 'appearance/filter' | 'appearance/effect' | 'appearance/blur' | 'appearance/shadow' | 'appearance/animation' | 'lifecycle/destroy' | 'lifecycle/duplicate' | 'editor/add' | 'editor/select';\n\n/** @public */\nexport declare type SettingBoolPropertyName = 'alwaysHighlightPlaceholders' | 'doubleClickToCropEnabled' | 'showBuildVersion' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'blockAnimations/enabled' | 'playback/showAllBlocks' | 'renderTextCursorAndSelectionInEngine' | 'touch/dragStartCanSelect' | 'touch/singlePointPanning' | 'mouse/enableZoom' | 'mouse/enableScroll' | 'controlGizmo/showCropHandles' | 'controlGizmo/showMoveHandles' | 'controlGizmo/dynamicMoveHandleVisibility' | 'controlGizmo/showResizeHandles' | 'controlGizmo/showScaleHandles' | 'controlGizmo/showRotateHandles' | 'controlGizmo/showCropScaleHandles' | 'page/title/canEdit' | 'page/title/show' | 'page/title/showPageTitleTemplate' | 'page/title/appendPageName' | 'page/title/showOnSinglePage' | 'page/dimOutOfPageAreas' | 'page/allowCropInteraction' | 'page/allowResizeInteraction' | 'page/restrictResizeInteractionToFixedAspectRatio' | 'page/allowRotateInteraction' | 'page/allowMoveInteraction' | 'page/marqueeSelectOnBodyDrag' | 'page/restrictPageSelectionToBorderAndTitle' | 'page/moveChildrenWhenCroppingFill' | 'page/selectWhenNoBlocksSelected' | 'page/highlightWhenCropping' | 'page/highlightDropTarget' | 'page/reparentBlocksToSceneWhenOutOfPage' | 'colorMaskingSettings/secondPass' | 'clampThumbnailTextureSizes' | 'useSystemFontFallback' | 'forceSystemEmojis' | 'features/textEditModeTransformHandlesEnabled' | 'features/videoStreamingEnabled' | 'grid/enabled' | 'grid/snapEnabled' | 'features/enableAutomaticEnumerations' | 'features/transparentClickThroughEnabled' | 'features/fontLineGapEnabled' | (string & {});\n\n/** @public */\nexport declare type SettingColorPropertyName = 'clearColor' | 'handleFillColor' | 'highlightColor' | 'pageHighlightColor' | 'placeholderHighlightColor' | 'snappingGuideColor' | 'rotationSnappingGuideColor' | 'cropOverlayColor' | 'textVariableHighlightColor' | 'borderOutlineColor' | 'progressColor' | 'errorStateColor' | 'page/title/color' | 'page/marginFillColor' | 'page/marginFrameColor' | 'page/innerBorderColor' | 'page/outerBorderColor' | 'colorMaskingSettings/maskColor' | 'grid/color' | (string & {});\n\n/** @public */\nexport declare type SettingEnumPropertyName = 'touch/pinchAction' | 'touch/rotateAction' | 'camera/clamping/overshootMode' | 'doubleClickSelectionMode' | 'colorPicker/colorMode' | 'timeline/trackVisibility' | (string & {});\n\n/** @public */\nexport declare type SettingEnumType = {\n 'touch/pinchAction': TouchPinchAction;\n 'touch/rotateAction': TouchRotateAction;\n 'camera/clamping/overshootMode': CameraClampingOvershootMode;\n doubleClickSelectionMode: DoubleClickSelectionMode;\n 'colorPicker/colorMode': ColorPickerColorMode;\n 'timeline/trackVisibility': TimelineTrackVisibility;\n};\n\n/** @public */\nexport declare type SettingEnumValues = TouchPinchAction | TouchRotateAction | CameraClampingOvershootMode | DoubleClickSelectionMode | ColorPickerColorMode | TimelineTrackVisibility | (string & {});\n\n/** @public */\nexport declare type SettingFloatPropertyName = 'positionSnappingThreshold' | 'rotationSnappingThreshold' | 'controlGizmo/blockScaleDownLimit' | 'listIndentPerLevel' | 'grid/spacingX' | 'grid/spacingY' | (string & {});\n\n/** @public */\nexport declare type SettingIntPropertyName = 'maxImageSize' | 'maxPreviewResolution' | (string & {});\n\n/**\n * Union type of all valid setting keys.\n * @public\n */\nexport declare type SettingKey = keyof Settings;\n\n/**\n * Map of all available settings with their types.\n * This provides type-safe access to all editor settings.\n *\n * The settings are organized by type:\n * - Boolean settings control various on/off features in the editor\n * - String settings configure paths and textual values\n * - Float settings define numerical thresholds and limits\n * - Integer settings specify whole number limits\n * - Color settings control the visual appearance\n * - Enum settings provide predefined choice options\n *\n * @public\n */\nexport declare interface Settings {\n /** Whether to show handles for adjusting the crop area during crop mode. */\n 'controlGizmo/showCropHandles': boolean;\n /** Whether to display the outer handles that scale the full image during crop. */\n 'controlGizmo/showCropScaleHandles': boolean;\n /** Whether to show the move handles. */\n 'controlGizmo/showMoveHandles': boolean;\n /** Whether the move handle visibility is dynamic based on block size. Set to false to always show. */\n 'controlGizmo/dynamicMoveHandleVisibility': boolean;\n /** Whether to display the non-proportional resize handles (edge handles). */\n 'controlGizmo/showResizeHandles': boolean;\n /** Whether to show the rotation handles. */\n 'controlGizmo/showRotateHandles': boolean;\n /** Whether to display the proportional scale handles (corner handles). */\n 'controlGizmo/showScaleHandles': boolean;\n /** Enable double-click to enter crop mode. */\n doubleClickToCropEnabled: boolean;\n /** Enable single page mode where only one page is shown at a time. */\n 'features/singlePageModeEnabled': boolean;\n /** Enable file system usage, that allows the engine to use the file system to store files for local uploads. */\n 'features/fileSystemUsageEnabled': boolean;\n /** Enable the page carousel for navigating between pages. */\n 'features/pageCarouselEnabled': boolean;\n /** Whether transform edits should retain the cover mode of the content. */\n 'features/transformEditsRetainCoverMode': boolean;\n /** Whether auto-sized text blocks should be clamped to page boundaries during editing. */\n 'features/clampTextBlockWidthToPageDimensionsDuringEditing': boolean;\n /** Whether the engine processes mouse scroll events. */\n 'mouse/enableScroll': boolean;\n /** Whether the engine processes mouse zoom events. */\n 'mouse/enableZoom': boolean;\n /** Whether crop interaction (by handles and gestures) should be possible. */\n 'page/allowCropInteraction': boolean;\n /** Whether move interaction should be possible when page layout is not controlled by the scene. */\n 'page/allowMoveInteraction': boolean;\n /** When enabled, a click+drag that starts on the page body performs a marquee selection of the blocks\n * inside the page instead of moving the page. The page can still be moved by dragging its title\n * (when visible in free layout) or by holding the command key (macOS) / control key (Windows/Linux)\n * while clicking and dragging on the page body. Has no effect when the page is not movable\n * (see `page/allowMoveInteraction` and scene layout constraints). */\n 'page/marqueeSelectOnBodyDrag': boolean;\n /** When enabled, the page can only be selected by clicking on its title (when shown in free layout)\n * or near its border. Clicks inside the page body no longer select the page; the click falls\n * through to whatever block sits underneath. Independent of `page/marqueeSelectOnBodyDrag`. */\n 'page/restrictPageSelectionToBorderAndTitle': boolean;\n /** Whether resize interaction (by handles and gestures) should be possible. */\n 'page/allowResizeInteraction': boolean;\n /** Whether rotation interaction should be possible when page layout is not controlled by the scene. */\n 'page/allowRotateInteraction': boolean;\n /** Whether pages support non-rectangular shapes. When false, supportsShape returns false for pages. */\n 'page/allowShapeChange': boolean;\n /** Whether the opacity of the region outside of all pages should be reduced. */\n 'page/dimOutOfPageAreas': boolean;\n /** Whether resize interaction should be restricted to fixed aspect ratio. */\n 'page/restrictResizeInteractionToFixedAspectRatio': boolean;\n /** Whether children of the page should be transformed to match their old position when cropping. */\n 'page/moveChildrenWhenCroppingFill': boolean;\n /** Whether to append the page name to the title even if not specified in the template. */\n 'page/title/appendPageName': boolean;\n /** Whether double-clicking a page title enters text edit mode to rename the page. */\n 'page/title/canEdit': boolean;\n /** Whether to show titles above each page. */\n 'page/title/show': boolean;\n /** Whether to hide the page title when only a single page exists. */\n 'page/title/showOnSinglePage': boolean;\n /** Whether to include the default page title from page.titleTemplate. */\n 'page/title/showPageTitleTemplate': boolean;\n /** Whether to show the placeholder button. */\n 'placeholderControls/showButton': boolean;\n /** Whether to show the overlay pattern for placeholders. */\n 'placeholderControls/showOverlay': boolean;\n /** Whether animations should be enabled or not. */\n 'blockAnimations/enabled': boolean;\n /**\n * When enabled, every block stays visible regardless of the current playback time, instead of being\n * culled outside its time offset/duration. No effect on export.\n */\n 'playback/showAllBlocks': boolean;\n /** Whether the background grid is shown on pages. */\n 'grid/enabled': boolean;\n /** Whether elements should snap to grid lines when dragged. */\n 'grid/snapEnabled': boolean;\n /** Whether to display the build version in the UI. */\n showBuildVersion: boolean;\n /** Whether drag start can select elements. */\n 'touch/dragStartCanSelect': boolean;\n /** Whether single-point panning is enabled for touch interactions. */\n 'touch/singlePointPanning': boolean;\n /** Whether to use system font as fallback for missing glyphs. */\n useSystemFontFallback: boolean;\n /** Whether to force the use of system emojis instead of custom emoji fonts. */\n forceSystemEmojis: boolean;\n /** Whether to select the page when a block is deselected and no other blocks are selected. */\n 'page/selectWhenNoBlocksSelected': boolean;\n /** Whether highlighting should be automatically enabled on the current page when entering crop mode. */\n 'page/highlightWhenCropping': boolean;\n /** Whether to highlight the page under a dragged element as a drop target. */\n 'page/highlightDropTarget': boolean;\n /** Whether blocks should be reparented to the scene when dragged outside all pages,\n * and reparented back to a page when dragged over one. */\n 'page/reparentBlocksToSceneWhenOutOfPage': boolean;\n /** Clamp thumbnail texture sizes to the platform's GPU texture limit. */\n clampThumbnailTextureSizes: boolean;\n /** Toggle the dock components visibility */\n 'dock/hideLabels': boolean;\n /** The root directory for resolving relative paths and `bundle://` URIs.\n * Also used as the base URL for loading font fallback files and the default emoji font (when self-hosting assets).\n * If empty, defaults to `https://cdn.img.ly/assets/v4` for font/emoji assets. */\n basePath: string;\n /** The URI for the default emoji font file. */\n defaultEmojiFontFileUri: string;\n /** The URI for the default font file. */\n defaultFontFileUri: string;\n /** The license key for the SDK. */\n license: string;\n /** The font file URI for page titles. */\n 'page/title/fontFileUri': string;\n /** The separator between page number and page name in titles. */\n 'page/title/separator': string;\n /** The URI for the fallback font used when glyphs are missing. */\n fallbackFontUri: string;\n /** The supported MIME types for file uploads. */\n 'upload/supportedMimeTypes': string;\n /**\n * Web-only: Credentials mode for cross-origin fetch requests.\n * - \"omit\": Never send cookies\n * - \"same-origin\": Send cookies only for same-origin requests (default)\n * - \"include\": Always send cookies, even for cross-origin requests\n * Note: Only affects web platform. Ignored on native platforms.\n */\n 'web/fetchCredentials': 'omit' | 'same-origin' | 'include';\n /** Scale-down limit for blocks in screen pixels when scaling with gizmos or touch gestures. */\n 'controlGizmo/blockScaleDownLimit': number;\n /** The width of each list indentation level, in EM units. */\n listIndentPerLevel: number;\n /** The threshold distance in pixels for position snapping. */\n positionSnappingThreshold: number;\n /** The threshold angle in degrees for rotation snapping. */\n rotationSnappingThreshold: number;\n /** Horizontal spacing between vertical grid lines in design units. */\n 'grid/spacingX': number;\n /** Vertical spacing between horizontal grid lines in design units. */\n 'grid/spacingY': number;\n /** The maximum size (width or height) in pixels for images. */\n maxImageSize: number;\n /** The maximum dimension (width or height) in physical pixels for preview rendering.\n * When greater than 0, the scene is rendered at reduced resolution and upscaled for improved performance.\n * Does not affect exports. Set to -1 to disable (default). */\n maxPreviewResolution: number;\n /** The color of the border outline for selected elements. */\n borderOutlineColor: Color;\n /** The background clear color. */\n clearColor: Color;\n /** The color used for color masking effects. */\n 'colorMaskingSettings/maskColor': Color;\n /** The color of the crop overlay. */\n cropOverlayColor: Color;\n /** The color indicating an error state. */\n errorStateColor: Color;\n /** The highlight color for selected or active elements. */\n highlightColor: Color;\n /** The color of the inner frame around the page. */\n 'page/innerBorderColor': Color;\n /** The color filled into the bleed margins of pages. */\n 'page/marginFillColor': Color;\n /** The color of the frame around the bleed margin area. */\n 'page/marginFrameColor': Color;\n /** The color of the outer frame around the page. */\n 'page/outerBorderColor': Color;\n /** The color of page titles visible in preview mode. */\n 'page/title/color': Color;\n /** Color of the outline of each page */\n pageHighlightColor: Color;\n /** The highlight color for placeholder elements. */\n placeholderHighlightColor: Color;\n /** The color indicating progress or loading states. */\n progressColor: Color;\n /** The color of rotation snapping guide lines. */\n rotationSnappingGuideColor: Color;\n /** The color of rule of thirds guide lines. */\n ruleOfThirdsLineColor: Color;\n /** The color of snapping guide lines. */\n snappingGuideColor: Color;\n /** The highlight color for text variables. */\n textVariableHighlightColor: Color;\n /** The fill color for handles. */\n handleFillColor: Color;\n /** Color of the grid lines. */\n 'grid/color': Color;\n /** The selection mode for double-click: Direct selects the clicked element, Hierarchical traverses the hierarchy. */\n doubleClickSelectionMode: 'Direct' | 'Hierarchical';\n /** The action performed for pinch gestures: None, Zoom, Scale, Auto, or Dynamic. */\n 'touch/pinchAction': 'None' | 'Zoom' | 'Scale' | 'Auto' | 'Dynamic';\n /** The action performed for rotate gestures: None or Rotate. */\n 'touch/rotateAction': 'None' | 'Rotate';\n /** Controls behavior when clamp area is smaller than viewport: Center or Reverse. */\n 'camera/clamping/overshootMode': 'Center' | 'Reverse';\n /** Controls the icon size of the dock components */\n 'dock/iconSize': 'normal' | 'large';\n /** Controls the color mode of the color picker. When set to 'RGB' or 'CMYK', only colors matching this mode are fully editable. Defaults to 'Any'. */\n 'colorPicker/colorMode': 'RGB' | 'CMYK' | 'Any';\n /** Controls which timeline tracks are visible. 'all' shows all tracks, 'active' shows only the track containing the active block. Defaults to 'all'. */\n 'timeline/trackVisibility': 'all' | 'active';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n}\n\n/** @public */\nexport declare type SettingsBool = SettingBoolPropertyName;\n\n/**\n * Represents the color settings available in the editor.\n *\n * @categoryDescription Color Settings\n * Defines the possible color settings in the editor.\n * - 'borderOutlineColor': The color of the border outline.\n * - 'clearColor': The clear color.\n * - 'colorMaskingSettings/maskColor': The color used for masking.\n * - 'cropOverlayColor': The color of the crop overlay.\n * - 'errorStateColor': The color indicating an error state.\n * - 'highlightColor': The highlight color.\n * - 'page/innerBorderColor': The color of the inner border of the page.\n * - 'page/marginFillColor': The color of the margin fill.\n * - 'page/marginFrameColor': The color of the margin frame.\n * - 'page/outerBorderColor': The color of the outer border of the page.\n * - 'page/title/color': The color of the page title.\n * - 'pageHighlightColor': Color of the outline of each page.\n * - 'placeholderHighlightColor': The highlight color for placeholders.\n * - 'progressColor': The color indicating progress.\n * - 'rotationSnappingGuideColor': The color of the rotation snapping guide.\n * - 'ruleOfThirdsLineColor': The color of the rule of thirds lines.\n * - 'snappingGuideColor': The color of the snapping guide.\n * - 'textVariableHighlightColor': The highlight color for text variables.\n *\n * @public\n */\nexport declare type SettingsColor = SettingColorPropertyName;\n\n/**\n * Represents the color settings available in the editor.\n *\n * @categoryDescription Color Settings\n * Defines the possible color settings in the editor.\n * - 'borderOutlineColor': The color of the border outline.\n * - 'clearColor': The clear color.\n * - 'colorMaskingSettings/maskColor': The color used for masking.\n * - 'cropOverlayColor': The color of the crop overlay.\n * - 'errorStateColor': The color indicating an error state.\n * - 'highlightColor': The highlight color.\n * - 'page/innerBorderColor': The color of the inner border of the page.\n * - 'page/marginFillColor': The color of the margin fill.\n * - 'page/marginFrameColor': The color of the margin frame.\n * - 'page/outerBorderColor': The color of the outer border of the page.\n * - 'page/title/color': The color of the page title.\n * - 'pageHighlightColor': Color of the outline of each page.\n * - 'placeholderHighlightColor': The highlight color for placeholders.\n * - 'progressColor': The color indicating progress.\n * - 'rotationSnappingGuideColor': The color of the rotation snapping guide.\n * - 'ruleOfThirdsLineColor': The color of the rule of thirds lines.\n * - 'snappingGuideColor': The color of the snapping guide.\n * - 'textVariableHighlightColor': The highlight color for text variables.\n *\n * @public\n * @deprecated Use SettingsColor instead.\n */\nexport declare type SettingsColorRGBA = SettingsColor;\n\n/** @public */\nexport declare type SettingsEnum = SettingEnumType;\n\n/** @public */\nexport declare type SettingsFloat = SettingFloatPropertyName;\n\n/** @public */\nexport declare type SettingsInt = SettingIntPropertyName;\n\n/** @public */\nexport declare type SettingsString = SettingStringPropertyName;\n\n/** @public */\nexport declare type SettingStringPropertyName = 'basePath' | 'defaultEmojiFontFileUri' | 'defaultFontFileUri' | 'upload/supportedMimeTypes' | 'license' | 'web/fetchCredentials' | 'page/title/separator' | 'page/title/fontFileUri' | 'fallbackFontUri' | (string & {});\n\n/**\n * Represents the type of a setting.\n *\n * @categoryDescription Setting Type\n * Defines the possible types for a setting.\n * - 'Bool': A boolean setting.\n * - 'Int': An integer setting.\n * - 'Float': A float setting.\n * - 'String': A string setting.\n * - 'Color': A color setting.\n * - 'Enum': An enum setting.\n *\n * @public\n */\nexport declare type SettingType = 'Bool' | 'Int' | 'Float' | 'String' | 'Color' | 'Enum';\n\n/**\n * Gets the value type for a specific setting key.\n * @public\n */\nexport declare type SettingValueType<K extends SettingKey> = Settings[K];\n\n/**\n * The shorthand block type IDs for the shape blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * @public\n */\nexport declare const SHAPE_TYPES: readonly [\"rect\", \"line\", \"ellipse\", \"polygon\", \"star\", \"vector_path\"];\n\n/**\n * The block type IDs for the shape blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * Refer to {@link ShapeTypeShorthand} and {@link ShapeTypeLonghand} for more details.\n * @public\n */\nexport declare type ShapeType = ShapeTypeShorthand | ShapeTypeLonghand;\n\n/**\n * The longhand block type IDs for the blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * @public\n */\nexport declare type ShapeTypeLonghand = `//ly.img.ubq/shape/${ShapeTypeShorthand}`;\n\n/** @public */\nexport declare type ShapeTypeShorthand = (typeof SHAPE_TYPES)[number];\n\n/** @public */\nexport declare type ShapeVectorPathFillRule = (typeof ShapeVectorPathFillRuleValues)[number];\n\n/** @public */\nexport declare const ShapeVectorPathFillRuleValues: readonly [\"EvenOdd\", \"NonZero\"];\n\n/** @public */\nexport declare interface Size2 {\n width: number;\n height: number;\n}\n\n/** @public */\nexport declare type SizeMode = WidthMode | HeightMode;\n\n/**\n * The order to sort by if the asset source supports sorting.\n * If set to None, the order is the same as the assets were added to the source.\n * @public\n */\nexport declare type SortingOrder = 'None' | 'Ascending' | 'Descending';\n\n/**\n * A single source width an intrinsic width & height.\n * @public\n */\nexport declare interface Source {\n uri: string;\n width: number;\n height: number;\n}\n\n/** @public */\nexport declare type SourceSetPropertyName = 'fill/image/sourceSet' | (string & {});\n\n/**\n * Options for configuring block split operations.\n * @public\n */\nexport declare type SplitOptions = {\n /**\n * Whether or not the new block will be attached to the same parent as the original.\n * @defaultValue true\n */\n attachToParent?: boolean;\n /**\n * Whether to create a parent track if needed and add both blocks to it. Only used when attachToParent is true.\n * @defaultValue false\n */\n createParentTrackIfNeeded?: boolean;\n /**\n * Whether to select the newly created block after splitting.\n * @defaultValue true\n */\n selectNewBlock?: boolean;\n};\n\n/**\n * Represents a spot color value.\n *\n * Defines a spot color value with a name, tint, and external reference.\n * - 'name': The name of the spot color.\n * - 'tint': The tint factor.\n * - 'externalReference': The external reference of the spot color.\n *\n * @public\n */\nexport declare interface SpotColor {\n name: string;\n tint: number;\n externalReference: string;\n}\n\n/** @public */\nexport declare type StringPropertyName = 'name' | 'scene/pageFormatId' | 'type' | 'uuid' | 'page/titleTemplate' | 'audio/fileURI' | 'text/externalReference' | 'text/fontFileUri' | 'text/text' | 'text/typeface' | 'cutout/path' | 'caption/externalReference' | 'caption/fontFileUri' | 'caption/text' | 'caption/typeface' | 'effect/lut_filter/lutFileURI' | 'fill/image/externalReference' | 'fill/image/imageFileURI' | 'fill/image/previewFileURI' | 'fill/video/fileURI' | 'shape/vector_path/path' | (string & {});\n\n/** @public */\nexport declare type StrokeCap = (typeof StrokeCapValues)[number];\n\n/** @public */\nexport declare const StrokeCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokeCornerGeometry = (typeof StrokeCornerGeometryValues)[number];\n\n/** @public */\nexport declare const StrokeCornerGeometryValues: readonly [\"Bevel\", \"Miter\", \"Round\"];\n\n/** @public */\nexport declare type StrokePosition = (typeof StrokePositionValues)[number];\n\n/** @public */\nexport declare const StrokePositionValues: readonly [\"Center\", \"Inner\", \"Outer\"];\n\n/** @public */\nexport declare type StrokeStyle = (typeof StrokeStyleValues)[number];\n\n/** @public */\nexport declare const StrokeStyleValues: readonly [\"Dashed\", \"DashedRound\", \"Dotted\", \"LongDashed\", \"LongDashedRound\", \"Solid\"];\n\n/**\n * Represents a subscription to an event.\n *\n * The `Subscription` type is a number that uniquely identifies a subscription to an event.\n *\n * @categoryDescription Subscription\n * Methods for working with subscriptions to events.\n *\n * @public\n */\ndeclare type Subscription = number;\n\n/**\n * A synchronous URI resolver function.\n * @public\n */\nexport declare type SyncURIResolver = (URI: string, defaultURIResolver: (URI: string) => string) => string;\n\n/** @public */\nexport declare type TextAnimationWritingStyle = (typeof TextAnimationWritingStyleValues)[number];\n\n/** @public */\nexport declare const TextAnimationWritingStyleValues: readonly [\"Block\", \"Line\", \"Character\", \"Word\"];\n\n/**\n * Represents the text case of a text block.\n *\n * @categoryDescription Text Case\n * Defines the possible text cases for a text block.\n * - 'Normal': The text is in its normal case.\n * - 'Uppercase': The text is in uppercase.\n * - 'Lowercase': The text is in lowercase.\n * - 'Titlecase': The text is in title case.\n *\n * @public\n */\nexport declare type TextCase = 'Normal' | 'Uppercase' | 'Lowercase' | 'Titlecase';\n\n/**\n * Configuration for text decorations on a text run.\n *\n * All active decoration lines share the same style and thickness.\n * An optional underline color override can be set; overline and strikethrough\n * always use the text color.\n *\n * @public\n */\nexport declare interface TextDecorationConfig {\n /** The active decoration line types. Use `['None']` to clear all decorations.\n * When `'None'` is present, all other values are ignored. */\n lines: TextDecorationLine[];\n /** The style of the decoration lines. Defaults to 'Solid'. */\n style?: TextDecorationStyle;\n /** Optional color override for underlines only. Uses the text color if not set.\n * Overline and strikethrough always use the text color. */\n underlineColor?: Color;\n /** Multiplier for the underline thickness. Defaults to 1.0. */\n underlineThickness?: number;\n /** Relative offset applied to the underline position as a multiplier on the font-default distance. 0 = font default, positive = proportionally further from baseline, negative = proportionally closer. The actual position is computed as `fontDefault * (1 + underlineOffset)`. Defaults to 0.0. */\n underlineOffset?: number;\n /** When true, underlines skip over glyph descenders (skip-ink). Defaults to true. */\n skipInk?: boolean;\n}\n\n/**\n * Represents a line type for text decoration.\n *\n * Text decoration lines are combinable — a range of text can have multiple decoration lines.\n * - 'None': No decoration.\n * - 'Underline': The text is underlined.\n * - 'Strikethrough': The text has a line through it.\n * - 'Overline': The text has a line above it.\n *\n * @public\n */\nexport declare type TextDecorationLine = 'None' | 'Underline' | 'Strikethrough' | 'Overline';\n\n/**\n * Represents the style of a text decoration line.\n *\n * - 'Solid': A solid line (default).\n * - 'Double': Two parallel lines.\n * - 'Dotted': A series of dots.\n * - 'Dashed': A series of dashes.\n * - 'Wavy': A wavy line.\n *\n * @public\n */\nexport declare type TextDecorationStyle = 'Solid' | 'Double' | 'Dotted' | 'Dashed' | 'Wavy';\n\n/**\n * Options for text font size operations with unit support.\n * @public\n */\nexport declare interface TextFontSizeOptions {\n /**\n * The unit of the font size. Defaults to the scene's `fontSizeUnit`\n * (configured via `engine.scene.setFontSizeUnit()`), which itself defaults to `'Point'`.\n */\n unit?: FontSizeUnit;\n /** The start index of the UTF-16 range. Defaults to -1 (start of selection/text) */\n from?: number;\n /** The end index of the UTF-16 range. Defaults to -1 (end of selection/text) */\n to?: number;\n}\n\n/** @public */\ndeclare type TextHorizontalAlignment = (typeof TextHorizontalAlignmentValues)[number];\nexport { TextHorizontalAlignment as HorizontalTextAlignment }\nexport { TextHorizontalAlignment }\n\n/** @public */\nexport declare const TextHorizontalAlignmentValues: readonly [\"Left\", \"Right\", \"Center\", \"Auto\"];\n\n/** @public */\ndeclare type TextVerticalAlignment = (typeof TextVerticalAlignmentValues)[number];\nexport { TextVerticalAlignment }\nexport { TextVerticalAlignment as VerticalTextAlignment }\n\n/** @public */\nexport declare const TextVerticalAlignmentValues: readonly [\"Top\", \"Bottom\", \"Center\"];\n\n/** @public */\nexport declare type TimelineTrackVisibility = (typeof TimelineTrackVisibilityValues)[number];\n\n/** @public */\nexport declare const TimelineTrackVisibilityValues: readonly [\"all\", \"active\"];\n\n/** @public */\nexport declare type TouchPinchAction = (typeof TouchPinchActionValues)[number];\n\n/** @public */\nexport declare const TouchPinchActionValues: readonly [\"None\", \"Zoom\", \"Scale\", \"Auto\", \"Dynamic\"];\n\n/** @public */\nexport declare type TouchRotateAction = (typeof TouchRotateActionValues)[number];\n\n/** @public */\nexport declare const TouchRotateActionValues: readonly [\"None\", \"Rotate\"];\n\n/**\n * Represents a transient resource.\n *\n * The `TransientResource` interface provides a set of properties that describe a transient\n * resource, including a URL and the size of the resource.\n *\n * @public\n */\nexport declare interface TransientResource {\n URL: string;\n size: number;\n}\n\n/** Typeface definition */\nexport declare interface Typeface {\n name: string;\n fonts: Font[];\n}\n\n/**\n * Represents a typeface definition used in the editor.\n *\n * @deprecated This type definition is not used anymore and will be removed.\n *\n * Defines the structure of a typeface definition, including metadata, family name, and font details.\n * - 'meta': Optional metadata for the typeface, including default status, library, and categories.\n * - 'family': The name of the typeface family.\n * - 'fonts': An array of font definitions, each containing a font URL, weight, and style.\n *\n * @public\n */\nexport declare type TypefaceDefinition = {\n /** @deprecated The meta field is not used anymore */\n meta?: {\n default?: boolean;\n library?: string;\n categories?: string[];\n };\n family: string;\n fonts: {\n fontURL: string;\n weight: FontWeight;\n style: FontStyle;\n }[];\n};\n\n/**\n * Specifies options for configuring audio extraction from video operations.\n *\n * The `UBQAudioFromVideoOptions` interface provides a set of properties that control the\n * behavior of the audio extraction operation.\n *\n * Methods for configuring audio extraction from video operations.\n *\n * @public\n */\ndeclare interface UBQAudioFromVideoOptions {\n keepTrimSettings: boolean;\n muteOriginalVideo: boolean;\n}\n\n/**\n * Specifies options for exporting audio design blocks to various formats.\n *\n * The `UBQExportAudioOptions` interface provides a set of properties that control the\n * behavior and quality of the exported audio content. These options include settings\n * for sample rate and number of channels.\n *\n * Methods for configuring export settings for audio design blocks.\n *\n * @public\n */\ndeclare interface UBQExportAudioOptions {\n sampleRate: number;\n numberOfChannels: number;\n skipEncoding?: boolean;\n}\n\n/**\n * Specifies options for exporting design blocks to various formats.\n *\n * The `UBQExportOptions` interface provides a set of properties that control the\n * behavior and quality of the exported content. These options include settings\n * for JPEG, WebP, PNG, and PDF exports, as well as options for resizing and\n * adding underlayers.\n *\n * @public\n */\ndeclare interface UBQExportOptions {\n jpegQuality: number;\n webpQuality: number;\n pngCompressionLevel: number;\n useTargetSize: boolean;\n targetWidth: number;\n targetHeight: number;\n exportPdfWithHighCompatibility: boolean;\n exportPdfWithUnderlayer: boolean;\n underlayerSpotColorName: string;\n underlayerOffset: number;\n underlayerRenderRatio: number;\n underlayerMaxError: number;\n allowTextOverhang: boolean;\n exportPdfWithDeviceCMYK: boolean;\n}\n\n/**\n * Specifies options for exporting video design blocks to various formats.\n *\n * The `UBQExportVideoOptions` interface provides a set of properties that control the\n * behavior and quality of the exported video content. These options include settings\n * for H.264 profile, level, framerate, video bitrate, audio bitrate, and resizing.\n *\n * Methods for configuring export settings for video design blocks.\n *\n * @public\n */\ndeclare interface UBQExportVideoOptions {\n h264Profile: number;\n h264Level: number;\n framerate: number;\n videoBitrate: number;\n audioBitrate: number;\n useTargetSize: boolean;\n targetWidth: number;\n targetHeight: number;\n allowTextOverhang: boolean;\n}\n\n/**\n * Specifies options for configuring block split operations.\n *\n * The `UBQSplitOptions` interface provides a set of properties that control the\n * behavior of the block splitting operation.\n *\n * Methods for configuring block split operations.\n *\n * @public\n */\ndeclare interface UBQSplitOptions {\n attachToParent: boolean;\n createParentTrackIfNeeded: boolean;\n selectNewBlock: boolean;\n}\n\n/**\n * @public Manage text variables within design templates.\n *\n * Text variables enable dynamic content replacement in design templates. Variables are stored\n * as key-value pairs and can be referenced in text blocks for automated content updates.\n *\n * ```ts\n * // Configure a text block that displays 'Hello, World'\n * const block = cesdk.engine.block.create('text');\n * cesdk.engine.block.setText(block, 'Hello, {{name}}!');\n * cesdk.engine.variable.setString('name', 'World');\n * ```\n *\n * @categoryDescription Variable Management\n * Create, update, retrieve, and remove text variables from the engine.\n */\nexport declare class VariableAPI {\n #private;\n\n /**\n * Get all text variable names currently stored in the engine.\n *\n * @category Variable Management\n * @returns List of variable names.\n */\n findAll(): string[];\n /**\n * Set a text variable's value.\n *\n * Creates a new variable if the key doesn't exist, or updates an existing one.\n *\n * @category Variable Management\n * @param key - The variable's key.\n * @param value - The text value to assign to the variable.\n */\n setString(key: string, value: string): void;\n /**\n * Get a text variable's value.\n *\n * @category Variable Management\n * @param key - The variable's key.\n * @returns The text value of the variable.\n */\n getString(key: string): string;\n /**\n * Remove a text variable from the engine.\n *\n * @category Variable Management\n * @param key - The variable's key to remove.\n */\n remove(key: string): void;\n}\n\n/** @public */\nexport declare interface Vec2 {\n x: number;\n y: number;\n}\n\n/** @public */\nexport declare interface Vec3 {\n x: number;\n y: number;\n z: number;\n}\n\n/** @public */\nexport declare type VerticalBlockAlignment = TextVerticalAlignment;\n\n/** @public */\nexport declare type VerticalContentFillAlignment = (typeof VerticalContentFillAlignmentValues)[number];\n\n/** @public */\nexport declare const VerticalContentFillAlignmentValues: readonly [\"Top\", \"Center\", \"Bottom\"];\n\n/**\n * Represents the options for exporting a video.\n *\n * Defines the possible options for exporting a video.\n * - 'mimeType': The MIME type of the output video file.\n * - 'onProgress': A callback which reports on the progress of the export.\n * - 'h264Profile': Determines the encoder feature set and in turn the quality, size and speed of the\n encoding process.\n * - 'h264Level': Controls the H.264 encoding level.\n * - 'videoBitrate': The video bitrate in bits per second.\n * - 'audioBitrate': The audio bitrate in bits per second.\n * - 'timeOffset': The time offset in seconds of the scene's timeline from which the video will start.\n * - 'duration': The duration in seconds of the final video.\n * - 'framerate': The target framerate of the exported video in Hz.\n * - 'targetWidth': An optional target width used in conjunction with target height.\n * - 'targetHeight': An optional target height used in conjunction with target width.\n * - 'abortSignal': An abort signal that can be used to cancel the export.\n *\n * @public\n */\nexport declare type VideoExportOptions = {\n /**\n * The MIME type of the output video file.\n *\n * @defaultValue 'video/mp4'\n */\n mimeType?: VideoMimeType;\n /**\n * A callback which reports on the progress of the export.\n */\n onProgress?: (numberOfRenderedFrames: number, numberOfEncodedFrames: number, totalNumberOfFrames: number) => void;\n /**\n * Determines the encoder feature set and in turn the quality, size and speed of the encoding process.\n *\n * @defaultValue 77 (Main)\n */\n h264Profile?: number;\n /**\n * Controls the H.264 encoding level. This relates to parameters used by the encoder such as bit rate,\n * timings and motion vectors. Defined by the spec are levels 1.0 up to 6.2. To arrive at an integer value,\n * the level is multiplied by ten. E.g. to get level 5.2, pass a value of 52.\n *\n * @defaultValue 52\n */\n h264Level?: number;\n /**\n * The video bitrate in bits per second. Maximum bitrate is determined by h264Profile and h264Level.\n * If the value is 0, the bitrate is automatically determined by the engine.\n */\n videoBitrate?: number;\n /**\n * The audio bitrate in bits per second.\n * If the value is 0, the bitrate is automatically determined by the engine (128kbps for stereo AAC stream).\n */\n audioBitrate?: number;\n /**\n * The time offset in seconds of the scene's timeline from which the video will start.\n *\n * @defaultValue 0\n */\n timeOffset?: number;\n /**\n * The duration in seconds of the final video.\n *\n * @defaultValue The duration of the scene.\n */\n duration?: number;\n /**\n * The target framerate of the exported video in Hz.\n *\n * @defaultValue 30\n */\n framerate?: number;\n /**\n * An optional target width used in conjunction with target height.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetWidth?: number;\n /**\n * An optional target height used in conjunction with target width.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetHeight?: number;\n /**\n * If true, the export will include text bounding boxes that account for glyph overhangs.\n * When enabled, text blocks with glyphs that extend beyond their frame (e.g., decorative fonts with swashes)\n * will be exported with the full glyph bounds visible, preventing text clipping.\n *\n * @defaultValue false\n */\n allowTextOverhang?: boolean;\n /**\n * An abortsignal that can be used to cancel the export.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * Represents the video MIME types used in the editor.\n *\n * @categoryDescription Video MIME Type\n * Defines the possible video MIME types used in the editor.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n *\n * @public\n */\nexport declare type VideoMimeType = Extract<MimeType_2, 'video/mp4' | 'video/quicktime'>;\n\n/** @public */\nexport declare type WidthMode = (typeof WidthModeValues)[number];\n\n/** @public */\nexport declare const WidthModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Describes a rectangle on the screen.\n *\n * The `XYWH` type is a tuple that contains four numbers representing the x and y coordinates\n * of the top-left corner of the rectangle, as well as the width and height of the rectangle.\n *\n * @categoryDescription XYWH\n * Methods for working with rectangles on the screen.\n *\n * @public\n */\nexport declare type XYWH = [x: number, y: number, w: number, h: number];\n\n/**\n * The axis(es) for which to auto-fit.\n * @public\n */\nexport declare type ZoomAutoFitAxis = 'Horizontal' | 'Vertical' | 'Both';\n\n/**\n * Options for zooming to a block with optional animation.\n * @public\n */\nexport declare type ZoomOptions = {\n /** Padding configuration around the block */\n padding?: number | {\n x?: number;\n y?: number;\n } | {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n };\n /** Animation configuration - boolean for default animation or object for custom settings */\n animate?: boolean | {\n /** Duration of the animation in seconds */\n duration?: number;\n /** Easing function for the animation */\n easing?: AnimationEasing;\n /** Whether the animation can be interrupted */\n interruptible?: boolean;\n };\n};\n\nexport { }\n",
|
|
5
|
+
"docs/api/index.d.ts": "/**\n * Options for adding images to the scene.\n * @public\n */\nexport declare type AddImageOptions = {\n /** How the image should be sized and positioned */\n sizeMode?: SizeMode;\n /** How the position should be interpreted */\n positionMode?: PositionMode;\n /** X position in scene design units */\n x?: number;\n /** Y position in scene design units */\n y?: number;\n /** Corner radius for rounded corners in scene design units */\n cornerRadius?: number;\n /** Size for the image - can be a number for equal width/height or an object */\n size?: number | {\n /** Width in scene design units */\n width: number;\n /** Height in scene design units */\n height: number;\n };\n /** Timeline configuration for video scenes */\n timeline?: {\n /** Start time offset in seconds */\n timeOffset?: number;\n /** Duration in seconds */\n duration?: number;\n };\n /** Drop shadow configuration */\n shadow?: DropShadowOptions;\n /** Animation configuration */\n animation?: AnimationOptions;\n};\n\n/**\n * Options for adding videos to the scene.\n * @public\n */\nexport declare interface AddVideoOptions {\n /** How the video should be sized and positioned */\n sizeMode?: SizeMode;\n /** How the position should be interpreted */\n positionMode?: PositionMode;\n /** X position in scene design units */\n x?: number;\n /** Y position in scene design units */\n y?: number;\n /** Corner radius for rounded corners in scene design units */\n cornerRadius?: number;\n /** Timeline configuration */\n timeline?: {\n /** Start time offset in seconds */\n timeOffset?: number;\n /** Duration in seconds */\n duration?: number;\n };\n /** Drop shadow configuration */\n shadow?: DropShadowOptions;\n /** Animation configuration */\n animation?: AnimationOptions;\n}\n\n/**\n * The shorthand block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * @public\n */\nexport declare const ANIMATION_TYPES: readonly [\"slide\", \"pan\", \"fade\", \"blur\", \"grow\", \"zoom\", \"pop\", \"wipe\", \"baseline\", \"crop_zoom\", \"spin\", \"spin_loop\", \"fade_loop\", \"blur_loop\", \"pulsating_loop\", \"breathing_loop\", \"jump_loop\", \"squeeze_loop\", \"sway_loop\", \"scale_loop\", \"typewriter_text\", \"block_swipe_text\", \"spread_text\", \"merge_text\", \"ken_burns\"];\n\n/** @public */\nexport declare type AnimationBaselineDirection = (typeof AnimationBaselineDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationBaselineDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationBlockSwipeTextDirection = (typeof AnimationBlockSwipeTextDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationBlockSwipeTextDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationEasing = (typeof AnimationEasingValues)[number];\n\n/** @public */\nexport declare const AnimationEasingValues: readonly [\"Linear\", \"EaseIn\", \"EaseOut\", \"EaseInOut\", \"EaseInQuart\", \"EaseOutQuart\", \"EaseInOutQuart\", \"EaseInQuint\", \"EaseOutQuint\", \"EaseInOutQuint\", \"EaseInBack\", \"EaseOutBack\", \"EaseInOutBack\", \"EaseInSpring\", \"EaseOutSpring\", \"EaseInOutSpring\"];\n\n/**\n * Configuration options for animations.\n * @public\n */\nexport declare type AnimationEntry = {\n /** The type of animation to apply */\n type: AnimationType;\n /** Duration of the animation in seconds */\n duration: number;\n /** Easing function for the animation */\n easing?: AnimationEasing;\n};\n\n/** @public */\nexport declare type AnimationGrowDirection = (typeof AnimationGrowDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationGrowDirectionValues: readonly [\"Horizontal\", \"Vertical\", \"All\", \"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\n\n/** @public */\nexport declare type AnimationJumpLoopDirection = (typeof AnimationJumpLoopDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationJumpLoopDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationKenBurnsDirection = (typeof AnimationKenBurnsDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationKenBurnsDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/** @public */\nexport declare type AnimationMergeTextDirection = (typeof AnimationMergeTextDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationMergeTextDirectionValues: readonly [\"Right\", \"Left\"];\n\n/**\n * Options for configuring animations (in, loop, out animations).\n * @public\n */\nexport declare type AnimationOptions = {\n /** Animation when the element enters */\n in?: AnimationEntry;\n /** Animation that loops while the element is visible */\n loop?: AnimationEntry;\n /** Animation when the element exits */\n out?: AnimationEntry;\n};\n\n/** @public */\nexport declare type AnimationSpinDirection = (typeof AnimationSpinDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationSpinDirectionValues: readonly [\"Clockwise\", \"CounterClockwise\"];\n\n/** @public */\nexport declare type AnimationSpinLoopDirection = (typeof AnimationSpinLoopDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationSpinLoopDirectionValues: readonly [\"Clockwise\", \"CounterClockwise\"];\n\n/**\n * The block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * Refer to {@link AnimationTypeShorthand} and {@link AnimationTypeLonghand} for more details.\n * @public\n */\nexport declare type AnimationType = AnimationTypeShorthand | AnimationTypeLonghand;\n\n/**\n * The longhand block type IDs for the animation blocks. These are the IDs used to create new animations\n * using `cesdk.engine.block.createAnimation(id)`.\n * @public\n */\nexport declare type AnimationTypeLonghand = `//ly.img.ubq/animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport declare type AnimationTypeShorthand = (typeof ANIMATION_TYPES)[number];\n\n/** @public */\nexport declare type AnimationTypewriterTextWritingStyle = (typeof AnimationTypewriterTextWritingStyleValues)[number];\n\n/** @public */\nexport declare const AnimationTypewriterTextWritingStyleValues: readonly [\"Character\", \"Word\"];\n\n/** @public */\nexport declare type AnimationWipeDirection = (typeof AnimationWipeDirectionValues)[number];\n\n/** @public */\nexport declare const AnimationWipeDirectionValues: readonly [\"Up\", \"Right\", \"Down\", \"Left\"];\n\n/**\n * Represents the application MIME types used in the editor.\n *\n * @categoryDescription Application MIME Type\n * Defines the possible application MIME types used in the editor.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n */\nexport declare type ApplicationMimeType = Extract<MimeType_2, 'application/octet-stream' | 'application/pdf' | 'application/zip'>;\n\n/**\n * Options for applying an asset to the scene.\n * @public\n */\nexport declare interface ApplyAssetOptions {\n /**\n * How the asset should be placed in the scene.\n * - 'clip': Background clip placed on background track\n * - 'overlay': Foreground overlay placed at playhead\n */\n clipType?: 'clip' | 'overlay';\n /**\n * Additional custom context options.\n * Allows passing arbitrary data to middleware for custom placement logic.\n */\n [key: string]: unknown;\n}\n\n/**\n * Generic asset information\n * @public\n */\nexport declare interface Asset {\n /**\n * The unique id of this asset.\n */\n id: string;\n /** Groups of the asset. */\n groups?: AssetGroups;\n /** Asset-specific and custom meta information */\n meta?: AssetMetaData;\n /** Structured asset-specific data */\n payload?: AssetPayload;\n}\n\n/**\n * @public Manage asset sources and apply assets to scenes.\n *\n * Asset sources provide assets like images, videos, fonts, and other media that can be applied to design blocks.\n * This API allows registering custom asset sources, querying available assets, and applying them to scenes or specific blocks.\n * It supports both local and remote asset sources, with extensible middleware for custom asset handling.\n *\n * @categoryDescription Asset Source Management\n * Register, remove, and query asset sources for different types of media.\n *\n * @categoryDescription Asset Discovery\n * Search and filter assets from registered sources with advanced query options.\n *\n * @categoryDescription Asset Application\n * Apply assets to scenes, blocks, or specific properties with customizable behavior.\n *\n * @categoryDescription Asset Lifecycle\n * Add, remove, and manage assets within local asset sources.\n *\n * @categoryDescription Asset Information\n * Retrieve metadata, credits, licenses, and supported formats from asset sources.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to asset source changes and lifecycle events.\n */\nexport declare class AssetAPI {\n #private;\n\n /**\n * Register middleware that intercepts asset application to scenes.\n *\n * The middleware function receives the source ID, asset result, the original apply function,\n * and a context object containing options about how the asset should be applied.\n * It can perform custom logic before, after, or instead of the default asset application.\n *\n * @example\n * ```ts\n * engine.asset.registerApplyMiddleware(async (sourceId, assetResult, apply, context) => {\n * // Access context to determine placement intent\n * console.log('Clip type:', context.clipType); // 'clip', 'overlay', or undefined\n * console.log('Custom data:', context.myCustomField); // Access custom fields\n *\n * // do something before applying the asset\n * // You still have the choice to call apply or skip it\n * const blockId = await apply(sourceId, assetResult);\n * // do something after applying the asset\n * return blockId;\n * })\n * ```\n *\n * @category Asset Application\n * @param middleware - The middleware function that is called before applying the asset.\n * @returns A function that can be used to remove the middleware.\n */\n registerApplyMiddleware(middleware: (sourceId: string, assetResult: AssetResult, apply: AssetAPI['apply'], context: ApplyAssetOptions) => Promise<DesignBlockId | undefined>): VoidFunction;\n /**\n * Register middleware that intercepts asset application to specific blocks.\n *\n * The middleware function receives the source ID, asset result, target block, and the original apply function.\n * It can perform custom logic before, after, or instead of the default block asset application.\n *\n * @example\n * ```ts\n * engine.asset.registerApplyToBlockMiddleware(async (sourceId, assetResult, block, applyToBlock) => {\n * // do something before applying the asset\n * // You still have the choice to call applyToBlock or skip it\n * await applyToBlock(sourceId, assetResult, block);\n * // do something after applying the asset\n * })\n * ```\n *\n * @category Asset Application\n * @param middleware - The middleware function that is called before applying the asset.\n * @returns A function that can be used to remove the middleware.\n */\n registerApplyToBlockMiddleware(middleware: (sourceId: string, assetResult: AssetResult, block: DesignBlockId, applyToBlock: AssetAPI['applyToBlock']) => Promise<void>): VoidFunction;\n /**\n * Add a custom asset source with unique ID.\n *\n * The asset source provides methods for finding assets, applying them to scenes or blocks,\n * and managing asset lifecycle. All source operations are handled asynchronously.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * });\n * ```\n *\n * @category Asset Source Management\n * @param source - The asset source configuration.\n */\n addSource(source: AssetSource): void;\n /**\n * Add a local asset source.\n *\n * Local asset sources allow dynamic asset management through the add/remove methods.\n * You can specify supported MIME types to restrict what assets can be added.\n *\n * ```javascript\n * engine.asset.addLocalSource('local-source');\n * ```\n *\n * @category Asset Source Management\n * @param id - Unique identifier for the asset source.\n * @param supportedMimeTypes - The mime types of assets that are allowed to be added to this local source.\n * @param applyAsset - An optional callback that can be used to override the default behavior of applying a given asset result to the active scene.\n * @param applyAssetToBlock - An optional callback that can be used to override the default behavior of applying an asset result to a given block.\n */\n addLocalSource(id: string, supportedMimeTypes?: string[], applyAsset?: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>, applyAssetToBlock?: (asset: CompleteAssetResult, block: DesignBlockId) => Promise<void>): void;\n /**\n * Creates a new local asset source from a JSON string containing asset definitions.\n *\n * The JSON structure should contain a `version` field, an `id` field specifying the asset source identifier,\n * and an `assets` array with asset definitions. Each asset should have an `id`, localized `label` object,\n * and a `meta` object containing asset-specific properties like `uri`, `thumbUri`, `blockType`, etc.\n *\n * Optionally, you can provide a `basePath` for resolving relative URLs and additional options including a\n * `matcher` array to filter which assets are loaded based on their IDs. The matcher patterns support wildcard\n * matching using `*`. If multiple patterns are provided, an asset is included if it matches ANY of the patterns.\n *\n * @category Asset Source Management\n * @param contentJSON - The JSON string containing the asset definitions.\n * @param basePath - An optional base path with which \\{\\{base_url\\}\\} strings in the assets should be replaced. If no value is provided, settings.basePath is used.\n * @param options - Optional configuration:\n * - `matcher`: Array of patterns to filter assets by ID. Supports `*` wildcard. An asset is included if it matches ANY pattern.\n * @returns The ID of the newly created asset source (as specified in the JSON's `id` field).\n *\n * @example\n * ```javascript\n * // Load all assets from JSON\n * const json = JSON.stringify({\n * \"version\": \"2.0.0\",\n * \"id\": \"my.custom.assets\",\n * \"assets\": [\n * {\n * \"id\": \"sample_asset\",\n * \"label\": { \"en\": \"Sample Asset\" },\n * \"meta\": {\n * \"uri\": \"https://example.com/asset.jpg\",\n * \"thumbUri\": \"https://example.com/thumb.jpg\",\n * \"blockType\": \"//ly.img.ubq/image\"\n * }\n * }\n * ]\n * });\n * const sourceId = await engine.asset.addLocalAssetSourceFromJSONString(json);\n * console.log('Created asset source:', sourceId); // \"my.custom.assets\"\n *\n * // Load with custom base path\n * const sourceId2 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * 'https://example.com/'\n * );\n *\n * // Load only assets matching one of the patterns\n * const sourceId3 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * undefined,\n * { matcher: ['sample_*', '*_asset'] }\n * );\n *\n * // Load with custom base path and matcher\n * const sourceId4 = await engine.asset.addLocalAssetSourceFromJSONString(\n * json,\n * 'https://example.com/',\n * { matcher: ['portrait_*', 'landscape_*'] }\n * );\n * ```\n */\n addLocalAssetSourceFromJSONString(contentJSON: string, basePath?: string, options?: {\n matcher?: string[];\n }): Promise<string>;\n /**\n * Creates a new local asset source from a JSON URI.\n *\n * Loads and parses a JSON file from the specified URI to create an asset source. The JSON structure\n * should contain a `version` field, an `id` field specifying the asset source identifier, and an\n * `assets` array with asset definitions. The created asset source will have the ID specified in the\n * JSON's `id` field, and all assets defined in the JSON will be added to the source.\n *\n * Note: The parent directory of the content.json URI will be used as the base path for resolving\n * relative URLs in the asset definitions (e.g., `{{base_url}}` placeholders).\n *\n * @category Asset Source Management\n * @param contentURI - The URI for the JSON file to load and parse.\n * @param options - Optional configuration:\n * - `matcher`: Array of patterns to filter assets by ID. Supports `*` wildcard. An asset is included if it matches ANY pattern.\n * @returns The ID of the newly created asset source (as specified in the JSON's `id` field).\n *\n * @example\n * ```javascript\n * // Load all audio assets from IMG.LY's CDN\n * const sourceId = await engine.asset.addLocalAssetSourceFromJSONURI(\n * 'https://cdn.img.ly/assets/demo/v3/ly.img.audio/content.json'\n * );\n * console.log('Loaded asset source:', sourceId); // \"ly.img.audio\"\n *\n * // Load only assets matching one of the patterns\n * const sourceId2 = await engine.asset.addLocalAssetSourceFromJSONURI(\n * 'https://cdn.img.ly/assets/demo/v3/ly.img.image/content.json',\n * { matcher: ['image-portrait-*', 'image-landscape-*'] }\n * );\n * ```\n */\n addLocalAssetSourceFromJSONURI(contentURI: string, options?: {\n matcher?: string[];\n }): Promise<string>;\n /**\n * Remove a registered asset source.\n *\n * This permanently removes the asset source and all its associated assets.\n * Any ongoing operations with this source will be cancelled.\n *\n * ```javascript\n * engine.asset.removeSource('asset-source-id');\n * ```\n *\n * @category Asset Source Management\n * @param id - The ID of the asset source to remove.\n */\n removeSource(id: string): void;\n /**\n * Get all registered asset source IDs.\n *\n * ```javascript\n * engine.asset.findAllSources();\n * ```\n *\n * @category Asset Source Management\n * @returns A list with the IDs of all registered asset sources.\n */\n findAllSources(): string[];\n /**\n * Search for assets in a specific source with advanced filtering.\n *\n * Supports pagination, text search, tag filtering, grouping, and sorting options.\n * Results include asset metadata, thumbnails, and application context.\n *\n * ```javascript\n * const result = await engine.asset.findAssets('asset-source-id', {\n * page: 0,\n * perPage: 100\n * });\n * const asset = result.assets[0];\n * ```\n *\n * @category Asset Discovery\n * @param sourceId - The ID of the asset source.\n * @param query - Query options to filter and sort the search results.\n * @returns Promise resolving to paginated search results.\n */\n findAssets(sourceId: string, query: AssetQueryData): Promise<AssetsQueryResult<CompleteAssetResult>>;\n /**\n * Fetch a specific asset by ID from an asset source.\n *\n * ```javascript\n * const asset = await engine.asset.fetchAsset('asset-source-id', 'asset-id', {\n * locale: 'en-US'\n * });\n * ```\n *\n * @category Asset Discovery\n * @param sourceId - The ID of the asset source to search in.\n * @param assetId - The ID of the asset to fetch.\n * @param params - Query parameters including locale (optional).\n * @returns Promise resolving to the complete asset result, or undefined if not found.\n */\n fetchAsset(sourceId: string, assetId: string, params?: Pick<AssetQueryData, 'locale'>): Promise<CompleteAssetResult | null>;\n /**\n * Get available asset groups from a source.\n *\n * Groups provide categorization for assets within a source, enabling filtered discovery.\n *\n * ```javascript\n * const groups = engine.asset.getGroups(customSource.id);\n * ```\n *\n * @category Asset Information\n * @param id - The ID of the asset source.\n * @returns Promise resolving to list of available group names.\n */\n getGroups(id: string): Promise<string[]>;\n /**\n * Get supported MIME types for an asset source.\n *\n * Returns the file types that can be added to this source. An empty result means all MIME types are supported.\n *\n * ```javascript\n * const mimeTypes = engine.asset.getSupportedMimeTypes('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns Array of supported MIME type strings.\n */\n getSupportedMimeTypes(sourceId: string): string[];\n /**\n * Get attribution credits for an asset source.\n *\n * ```javascript\n * const credits = engine.asset.getCredits('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's credits info consisting of a name and an optional URL.\n */\n getCredits(sourceId: string): {\n name: string;\n url: string | undefined;\n } | undefined;\n /**\n * Get license information for an asset source.\n *\n * ```javascript\n * const license = engine.asset.getLicense('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's license info consisting of a name and an optional URL.\n */\n getLicense(sourceId: string): {\n name: string;\n url: string | undefined;\n } | undefined;\n /**\n * Check if an asset source supports asset management.\n *\n * Returns true if the source allows adding and removing assets dynamically, via 'Add File' and 'Delete' button on the UI.\n * This is typically true for local asset sources and false for remote sources.\n *\n * ```javascript\n * engine.asset.canManageAssets('asset-source-id');\n * ```\n *\n * @category Asset Information\n * @param sourceId - The ID of the asset source to check.\n * @returns True if the source supports asset management operations.\n */\n canManageAssets(sourceId: string): boolean;\n /**\n * Add an asset to a local asset source.\n *\n * Only works with local asset sources that support asset management.\n * The asset will be validated against the source's supported MIME types.\n *\n * ```javascript\n * engine.asset.addAssetToSource('local-source', {\n * id: 'asset-id',\n * label: {\n * en: 'My Asset'\n * },\n * meta: {\n * uri: 'https://example.com/asset.jpg',\n * mimeType: 'image/jpeg'\n * }\n * });\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceId - The local asset source ID that the asset should be added to.\n * @param asset - The asset definition to add to the source.\n */\n addAssetToSource(sourceId: string, asset: AssetDefinition): void;\n /**\n * Remove an asset from a local asset source.\n *\n * Only works with local asset sources that support asset management.\n * The asset will be permanently deleted from the source.\n *\n * ```javascript\n * engine.asset.removeAssetFromSource('local-source', 'asset-id');\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceId - The id of the local asset source that currently contains the asset.\n * @param assetId - The id of the asset to be removed.\n */\n removeAssetFromSource(sourceId: string, assetId: string): void;\n /**\n * Apply an asset to the active scene.\n *\n * Creates a new block configured according to the asset's properties and adds it to the scene.\n * The behavior can be customized by providing an `applyAsset` function when registering the asset source,\n * or by passing context options to guide middleware behavior.\n *\n * @example\n * ```javascript\n * // Default behavior\n * await engine.asset.apply('asset-source-id', assetResult.assets[0]);\n * ```\n *\n * @example\n * ```javascript\n * // Foreground overlay placement\n * await engine.asset.apply('asset-source-id', assetResult.assets[0], {\n * clipType: 'overlay'\n * });\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param options - Optional configuration for asset application.\n * @returns Promise resolving to the created block ID, or undefined if no block was created.\n */\n apply(sourceId: string, assetResult: AssetResult, options?: ApplyAssetOptions): Promise<DesignBlockId | undefined>;\n /**\n * Apply an asset to a specific block.\n *\n * Modifies the target block's properties according to the asset's configuration.\n * The behavior can be customized by providing an `applyAssetToBlock` function when registering the asset source.\n *\n * ```javascript\n * await engine.asset.applyToBlock('asset-source-id', assetResult.assets[0]);\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param block - The block to apply the asset to.\n */\n applyToBlock(sourceId: string, assetResult: AssetResult, block: DesignBlockId): Promise<void>;\n /**\n * Apply a specific asset property to the currently selected element.\n *\n * Allows applying individual properties (like colors, fonts, or effects) from an asset\n * without creating a new block. The behavior can be customized by providing an `applyAssetProperty` function.\n *\n * ```javascript\n * const asset = assetResult.assets[0];\n * if (asset.payload && asset.payload.properties) {\n * for (const property of asset.payload.properties) {\n * await engine.asset.applyProperty('asset-source-id', asset, property);\n * }\n * }\n * ```\n *\n * @category Asset Application\n * @param sourceId - The ID of the asset source.\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param property - The specific asset property to apply.\n */\n applyProperty(sourceId: string, assetResult: AssetResult, property: AssetProperty): Promise<void>;\n /**\n * Apply an asset using the engine's default implementation.\n *\n * The default implementation already handles various different kinds of assets and acts as a good starting point.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * async applyAsset(assetResult) {\n * return engine.asset.defaultApplyAsset(assetResult);\n * },\n * });\n * ```\n *\n * @category Asset Application\n * @param assetResult - A single asset result from a `findAssets` query.\n * @returns Promise resolving to the created block ID, or undefined if no block was created.\n */\n defaultApplyAsset(assetResult: AssetResult): Promise<DesignBlockId | undefined>;\n /**\n * Apply an asset to a block using the engine's default implementation.\n *\n * The default implementation already handles various different kinds of assets and acts as a good starting point.\n *\n * ```javascript\n * engine.asset.addSource({\n * id: 'foobar',\n * async findAssets(queryData) {\n * return Promise.resolve({\n * assets: [\n * {\n * id: 'logo',\n * meta: {\n * uri: 'https://img.ly/static/ubq_samples/imgly_logo.jpg',\n * }\n * }\n * ],\n * total: 1,\n * currentPage: queryData.page,\n * nextPage: undefined\n * });\n * },\n * async applyAssetToBlock(assetResult, block) {\n * engine.asset.defaultApplyAssetToBlock(assetResult, block);\n * },\n * });\n * ```\n *\n * @category Asset Application\n * @param assetResult - A single asset result from a `findAssets` query.\n * @param block - The block to apply the asset to.\n */\n defaultApplyAssetToBlock(assetResult: AssetResult, block: DesignBlockId): Promise<void>;\n /**\n * Subscribe to asset source addition events.\n *\n * ```javascript\n * engine.asset.onAssetSourceAdded((sourceID) => {\n * console.log(`Added source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source is added.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceAdded: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Subscribe to asset source removal events.\n *\n * ```javascript\n * engine.asset.onAssetSourceRemoved((sourceID) => {\n * console.log(`Removed source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source is removed.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceRemoved: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Subscribe to asset source content change events.\n *\n * ```javascript\n * engine.asset.onAssetSourceUpdated((sourceID) => {\n * console.log(`Updated source: ${sourceID}`);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - The function called whenever an asset source's contents are updated.\n * @returns A method to unsubscribe from the event.\n */\n onAssetSourceUpdated: (callback: (sourceID: string) => void) => (() => void);\n /**\n * Notify the engine that an asset source's contents have changed.\n *\n * This triggers refresh of any UI components that display assets from this source\n * and notifies subscribers to the asset source update events.\n *\n * ```javascript\n * engine.asset.assetSourceContentsChanged('asset-source-id');\n * ```\n *\n * @category Asset Lifecycle\n * @param sourceID - The asset source whose contents changed.\n */\n assetSourceContentsChanged(sourceID: string): void;\n\n}\n\n/**\n * Asset boolean property definition\n * @public\n */\nexport declare interface AssetBooleanProperty {\n property: string;\n type: 'Boolean';\n value: boolean;\n defaultValue: boolean;\n}\n\n/**\n * Asset Color payload CMYK representation\n * @public\n */\nexport declare interface AssetCMYKColor {\n colorSpace: 'CMYK';\n c: number;\n m: number;\n y: number;\n k: number;\n}\n\n/**\n * Asset Color payload\n * @public\n */\nexport declare type AssetColor = AssetRGBColor | AssetCMYKColor | AssetSpotColor;\n\n/**\n * Asset color property definition\n * @public\n */\nexport declare interface AssetColorProperty {\n property: string;\n type: 'Color';\n value: Color;\n defaultValue: Color;\n}\n\n/**\n * Asset transform preset payload that snaps a block's frame to the intrinsic\n * aspect ratio of the block's content (e.g. the underlying image or video).\n * @public\n */\nexport declare interface AssetContentAspectRatio {\n type: 'ContentAspectRatio';\n}\n\n/**\n * Definition of an asset used if an asset is added to an asset source.\n * @public\n */\nexport declare interface AssetDefinition extends Asset {\n /**\n * Label used to display in aria-label and as a tooltip.\n * Will be also searched in a query and should be localized\n */\n label?: Record<Locale, string>;\n /**\n * Tags for this asset. Can be used for filtering, but is also useful for\n * free-text search. Since the label is searched as well as used for tooltips\n * you do not want to overdo it, but still add things which are searched.\n * Thus, it should be localized similar to the `label`.\n */\n tags?: Record<Locale, string[]>;\n}\n\n/**\n * Asset enum property definition\n * @public\n */\nexport declare interface AssetEnumProperty {\n property: string;\n type: 'Enum';\n value: string;\n defaultValue: string;\n options: string[];\n}\n\n/**\n * Filter expression — predicate or logical combinator. Combinators nest\n * arbitrarily. The union is mutually exclusive: an object with both\n * `and` and `or`, or with `property` next to a combinator key, is\n * rejected at the type level.\n *\n * Missing-key semantics for `not`: a predicate is `false` on an asset\n * that lacks the targeted field, so a negated `meta.foo === 'x'` matches\n * assets where `meta.foo !== 'x'` **and** assets that lack `meta.foo`\n * entirely.\n * @public\n */\nexport declare type AssetFilter = AssetPropertyFilter | {\n and: AssetFilter[];\n or?: never;\n not?: never;\n property?: never;\n} | {\n or: AssetFilter[];\n and?: never;\n not?: never;\n property?: never;\n} | {\n not: AssetFilter;\n and?: never;\n or?: never;\n property?: never;\n};\n\n/**\n * Asset transform preset payload fixed aspect ratio\n * @public\n */\nexport declare interface AssetFixedAspectRatio {\n type: 'FixedAspectRatio';\n width: number;\n height: number;\n}\n\n/**\n * Asset transform preset payload fixed size\n * @public\n */\nexport declare interface AssetFixedSize {\n type: 'FixedSize';\n width: number;\n height: number;\n designUnit: SceneDesignUnit;\n}\n\n/**\n * Asset transform preset payload free aspect ratio\n * @public\n */\nexport declare interface AssetFreeAspectRatio {\n type: 'FreeAspectRatio';\n}\n\n/**\n * An asset can be member of multiple groups. Groups have a semantic meaning\n * used to build and group UIs exploring the assets, e.g.sections in the\n * content library, or for things like topics in Unsplash for instance.\n *\n * Tags in comparison have are more loosely hold meaning used for extended\n * searching/filtering.\n * @public\n */\nexport declare type AssetGroups = string[];\n\n/**\n * Generic asset information\n * @public\n */\nexport declare type AssetMetaData = {\n /** The mime type of this asset or the data behind the asset's uri. */\n mimeType?: string;\n /** The type id of the design block that should be created from this asset. */\n blockType?: string;\n fillType?: string;\n shapeType?: string;\n kind?: string;\n uri?: string;\n thumbUri?: string;\n previewUri?: string;\n sourceSet?: Source[];\n filename?: string;\n vectorPath?: string;\n width?: number;\n height?: number;\n duration?: string;\n /**\n * Effect kind hint. Widened to `string` so this metadata stays\n * cross-binding (the narrow `EffectType` union remains the\n * source of truth for `BlockAPI.createEffect`).\n */\n effectType?: string;\n /**\n * Blur kind hint. Widened to `string` for the same reason as\n * `effectType` — the narrow `BlurType` union still gates\n * `BlockAPI.createBlur`.\n */\n blurType?: string;\n looping?: boolean;\n} & Record<string, unknown>;\n\n/**\n * Asset number property definition\n * @public\n */\nexport declare interface AssetNumberProperty {\n property: string;\n type: 'Int' | 'Float' | 'Double';\n value: number;\n defaultValue: number;\n min: number;\n max: number;\n step: number;\n}\n\n/**\n * Asset payload\n * @public\n */\nexport declare interface AssetPayload {\n color?: AssetColor;\n sourceSet?: Source[];\n typeface?: Typeface;\n transformPreset?: AssetTransformPreset;\n properties?: AssetProperty[];\n /** A declarative style preset the engine applies to text/caption blocks. */\n stylePreset?: AssetStylePreset;\n}\n\n/**\n * Asset property for payload\n * @public\n */\nexport declare type AssetProperty = AssetBooleanProperty | AssetColorProperty | AssetEnumProperty | AssetNumberProperty | AssetStringProperty;\n\n/**\n * A single property predicate. Exactly one of `contains` (case-insensitive\n * substring) or `equals` (case-insensitive equality) must be set — the\n * type forbids passing both or neither. On a string-array property\n * (`tags`, `groups`), the operator matches if any element matches.\n *\n * `meta.<key>` values are flat strings in the engine; if a meta value\n * was originally serialized as a number or boolean, stringify it the\n * same way before comparing.\n * @public\n */\nexport declare type AssetPropertyFilter = {\n property: AssetPropertyPath;\n} & ({\n contains: string;\n equals?: never;\n} | {\n equals: string;\n contains?: never;\n});\n\n/**\n * Dot-path against the resolved asset that a property predicate targets:\n * `label`, `id`, `tags`, `groups`, or `meta.<key>` (one segment — meta\n * values in the engine are flat strings).\n *\n * The template literal accepts `'meta.'` (empty key) because TypeScript's\n * `${string}` includes the empty string; the engine rejects this at\n * runtime with an explanatory error.\n * @public\n */\nexport declare type AssetPropertyPath = 'label' | 'tags' | 'id' | 'groups' | `meta.${string}`;\n\n/**\n * Defines a request for querying assets\n * @public\n */\nexport declare interface AssetQueryData {\n /** A query string used for (fuzzy) searching of labels and tags */\n query?: string;\n /** The current page queried for paginated views. */\n page: number;\n /**\n * Tags are searched with the query parameter, but this search is fuzzy.\n * If one needs to get assets with exactly the tag (from a tag cloud or filter)\n * this query parameter should be used.\n */\n tags?: string | string[];\n /** Query only these groups */\n groups?: AssetGroups;\n /** Filter out assets with this groups */\n excludeGroups?: AssetGroups;\n /**\n * Choose the locale of the labels and tags for localized search and filtering.\n * For local asset sources, labels and tags are resolved using a fallback chain:\n * requested locale → \"en\" → first available entry → empty default.\n */\n locale?: Locale;\n /**\n * The number of results queried. How many assets shall be returned regardless\n * of the total number of assets available.\n *\n * Together with `page` this can be used for pagination.\n */\n perPage: number;\n /**\n * The order to sort by if the asset source supports sorting.\n * If set to None, the order is the same as the assets were added to the source.\n */\n sortingOrder?: SortingOrder;\n /**\n * The key that identifies the meta data value to sort by or 'id' to sort by the asset ID.\n * If empty, the assets are sorted by the index.\n */\n sortKey?: string;\n /**\n * Sort assets that are marked as active first.\n */\n sortActiveFirst?: boolean;\n /**\n * Optional structured filter, AND-combined with the result of `query` /\n * `tags` / `groups` / `excludeGroups`. The top-level array is an implicit\n * AND of its entries. Each entry is either a property predicate\n * (`{ property, contains?, equals? }`) or a logical combinator\n * (`{ and: [...] }`, `{ or: [...] }`, `{ not: ... }`). Combinators nest.\n *\n * **When to use `filter` vs `tags` / `groups` / `excludeGroups`:**\n * The legacy `tags` / `groups` / `excludeGroups` fields remain\n * supported and are equivalent to filter predicates with `equals` and\n * implicit AND. Prefer `filter` for anything beyond a plain include/\n * exclude list — case-insensitive substrings, `meta.<key>` matches,\n * `or` / `not` combinators — and reach for the legacy fields only\n * when you want their case-sensitive exact-match semantics.\n *\n * Malformed filters reject the returned promise with the engine's\n * parse-error message (e.g. `\"Unknown asset property '…'\"`).\n *\n * @example\n * ```ts\n * filter: [\n * { property: 'label', contains: 'Roboto' },\n * { property: 'meta.languages', contains: 'de' },\n * { not: { property: 'meta.legacy', equals: 'true' } }\n * ]\n * ```\n */\n filter?: AssetFilter[];\n}\n\n/**\n * Single asset result of a query from the engine.\n * @public\n */\nexport declare interface AssetResult extends Asset {\n /** The locale of the label and tags */\n locale?: Locale;\n /** The label of the result. Used for description and tooltips. */\n label?: string;\n /** The tags of this asset. Used for filtering and free-text searching. */\n tags?: string[];\n /** If the asset is marked as active, i.e., used in a currently selected element. */\n active?: boolean;\n /** Credits for the artist of the asset */\n credits?: {\n name: string;\n url?: string;\n };\n /** License for this asset. Overwrites the source license if present */\n license?: {\n name: string;\n url?: string;\n };\n /** UTM parameters for the links inside the credits */\n utm?: {\n source?: string;\n medium?: string;\n };\n}\n\n/**\n * Represents the credits for an asset result.\n *\n * The `AssetResultCredits` interface provides a set of properties that describe the credits\n * for an asset result, including the name and URL of the credits.\n *\n * Methods for working with the credits of asset results.\n *\n * @public\n */\ndeclare interface AssetResultCredits {\n name: string;\n url: string;\n}\n\n/**\n * Represents the license for an asset result.\n *\n * The `AssetResultLicense` interface provides a set of properties that describe the license\n * for an asset result, including the name and URL of the license.\n *\n * Methods for working with the license of asset results.\n *\n * @public\n */\ndeclare interface AssetResultLicense {\n name: string;\n url: string;\n}\n\n/**\n * Asset Color payload RGB representation\n * @public\n */\nexport declare interface AssetRGBColor {\n colorSpace: 'sRGB';\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * A source of assets\n * @public\n */\nexport declare interface AssetSource {\n /** The unique id of the API */\n id: string;\n /** Find all asset for the given type and the provided query data. */\n findAssets(queryData: AssetQueryData): Promise<AssetsQueryResult | undefined>;\n /** Fetch an asset by id. */\n fetchAsset?: (id: string, params?: Pick<AssetQueryData, 'locale'>) => Promise<AssetResult | null>;\n /** Return every available group */\n getGroups?: () => Promise<string[]>;\n /** Credits for the source/api */\n credits?: {\n name: string;\n url?: string;\n };\n /** General license for all asset from this source */\n license?: {\n name: string;\n url?: string;\n };\n /**\n * Can the source add and remove assets dynamically? If `false`\n * methods like `addAsset` and `removeAsset` will throw an\n * error.\n *\n * @deprecated Will be removed in v1.11. Use `canAdd` and `canRemove` in the asset library configuration\n */\n canManageAssets?: boolean;\n /**\n * Apply the given asset result to the active scene.\n * You can override this with custom behavior.\n * @returns the id of a new block if one was created from the asset.\n */\n applyAsset?: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>;\n /**\n * Apply the given asset result to the given block.\n * You can override this with custom behavior.\n */\n applyAssetToBlock?: (asset: CompleteAssetResult, block: DesignBlockId) => Promise<void>;\n /**\n * Apply a property of the given asset result to the active scene.\n * You can override this with custom behavior.\n */\n applyAssetProperty?: (asset: CompleteAssetResult, property: AssetProperty) => Promise<void>;\n /**\n * Adds the given asset to this source. Throws an error if the asset source\n * does not support adding assets.\n */\n addAsset?(asset: AssetDefinition): void;\n /**\n * Removes the given asset from this source.\n */\n removeAsset?(assetId: string): void;\n /**\n * Generates a list of supported mime types for this source.\n *\n * @returns a list of the mime types should be supported by this source\n */\n getSupportedMimeTypes?(): string[] | undefined;\n}\n\n/**\n * Asset Color payload SpotColor representation\n * @public\n */\nexport declare interface AssetSpotColor {\n colorSpace: 'SpotColor';\n name: string;\n externalReference: string;\n representation: AssetRGBColor | AssetCMYKColor;\n}\n\n/**\n * Return type of a `findAssets` query.\n * @public\n */\nexport declare interface AssetsQueryResult<T extends AssetResult = AssetResult> {\n /** The assets in the requested page */\n assets: T[];\n /** The current, requested page */\n currentPage: number;\n /** The next page to query if it exists */\n nextPage?: number;\n /** How many assets are there in total for the current query regardless of the page */\n total: number;\n}\n\n/**\n * Asset string property definition\n * @public\n */\nexport declare interface AssetStringProperty {\n property: string;\n type: 'String';\n value: string;\n defaultValue: string;\n}\n\n/**\n * A declarative style preset the engine applies to text and caption blocks. The engine parses and\n * applies it identically on every platform. Lives in {@link AssetPayload.stylePreset}.\n *\n * Most of the look is in {@link AssetStylePreset.properties}; the other fields cover the font,\n * size-relative scaling and animations.\n * @public\n */\nexport declare interface AssetStylePreset {\n /**\n * The block type this preset is for. Used as the type to create when the preset is applied with no\n * target block, and as the apply filter (it only restyles a block of this type). Omitted applies to any\n * block. Style presets target text and caption blocks; the value is the longhand id, which the engine\n * matches against the block's `getType()`.\n */\n blockType?: '//ly.img.ubq/text' | '//ly.img.ubq/caption';\n /**\n * How the preset combines with the block's current look. `'replace'` (the default) also clears the\n * decorations and animations the preset omits, so switching presets never stacks; `'merge'` layers\n * the preset on top, keeping everything it does not set. Either way the block's text content is never\n * touched, and its size only changes when the preset asks for it (`fontSize.resizeExistingOnApply`,\n * or a `text/path` baseline adopting its bounding box).\n */\n mode?: 'replace' | 'merge';\n /**\n * Font to apply. The engine resolves `family` against the registered typefaces and matches\n * `weight`/`style`. Ignored when the family is empty or not registered.\n */\n typeface?: {\n family: string;\n weight?: FontWeight;\n style?: FontStyle;\n };\n /**\n * Scene-relative font size. `scale` is a unitless multiplier on the scene's base font size (1 = the\n * base size), sizing a block created from the preset. With `resizeExistingOnApply: true` the same size\n * also resizes an existing block on apply. For an absolute size, set `properties['text/fontSize']`\n * instead (it takes precedence).\n */\n fontSize?: {\n scale: number;\n resizeExistingOnApply?: boolean;\n };\n /**\n * Lengths that scale with the block's font size. Each entry sets its `property` to `ratio × fontSize`\n * — e.g. `{ property: 'stroke/width', ratio: 0.012 }` makes the stroke width `0.012 × fontSize`. Keeps\n * a preset's stroke width, drop-shadow offset/blur, … proportional at any size.\n */\n scaleWithFontSize?: Array<{\n property: AssetStylePresetScalableProperty;\n ratio: number;\n }>;\n /**\n * The bulk of the look: typography plus the `fill/*`, `stroke/*`, `dropShadow/*` and\n * `backgroundColor/*` decorations with their `…/enabled` toggles. Known paths are value-checked and\n * autocomplete. See {@link AssetStylePresetProperties}.\n */\n properties?: AssetStylePresetProperties;\n /** Entrance animation. */\n inAnimation?: AssetStylePresetAnimation;\n /** Exit animation. */\n outAnimation?: AssetStylePresetAnimation;\n /** Looping animation. */\n loopAnimation?: AssetStylePresetAnimation;\n}\n\n/**\n * An animation slot of an {@link AssetStylePreset} (`inAnimation`, `outAnimation` or `loopAnimation`).\n * @public\n */\nexport declare interface AssetStylePresetAnimation {\n /** The animation block type to apply, e.g. `'//ly.img.ubq/animation/slide'`. */\n type: AnimationTypeLonghand;\n /** Configures the animation as a map of its property paths to values. */\n properties?: AssetStylePresetAnimationProperties;\n}\n\n/**\n * The parameters of an {@link AssetStylePresetAnimation}: a map of the animation's property paths to\n * values. The animation's `animation/*` properties (e.g. `animation/slide/fade`,\n * `animation/grow/scaleFactor`) are value-checked and autocomplete, as are the animation controls\n * (`playback/duration`, `animationEasing`, `textWritingStyle`, `textWritingOverlap`); any other\n * property path is still accepted. These are animation paths, distinct from the block-property paths\n * in {@link AssetStylePresetProperties}.\n * @public\n */\nexport declare type AssetStylePresetAnimationProperties = {\n [K in Extract<BoolPropertyName, `animation/${string}`>]?: boolean;\n} & {\n [K in Extract<EnumPropertyName, `animation/${string}`>]?: string;\n} & {\n [K in Extract<FloatPropertyName, `animation/${string}`>]?: number;\n} & {\n [K in Extract<ColorPropertyName, `animation/${string}`>]?: RGBColor | RGBAColor;\n} & {\n /** Animation controls applied outside the `animation/*` properties. */\n 'playback/duration'?: number;\n animationEasing?: string;\n textWritingStyle?: string;\n textWritingOverlap?: number;\n} & {\n [path: string]: AssetStylePresetPropertyValue;\n};\n\n/**\n * The look of an {@link AssetStylePreset}: a map of property paths to values. Known paths are\n * value-checked and autocomplete (e.g. `stroke/enabled` must be a boolean, `stroke/width` a number,\n * `fill/solid/color` a color); any other property path is still accepted with the broader\n * {@link AssetStylePresetPropertyValue}. Keys without a `/` are namespaced to the block (`text/` or\n * `caption/`); keys with a `/` are used verbatim.\n * @public\n */\nexport declare type AssetStylePresetProperties = {\n [K in BoolPropertyName as string extends K ? never : K]?: boolean;\n} & {\n [K in IntPropertyName as string extends K ? never : K]?: number;\n} & {\n [K in FloatPropertyName as string extends K ? never : K]?: number;\n} & {\n [K in DoublePropertyName as string extends K ? never : K]?: number;\n} & {\n [K in StringPropertyName as string extends K ? never : K]?: string;\n} & {\n [K in EnumPropertyName as string extends K ? never : K]?: string;\n} & {\n [K in ColorPropertyName as string extends K ? never : K]?: RGBColor | RGBAColor;\n} & {\n /**\n * The text-on-path baseline (see `setTextOnPath`): a single-subpath SVG path string in the block's\n * local coordinate space wraps the block's text on the path and resizes the block to the path's\n * bounding box; an explicit `null` clears the path and restores normal layout. This is a virtual\n * preset property — the baseline path is not a reflected block property, so the engine routes it\n * through `setTextOnPath`, inheriting its validation. Pair it with `text/pathOffset` and\n * `text/pathFlipped` (plain reflected properties) to fully define the path state. Which curve is\n * applied is identified by the path value itself — compare `getTextOnPath` against an entry's\n * `text/path`.\n */\n 'text/path'?: string | null;\n} & {\n [path: string]: AssetStylePresetPropertyValue;\n};\n\n/**\n * A value a style preset can set on a property: a boolean, number, string (including enum values) or\n * an RGB(A) color. Colors must be RGB(A) (`{ r, g, b, a? }`); CMYK and spot colors are not supported in\n * presets. Structs and source sets cannot be set from a preset. A `null` value is ignored for regular\n * properties; for the virtual `text/path` property it clears the baseline path.\n * @public\n */\nexport declare type AssetStylePresetPropertyValue = boolean | number | string | RGBColor | RGBAColor | null;\n\n/**\n * A length property a style preset may scale with the block's font size (see\n * {@link AssetStylePreset.scaleWithFontSize}). Restricted to the decoration lengths for which scaling is\n * meaningful — stroke width, drop-shadow offset/blur and the caption background corner radius — not\n * arbitrary numeric properties like `rotation` or `opacity`.\n * @public\n */\nexport declare type AssetStylePresetScalableProperty = 'stroke/width' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'backgroundColor/cornerRadius';\n\n/**\n * Transform preset payload\n * @public\n */\nexport declare type AssetTransformPreset = AssetFixedAspectRatio | AssetFreeAspectRatio | AssetContentAspectRatio | AssetFixedSize;\n\n/**\n * An async-compatible URI resolver function.\n *\n * May return a plain string for synchronous resolution, or a `Promise<string>`\n * for asynchronous resolution. The engine preserves synchronous behaviour when\n * a plain string is returned (important for call-sites that expect immediate\n * resolution).\n * @public\n */\nexport declare type AsyncURIResolver = (URI: string, defaultURIResolver: (URI: string) => string) => Promise<string> | string;\n\n/**\n * Represents the options for exporting audio.\n *\n * Defines the possible options for exporting audio.\n * - 'mimeType': The MIME type of the output audio file.\n * - 'onProgress': A callback which reports on the progress of the export.\n * - 'timeOffset': The time offset in seconds relative to the target block.\n * - 'duration': The duration in seconds of the final audio.\n * - 'sampleRate': The sample rate of the exported audio.\n * - 'numberOfChannels': The number of channels of the exported audio.\n * - 'skipEncoding': Skip encoding (audio data will be returned immediately even if not compatible with target MIME type).\n *\n * @public\n */\nexport declare type AudioExportOptions = {\n /**\n * The MIME type of the output audio file.\n *\n * @defaultValue 'audio/wav'\n */\n mimeType?: AudioMimeType;\n /**\n * A callback which reports on the progress of the export.\n */\n onProgress?: (numberOfRenderedFrames: number, numberOfEncodedFrames: number, totalNumberOfFrames: number) => void;\n /**\n * The time offset in seconds relative to the target block.\n *\n * @defaultValue 0\n */\n timeOffset?: number;\n /**\n * The duration in seconds of the final audio.\n *\n * @defaultValue The duration of the block.\n */\n duration?: number;\n /**\n * The sample rate of the exported audio.\n *\n * @defaultValue 48000\n */\n sampleRate?: number;\n /**\n * The number of channels of the exported audio.\n *\n * @defaultValue 2\n */\n numberOfChannels?: number;\n /**\n * Skip encoding (audio data will be returned immediately even if not compatible with target MIME type).\n *\n * @defaultValue false\n */\n skipEncoding?: boolean;\n /**\n * An AbortSignal that can be used to cancel the audio export operation.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * Options for configuring audio extraction from video operations.\n * @public\n */\nexport declare type AudioFromVideoOptions = {\n /**\n * If true, the audio block will have the same duration, trim length, and trim offset as the source video.\n * If false, the full audio track is extracted without trim settings.\n * @defaultValue true\n */\n keepTrimSettings?: boolean;\n /**\n * If true, mutes the audio of the original video fill block.\n * @defaultValue true\n */\n muteOriginalVideo?: boolean;\n};\n\n/**\n * Represents the audio MIME types used in the editor.\n *\n * @categoryDescription Audio MIME Type\n * Defines the possible audio MIME types used in the editor.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n *\n * @public\n */\nexport declare type AudioMimeType = Extract<MimeType_2, 'audio/wav' | 'audio/mp4'>;\n\n/**\n * Information about a single audio track from a video.\n * This interface provides comprehensive metadata about audio tracks,\n * including codec information, technical specifications, and track details.\n * @public\n */\nexport declare interface AudioTrackInfo {\n /** The codec string */\n audioCodec: string;\n /** The number of audio channels */\n channels: number;\n /** The audio sample rate */\n sampleRate: number;\n /** Duration of the audio track in seconds */\n audioDuration: number;\n /** The number of audio packets (matches the number of encoded chunks) */\n numAudioPackets: number;\n /** The number of audio frames */\n numAudioFrames: number;\n /** Optional track name/label if available in metadata */\n trackName: string;\n /** Track index in the container */\n trackIndex: number;\n /** Track language code (ISO 639-2T format: \"und\", \"eng\", \"deu\", etc.) */\n language: string;\n}\n\n/** @public */\nexport declare type BlendMode = (typeof BlendModeValues)[number];\n\n/** @public */\nexport declare const BlendModeValues: readonly [\"PassThrough\", \"Normal\", \"Darken\", \"Multiply\", \"ColorBurn\", \"LinearBurn\", \"DarkenColor\", \"Lighten\", \"Screen\", \"ColorDodge\", \"LinearDodge\", \"LightenColor\", \"Overlay\", \"SoftLight\", \"HardLight\", \"VividLight\", \"LinearLight\", \"PinLight\", \"HardMix\", \"Difference\", \"Exclusion\", \"Subtract\", \"Divide\", \"Hue\", \"Saturation\", \"Color\", \"Luminosity\"];\n\n/**\n * Create, manipulate, and query the building blocks of your design.\n *\n * This is the primary interface for all block-level operations. Use it to manage the\n * entire lifecycle of blocks from creation and serialization to destruction. You can precisely\n * control a block's appearance by modifying its fills, strokes, and effects, or transform\n * its position, size, and rotation. The API also includes powerful features for managing\n * complex content like text and video, organizing blocks into groups and hierarchies, and\n * exporting final designs to various formats.\n *\n * @public\n * @showCategories\n * @categoryDescription Block Lifecycle\n * Manage the complete lifecycle: create, find, duplicate, destroy, and serialize blocks.\n * @categoryDescription Block Export\n * Export blocks to various formats like images, videos, and audio.\n * @categoryDescription Block Fills\n * Create, configure, and manage block fills, including solid colors, gradients, and images.\n * @categoryDescription Block Video\n * Manage time-based media like video and audio, including playback, timing, and controls.\n * @categoryDescription Block State\n * Query the intrinsic state or identity of a block, such as its name, UUID, or lock status.\n * @categoryDescription Block Kind\n * Get and set a block's 'kind' identifier for custom categorization.\n * @categoryDescription Block Selection & Visibility\n * Manage a block's selection state and visibility on the canvas.\n * @categoryDescription Block Events\n * Subscribe to user actions and state changes related to blocks.\n * @categoryDescription Block Groups\n * Create and manage groups of blocks.\n * @categoryDescription Block Boolean Operations\n * Combine multiple blocks into a single new block using boolean path operations.\n * @categoryDescription Block Exploration\n * Find blocks by properties like name, type, or kind.\n * @categoryDescription Block Shapes\n * Create and configure shape blocks and geometric forms.\n * @categoryDescription Block Appearance\n * Control general appearance, including opacity, blend modes, flipping, and other visual properties.\n * @categoryDescription Block Layout\n * Structure designs by positioning, sizing, layering, aligning, and distributing blocks.\n * @categoryDescription Block Hierarchies\n * Manage parent-child relationships and the scene graph structure.\n * @categoryDescription Block Utils\n * Check block capabilities like alignability or distributability.\n * @categoryDescription Block Properties\n * Get and set any block property by name using low-level, generic accessors.\n * @categoryDescription Block Crop\n * Crop, scale, translate, and transform block content.\n * @categoryDescription Block Strokes\n * Control stroke appearance, including color, width, style, and position.\n * @categoryDescription Block Drop Shadow\n * Configure drop shadow effects, including blur, color, and offset.\n * @categoryDescription Block Effects\n * Create, manage, and apply various visual effects to blocks.\n * @categoryDescription Block Cutout\n * Create cutout operations and path-based modifications.\n * @categoryDescription Block Text\n * Create, edit, and style text content.\n * @categoryDescription Block Blur\n * Apply and configure blur effects on blocks.\n * @categoryDescription Block Placeholder\n * Manage placeholder functionality, controls, and behavior.\n * @categoryDescription Block Scopes\n * Manage permissions and capabilities per block.\n * @categoryDescription Block Animations\n * Create and manage animations and timeline-based effects.\n * @categoryDescription Helper\n * Convenient high-level functions that combine multiple operations into single, easy-to-use methods for common tasks like adding media, applying effects, and positioning blocks.\n */\nexport declare class BlockAPI {\n #private;\n\n /**\n * Exports a design block to a Blob.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param options - The options for exporting the block type, including mime type and export settings.\n * @returns A promise that resolves with the exported image or is rejected with an error.\n */\n export(handle: DesignBlockId, options?: ExportOptions): Promise<Blob>;\n /**\n * Exports a design block to a Blob.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param mimeType - The mime type of the output file.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with the exported image or is rejected with an error.\n * @deprecated Use the new `export` signature instead\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.export(blockId, MimeType.Png, { pngCompressionLevel: 5 })\n * // After migration\n * const blob = await cesdk.block.export(blockId, { mimeType: 'image/png', pngCompressionLevel: 5 })\n * ```\n */\n export(handle: DesignBlockId, mimeType?: ExportOptions['mimeType'], options?: Omit<ExportOptions, 'mimeType'>): Promise<Blob>;\n /**\n * Extracts the dominant colors from the rendered appearance of a block.\n *\n * Performs an internal update to resolve the final layout for the block. Will not\n * complete as long as assets are in a pending state; asset loading progresses during\n * engine updates. Crops, color adjustments, and effects applied to the block are\n * reflected in the returned palette. Fully or mostly transparent pixels are excluded\n * from the analysis.\n *\n * @category Block Analysis\n * @param handle - The design block element to analyze. Must be attached to a scene\n * and render visible content.\n * @param options - See `DominantColorsOptions`.\n * @returns A promise that resolves with the dominant colors sorted by weight, descending.\n */\n getDominantColors(handle: DesignBlockId, options?: DominantColorsOptions): Promise<DominantColor[]>;\n /**\n * Exports a design block and a color mask to two separate Blobs.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param maskColorR - The red component of the special color mask color.\n * @param maskColorG - The green component of the special color mask color.\n * @param maskColorB - The blue component of the special color mask color.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with an array of the exported image and mask or is rejected with an error.\n */\n exportWithColorMask(handle: DesignBlockId, maskColorR: number, maskColorG: number, maskColorB: number, options?: ExportOptions): Promise<Blob[]>;\n /**\n * Exports a design block and a color mask to two separate Blobs.\n *\n * Performs an internal update to resolve the final layout for the blocks.\n * Removes all pixels that exactly match the given RGB color and replaces them with transparency.\n * The output includes two files: the masked image and the mask itself.\n *\n * @category Block Export\n * @param handle - The design block element to export.\n * @param mimeType - The mime type of the output file.\n * @param maskColorR - The red component of the special color mask color.\n * @param maskColorG - The green component of the special color mask color.\n * @param maskColorB - The blue component of the special color mask color.\n * @param options - The options for exporting the block type\n * @returns A promise that resolves with an array of the exported image and mask or is rejected with an error.\n * @deprecated Use the new `exportWithColorMask` signature instead\n *\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.exportWithColorMask(\n * blockId,\n * MimeType.Png,\n * 0.5,\n * 0,\n * 0,\n * {\n * pngCompressionLevel: 5\n * }\n * );\n * // After migration\n * const blob = await cesdk.block.exportWithColorMask(\n * blockId,\n * 0.5,\n * 0,\n * 0,\n * {\n * mimeType: 'image/png',\n * pngCompressionLevel: 5\n * }\n * );\n * ```\n */\n exportWithColorMask(handle: DesignBlockId, mimeType: ExportOptions['mimeType'] | undefined, maskColorR: number, maskColorG: number, maskColorB: number, options?: Omit<ExportOptions, 'mimeType'>): Promise<Blob[]>;\n /**\n * Exports a design block as a video file.\n *\n * Note: The export will run across multiple iterations of the update loop. In each iteration a frame is scheduled for encoding.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only page blocks are supported.\n * @param options - The options for exporting the video, including mime type, h264 profile, level, bitrate, time offset, duration, framerate, target width and height.\n * @returns A promise that resolves with a video blob or is rejected with an error.\n * @example\n * ```typescript\n * const page = engine.block.create('page');\n * // Set up a progress tracking function\n * const progressTracker = (renderedFrames, encodedFrames, totalFrames) => {\n * console.log(`Progress: ${Math.round((encodedFrames / totalFrames) * 100)}%`);\n * };\n * const videoOptions = { framerate: 30, duration: 5 };\n * const videoBlob = await engine.block.exportVideo(page, MimeType.Mp4, progressTracker, videoOptions);\n * ```\n */\n exportVideo(handle: DesignBlockId, options?: VideoExportOptions): Promise<Blob>;\n /**\n * Exports a design block as a video file.\n *\n * Note: The export will run across multiple iterations of the update loop. In each iteration a frame is scheduled for encoding.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only page blocks are supported.\n * @param mimeType - The MIME type of the output video file.\n * @param progressCallback - A callback which reports on the progress of the export.\n * @param options - The options for exporting the video, including h264 profile, level, bitrate, time offset, duration, framerate, target width and height.\n * @returns A promise that resolves with a video blob or is rejected with an error.\n * @deprecated Use the new `exportVideo` signature instead\n *\n * @example\n * ```typescript\n * // Before migration\n * const blob = await cesdk.block.exportVideo(blockId, 'video/mp4', handleProgress, {\n * targetWidth: 1920,\n * targetHeight: 1080,\n * })\n * // After migration\n * const blob = await cesdk.block.exportVideo(blockId, {\n * mimeType: 'video/mp4',\n * progressCallback: handleProgress,\n * targetWidth: 1920,\n * targetHeight: 1080,\n * })\n * ```\n */\n exportVideo(handle: DesignBlockId, mimeType?: VideoExportOptions['mimeType'], progressCallback?: VideoExportOptions['onProgress'], options?: Omit<VideoExportOptions, 'mimeType' | 'onProgress'>): Promise<Blob>;\n /**\n * Exports a design block as an audio file.\n *\n * @category Block Export\n * @param handle - The design block element to export. Currently, only audio blocks are supported.\n * @param options - The options for exporting the audio, including mime type, progress callback, and export settings.\n * @returns A promise that resolves with an audio blob or is rejected with an error.\n * @experimental This API is experimental and may change or be removed in future versions.\n * @example\n * ```typescript\n * const audioBlock = engine.block.create('audio');\n * // Set up a progress tracking function\n * const progressTracker = (renderedFrames, encodedFrames, totalFrames) => {\n * console.log(`Audio export progress: ${Math.round((encodedFrames / totalFrames) * 100)}%`);\n * };\n * const audioOptions = { duration: 10 };\n * const audioBlob = await engine.block.exportAudio(audioBlock, MimeType.Wav, progressTracker, audioOptions);\n * ```\n */\n exportAudio(handle: DesignBlockId, options?: AudioExportOptions): Promise<Blob>;\n /**\n * Loads blocks from a serialized string.\n *\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param content - A string representing the given blocks.\n * @returns A promise that resolves with a list of handles representing the found blocks or an error.\n * @example\n * ```typescript\n * const serializedBlocks = await engine.block.saveToString([pageBlockId]);\n * // Later, load those blocks\n * const loadedBlocks = await engine.block.loadFromString(serializedBlocks);\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromString(content: string): Promise<DesignBlockId[]>;\n /**\n * Loads blocks from a remote archive URL.\n *\n * The URL should be that of a file previously saved with `block.saveToArchive`.\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param url - The URL of the blocks archive file.\n * @returns A promise that resolves with a list of handles representing the found blocks or an error.\n * @example\n * ```typescript\n * // Load blocks from a remote archive\n * const loadedBlocks = await engine.block.loadFromArchiveURL('https://example.com/blocks.zip');\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromArchiveURL(url: string): Promise<DesignBlockId[]>;\n /**\n * Loads blocks from a URL.\n *\n * The URL should point to a blocks file within an unzipped archive directory previously saved with `block.saveToArchive`.\n * The blocks are not attached by default and won't be visible until attached to a page or the scene.\n * The UUID of the loaded blocks is replaced with a new one.\n *\n * @category Block Lifecycle\n * @param url - The URL to the blocks file\n * @returns A promise that resolves with a list of block handles\n * @example\n * ```typescript\n * // Load blocks from a URL\n * const loadedBlocks = await engine.block.loadFromURL('https://example.com/blocks.blocks');\n * // Attach the first loaded block to the scene\n * engine.block.appendChild(sceneBlockId, loadedBlocks[0]);\n * ```\n */\n loadFromURL(url: string): Promise<DesignBlockId[]>;\n /**\n * Saves the given blocks to a serialized string.\n *\n * If a page with multiple children is given, the entire hierarchy is saved.\n *\n * @category Block Lifecycle\n * @param blocks - The blocks to save.\n * @param allowedResourceSchemes - The resource schemes to allow in the saved string. Defaults to ['buffer', 'http', 'https'].\n * @param onDisallowedResourceScheme - An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * @returns A promise that resolves to a string representing the blocks or an error.\n * @example\n * ```typescript\n * // Create a page with a text element\n * const page = engine.block.create('page');\n * const text = engine.block.create('text');\n * engine.block.appendChild(page, text);\n *\n * // Save the whole page hierarchy to a string\n * const serialized = await engine.block.saveToString([page]);\n * ```\n */\n saveToString(blocks: DesignBlockId[], allowedResourceSchemes?: string[], onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>): Promise<string>;\n /**\n * Saves the given blocks and their assets to a zip archive.\n *\n * The archive contains all assets that were accessible when this function was called.\n * Blocks in the archived scene reference assets relative to the location of the scene file.\n *\n * @category Block Lifecycle\n * @param blocks - The blocks to save.\n * @returns A promise that resolves with a Blob on success or an error on failure.\n */\n saveToArchive(blocks: DesignBlockId[]): Promise<Blob>;\n /**\n * Creates a new block of a given type.\n *\n * ```javascript\n * // Create a new text block\n * const text = engine.block.create('text');\n * const page = engine.scene.getCurrentPage();\n * engine.block.appendChild(page, text);\n *\n * // Create a new image block\n * const image = engine.block.create('graphic');\n * engine.block.setShape(image, engine.block.createShape('rect'));\n * const imageFill = engine.block.createFill('image');\n * engine.block.setFill(image, imageFill);\n * engine.block.setString(imageFill, 'fill/image/imageFileURI', 'https://img.ly/static/ubq_samples/sample_1.jpg');\n * engine.block.appendChild(page, image);\n *\n * // Create a new video block\n * const video = engine.block.create('graphic');\n * engine.block.setShape(video, engine.block.createShape('rect'));\n * const videoFill = engine.block.createFill('video');\n * engine.block.setString(videoFill, 'fill/video/fileURI', 'https://cdn.img.ly/assets/demo/v3/ly.img.video/videos/pexels-drone-footage-of-a-surfer-barrelling-a-wave-12715991.mp4');\n * engine.block.setFill(video, videoFill);\n * engine.block.appendChild(page, video);\n * ```\n *\n * @category Block Lifecycle\n * @param type - The type of the block that shall be created.\n * @returns The created block's handle.\n */\n create(type: DesignBlockType): DesignBlockId;\n /**\n * Creates a new fill block.\n *\n * ```javascript\n * const solidColoFill = engine.block.createFill('color');\n * // Longhand fill types are also supported\n * const imageFill = engine.block.createFill('//ly.img.ubq/fill/image');\n * ```\n *\n * @category Block Fills\n * @param type - The type of the fill object that shall be created.\n * @returns The created fill's handle.\n */\n createFill(type: FillType): DesignBlockId;\n /**\n * Gets the number of available audio tracks in a video fill block.\n *\n * ```javascript\n * const trackCount = engine.block.getAudioTrackCountFromVideo(videoBlock);\n * console.log(`Video has ${trackCount} audio tracks`);\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to examine.\n * @returns The number of audio tracks.\n * @throws Will throw an error if the block is not a video fill or has no audio.\n */\n getAudioTrackCountFromVideo(videoFillBlock: DesignBlockId): number;\n /**\n * Creates a new audio block by extracting a specific audio track from a video fill block.\n *\n * ```javascript\n * // Extract the first audio track (usually the main mix) with trim settings\n * const audioBlock = engine.block.createAudioFromVideo(videoFillBlock, 0);\n *\n * // Extract full audio track without trim settings\n * const audioBlock = engine.block.createAudioFromVideo(videoFillBlock, 0, { keepTrimSettings: false });\n *\n * // Extract a specific track, keep trim settings, and mute the original video\n * const dialogueTrack = engine.block.createAudioFromVideo(videoFillBlock, 1, { keepTrimSettings: true, muteOriginalVideo: true });\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to extract audio from.\n * @param trackIndex - The index of the audio track to extract (0-based).\n * @param options - Options for the audio extraction operation.\n * @returns The handle of the newly created audio block with extracted audio from the specified track.\n * @throws Will throw an error if the track index is invalid or the block has no audio.\n */\n createAudioFromVideo(videoFillBlock: DesignBlockId, trackIndex: number, options?: AudioFromVideoOptions): DesignBlockId;\n /**\n * Creates multiple audio blocks by extracting all audio tracks from a video fill block.\n *\n * ```javascript\n * // Extract all audio tracks from a video with trim settings\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock);\n * console.log(`Created ${audioBlocks.length} audio blocks`);\n *\n * // Extract all tracks without trim settings (full audio)\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock, { keepTrimSettings: false });\n *\n * // Extract all tracks with trim settings and mute the original video\n * const audioBlocks = engine.block.createAudiosFromVideo(videoFillBlock, { keepTrimSettings: true, muteOriginalVideo: true });\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to extract audio from.\n * @param options - Options for the audio extraction operation.\n * @returns An array of handles for the newly created audio blocks, one per track.\n * @throws Will throw an error if the block has no audio or extraction fails.\n */\n createAudiosFromVideo(videoFillBlock: DesignBlockId, options?: AudioFromVideoOptions): DesignBlockId[];\n /**\n * Gets information about all audio tracks from a video fill block.\n *\n * ```javascript\n * // Get information about all audio tracks\n * const trackInfos = engine.block.getAudioInfoFromVideo(videoFillBlock);\n * console.log(`Video has ${trackInfos.length} audio tracks`);\n *\n * // Display track information\n * trackInfos.forEach((track, index) => {\n * console.log(`Track ${index}: ${track.channels} channels, ${track.sampleRate}Hz, ${track.language}`);\n * });\n *\n * // Use track info to create audio blocks selectively\n * const englishTracks = trackInfos.filter(track => track.language === 'eng');\n * const audioBlocks = englishTracks.map(track =>\n * engine.block.createAudioFromVideo(videoFillBlock, track.trackIndex)\n * );\n * ```\n *\n * @category Block Audio\n * @param videoFillBlock - The video fill block to analyze for audio track information.\n * @returns An array containing information about each audio track.\n * @throws Will throw an error if the block is not a video fill or has no audio.\n */\n getAudioInfoFromVideo(videoFillBlock: DesignBlockId): AudioTrackInfo[];\n /**\n * Creates new caption blocks from an SRT or VTT file URI.\n *\n * @category Block Video\n * @param uri - The URI for the captions file to load. Supported file formats are: SRT and VTT.\n * @returns A promise that resolves with a list of the created caption blocks.\n */\n createCaptionsFromURI(uri: string): Promise<DesignBlockId[]>;\n /**\n * Gets the longhand type of a given block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's type.\n */\n getType(id: DesignBlockId): ObjectTypeLonghand;\n /**\n * Gets the kind of a given block.\n *\n * ```javascript\n * const kind = engine.block.getKind(block);\n * ```\n *\n * @category Block Kind\n * @param id - The block to query.\n * @returns The block's kind.\n */\n getKind(id: DesignBlockId): string;\n /**\n * Sets the kind of a given block, a custom string for categorization of blocks.\n *\n * ```javascript\n * engine.block.setKind(text, 'title');\n * ```\n *\n * @category Block Kind\n * @param id - The block whose kind should be changed.\n * @param kind - The new kind.\n */\n setKind(id: DesignBlockId, kind: string): void;\n /**\n * Selects a block, deselecting all others.\n *\n * @category Block Selection & Visibility\n * @param id - The block to be selected.\n */\n select(id: DesignBlockId): void;\n /**\n * Sets the selection state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @param selected - Whether or not the block should be selected.\n */\n setSelected(id: DesignBlockId, selected: boolean): void;\n /**\n * Gets the selection state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @returns True if the block is selected, false otherwise.\n */\n isSelected(id: DesignBlockId): boolean;\n /**\n * Finds all currently selected blocks.\n *\n * @category Block Selection & Visibility\n * @returns An array of block ids.\n */\n findAllSelected(): DesignBlockId[];\n /**\n * Subscribes to changes in the selection.\n *\n * @category Block Events\n * @param callback - This function is called at the end of the engine update if the selection has changed.\n * @returns A method to unsubscribe.\n */\n onSelectionChanged: (callback: () => void) => (() => void);\n /**\n * Subscribes to block click events.\n *\n * @category Block Events\n * @param callback - This function is called at the end of the engine update if a block has been clicked.\n * @returns A method to unsubscribe.\n */\n onClicked: (callback: (id: DesignBlockId) => void) => (() => void);\n /**\n * Checks if a set of blocks can be grouped.\n *\n * A scene block or a block that is already part of a group cannot be grouped.\n *\n * ```javascript\n * const groupable = engine.block.isGroupable([block1, block2])\n * ```\n *\n * @category Block Groups\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be grouped together.\n */\n isGroupable(ids: DesignBlockId[]): boolean;\n /**\n * Groups multiple blocks into a new group block.\n *\n * ```javascript\n * if (engine.block.isGroupable([block1, block2])) {\n * const group = engine.block.group(block1, block2]);\n * }\n * ```\n *\n * @category Block Groups\n * @param ids - A non-empty array of block ids.\n * @returns The block id of the created group.\n */\n group(ids: DesignBlockId[]): DesignBlockId;\n /**\n * Ungroups a group block, releasing its children.\n *\n * ```javascript\n * engine.block.ungroup(group);\n * ```\n *\n * @category Block Groups\n * @param id - The group id from a previous call to `group`.\n */\n ungroup(id: DesignBlockId): void;\n /**\n * Changes selection to a block within a selected group.\n *\n * Nothing happens if the target is not a group.\n *\n * ```javascript\n * engine.block.enterGroup(group);\n * ```\n *\n * @category Block Groups\n * @param id - The group id from a previous call to `group`.\n */\n enterGroup(id: DesignBlockId): void;\n /**\n * Changes selection from a block to its parent group.\n *\n * Nothing happens if the block is not part of a group.\n *\n * ```javascript\n * engine.block.exitGroup(member1);\n * ```\n *\n * @category Block Groups\n * @param id - A block id.\n */\n exitGroup(id: DesignBlockId): void;\n /**\n * Checks if a set of blocks can be combined using a boolean operation.\n *\n * Only graphics blocks and text blocks can be combined.\n * All blocks must have the \"lifecycle/duplicate\" scope enabled.\n *\n * @category Block Boolean Operations\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be combined.\n */\n isCombinable(ids: DesignBlockId[]): boolean;\n /**\n * Performs a boolean operation on a set of blocks.\n *\n * All blocks must be combinable. See `isCombinable`.\n * The parent, fill and sort order of the new block is that of the prioritized block.\n *\n * @category Block Boolean Operations\n * @param ids - The blocks to combine. They will be destroyed if \"lifecycle/destroy\" scope is enabled.\n * @param op - The boolean operation to perform.\n * @returns The newly created block or an error.\n */\n combine(ids: DesignBlockId[], op: BooleanOperation): DesignBlockId;\n /**\n * Sets the name of a block.\n *\n * @category Block State\n * @param id - The block to update.\n * @param name - The name to set.\n */\n setName(id: DesignBlockId, name: string): void;\n /**\n * Gets the name of a block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's name.\n */\n getName(id: DesignBlockId): string;\n /**\n * Gets the unique universal identifier (UUID) of a block.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's UUID.\n */\n getUUID(id: DesignBlockId): string;\n /**\n * Finds all blocks with a given name.\n *\n * @category Block Exploration\n * @param name - The name to search for.\n * @returns A list of block ids.\n */\n findByName(name: string): DesignBlockId[];\n /**\n * Finds all blocks with a given type.\n *\n * @category Block Exploration\n * @param type - The type to search for.\n * @returns A list of block ids.\n */\n findByType(type: ObjectType): DesignBlockId[];\n /**\n * Finds all blocks with a given kind.\n *\n * ```javascript\n * const allTitles = engine.block.findByKind('title');\n * ```\n *\n * @category Block Exploration\n * @param kind - The kind to search for.\n * @returns A list of block ids.\n */\n findByKind(kind: string): DesignBlockId[];\n /**\n * Finds all blocks known to the engine.\n *\n * @category Block Exploration\n * @returns A list of block ids.\n */\n findAll(): DesignBlockId[];\n /**\n * Finds all placeholder blocks in the current scene.\n *\n * @category Block Exploration\n * @returns A list of block ids.\n */\n findAllPlaceholders(): DesignBlockId[];\n /**\n * Finds all blocks that are not attached to any scene.\n *\n * A block is considered unused when it has no path to a scene (no scene\n * reference and no ancestor that belongs to a scene) and is not itself a\n * scene. Generated blocks and render blocks (fills, effects, shapes, blurs)\n * are excluded, matching the behaviour of {@link BlockAPI.findAll}.\n *\n * This is useful for cleanup workflows and for filtering the URIs returned\n * by {@link EditorAPI.findAllMediaURIs} before relocating resources.\n *\n * @category Block Exploration\n * @returns A list of block ids that are not attached to any scene.\n */\n findAllUnused(): DesignBlockId[];\n /**\n * Creates a new shape block of a given type.\n *\n * ```javascript\n * const star = engine.block.createShape('star');\n * // Longhand shape types are also supported\n * const rect = engine.block.createShape('//ly.img.ubq/shape/rect');\n * ```\n *\n * @category Block Shapes\n * @param type - The type of the shape object that shall be created.\n * @returns The created shape's handle.\n */\n createShape(type: ShapeType): DesignBlockId;\n /**\n * Checks if a block has a shape property.\n *\n * @category Block Shapes\n * @param id - The block to query.\n * @returns true, if the block has a shape property, an error otherwise.\n * @deprecated Use supportsShape instead.\n */\n hasShape(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports having a shape.\n *\n * @category Block Shapes\n * @param id - The block to query.\n * @returns true, if the block has a shape property, an error otherwise.\n */\n supportsShape(id: DesignBlockId): boolean;\n /**\n * Gets the shape block attached to a given block.\n *\n * @category Block Shapes\n * @param id - The block whose shape block should be returned.\n * @returns The block that currently defines the given block's shape.\n */\n getShape(id: DesignBlockId): DesignBlockId;\n /**\n * Sets the shape block for a given block.\n *\n * Note that the previous shape block is not destroyed automatically.\n * The new shape is disconnected from its previously attached block.\n *\n * @category Block Shapes\n * @param id - The block whose shape should be changed.\n * @param shape - The new shape.\n */\n setShape(id: DesignBlockId, shape: DesignBlockId): void;\n /**\n * Gets the visibility state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to query.\n * @returns True if visible, false otherwise.\n */\n isVisible(id: DesignBlockId): boolean;\n /**\n * Sets the visibility state of a block.\n *\n * @category Block Selection & Visibility\n * @param id - The block to update.\n * @param visible - Whether the block shall be visible.\n */\n setVisible(id: DesignBlockId, visible: boolean): void;\n /**\n * Gets the clipped state of a block.\n *\n * If true, the block should clip its contents to its frame.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns True if clipped, false otherwise.\n */\n isClipped(id: DesignBlockId): boolean;\n /**\n * Sets the clipped state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param clipped - Whether the block should clips its contents to its frame.\n */\n setClipped(id: DesignBlockId, clipped: boolean): void;\n /**\n * Gets the transform-locked state of a block.\n *\n * If true, the block's transform can't be changed.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns True if transform locked, false otherwise.\n */\n isTransformLocked(id: DesignBlockId): boolean;\n /**\n * Checks whether a graphic block originated as a line shape. Survives the\n * line's conversion to a vector path during vector-edit; resets only when\n * the shape is replaced by a non-line shape via `setShape`.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns True if the block originated as a line shape, false otherwise.\n */\n isLineOrigin(id: DesignBlockId): boolean;\n /**\n * Sets the transform-locked state of a block.\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param locked - Whether the block's transform should be locked.\n */\n setTransformLocked(id: DesignBlockId, locked: boolean): void;\n /**\n * Gets the X position of a block.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the x position.\n */\n getPositionX(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's X position.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the x position: 'Absolute' or 'Percent'.\n */\n getPositionXMode(id: DesignBlockId): PositionXMode;\n /**\n * Gets the Y position of a block.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the y position.\n */\n getPositionY(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's Y position.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the y position: 'Absolute' or 'Percent'.\n */\n getPositionYMode(id: DesignBlockId): PositionYMode;\n /**\n * Sets the X position of a block.\n *\n * The position refers to the block's local space, relative to its parent with the origin at the top left.\n *\n * ```javascript\n * engine.block.setPositionX(block, 0.25);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The value of the x position.\n */\n setPositionX(id: DesignBlockId, value: number): void;\n /**\n * Sets the mode for the block's X position.\n *\n * ```javascript\n * engine.block.setPositionXMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The x position mode: 'Absolute' or 'Percent'.\n */\n setPositionXMode(id: DesignBlockId, mode: PositionXMode): void;\n /**\n * Sets the Y position of a block.\n *\n * The position refers to the block's local space, relative to its parent with the origin at the top left.\n *\n * ```javascript\n * engine.block.setPositionY(block, 0.25);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The value of the y position.\n */\n setPositionY(id: DesignBlockId, value: number): void;\n /**\n * Sets the mode for the block's Y position.\n *\n * ```javascript\n * engine.block.setPositionYMode(block, 'Absolute');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The y position mode: 'Absolute' or 'Percent'.\n */\n setPositionYMode(id: DesignBlockId, mode: PositionYMode): void;\n /**\n * Sets a block to always be rendered on top of its siblings.\n *\n * If true, this block's sorting order is automatically adjusted to be higher than all other siblings without this property.\n *\n * @category Block Layout\n * @param id - the block to update.\n * @param enabled - whether the block shall be always-on-top.\n */\n setAlwaysOnTop(id: DesignBlockId, enabled: boolean): void;\n /**\n * Sets a block to always be rendered below its siblings.\n *\n * If true, this block's sorting order is automatically adjusted to be lower than all other siblings without this property.\n *\n * @category Block Layout\n * @param id - the block to update.\n * @param enabled - whether the block shall always be below its siblings.\n */\n setAlwaysOnBottom(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if a block is set to always be on top.\n *\n * @category Block Layout\n * @param id - the block to query.\n * @returns true if the block is set to be always-on-top, false otherwise.\n */\n isAlwaysOnTop(id: DesignBlockId): boolean;\n /**\n * Checks if a block is set to always be on the bottom.\n *\n * @category Block Layout\n * @param id - the block to query.\n * @returns true if the block is set to be always-on-bottom, false otherwise.\n */\n isAlwaysOnBottom(id: DesignBlockId): boolean;\n /**\n * Brings a block to the front of its siblings.\n *\n * Updates the sorting order so that the given block has the highest sorting order.\n *\n * @category Block Layout\n * @param id - The id of the block to bring to the front.\n */\n bringToFront(id: DesignBlockId): void;\n /**\n * Sends a block to the back of its siblings.\n *\n * Updates the sorting order so that the given block has the lowest sorting order.\n *\n * @category Block Layout\n * @param id - The id of the block to send to the back.\n */\n sendToBack(id: DesignBlockId): void;\n /**\n * Brings a block one layer forward.\n *\n * Updates the sorting order to be higher than its next sibling.\n *\n * @category Block Layout\n * @param id - The id of the block to bring forward.\n */\n bringForward(id: DesignBlockId): void;\n /**\n * Sends a block one layer backward.\n *\n * Updates the sorting order to be lower than its previous sibling.\n *\n * @category Block Layout\n * @param id - The id of the block to send backward.\n */\n sendBackward(id: DesignBlockId): void;\n /**\n * Gets the rotation of a block in radians.\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The block's rotation around its center in radians.\n */\n getRotation(id: DesignBlockId): number;\n /**\n * Sets the rotation of a block in radians.\n *\n * Rotation is applied around the block's center.\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param radians - The new rotation in radians.\n */\n setRotation(id: DesignBlockId, radians: number): void;\n /**\n * Gets the horizontal flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns A boolean indicating whether the block is flipped horizontally.\n */\n getFlipHorizontal(id: DesignBlockId): boolean;\n /**\n * Gets the vertical flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns A boolean indicating whether the block is flipped vertically.\n */\n getFlipVertical(id: DesignBlockId): boolean;\n /**\n * Sets the horizontal flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param flip - If the flip should be enabled.\n */\n setFlipHorizontal(id: DesignBlockId, flip: boolean): void;\n /**\n * Sets the vertical flip state of a block.\n *\n * @category Block Appearance\n * @param id - The block to update.\n * @param flip - If the flip should be enabled.\n */\n setFlipVertical(id: DesignBlockId, flip: boolean): void;\n /**\n * Checks if a block supports content fill modes.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has a content fill mode.\n * @deprecated Use supportsContentFillMode instead.\n */\n hasContentFillMode(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports content fill modes.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has a content fill mode.\n */\n supportsContentFillMode(id: DesignBlockId): boolean;\n /**\n * Gets the width of a block in the current width mode.\n *\n * ```javascript\n * const width = engine.block.getWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the block's width.\n */\n getWidth(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's width.\n *\n * ```javascript\n * const widthMode = engine.block.getWidthMode(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the width: 'Absolute', 'Percent' or 'Auto'.\n */\n getWidthMode(id: DesignBlockId): WidthMode;\n /**\n * Gets the height of a block in the current height mode.\n *\n * ```javascript\n * const height = engine.block.getHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The value of the block's height.\n */\n getHeight(id: DesignBlockId): number;\n /**\n * Gets the mode for the block's height.\n *\n * ```javascript\n * const heightMode = engine.block.getHeightMode(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The current mode for the height: 'Absolute', 'Percent' or 'Auto'.\n */\n getHeightMode(id: DesignBlockId): HeightMode;\n /**\n * Update a block's size.\n *\n * @category Helper\n * @param id - The block to update.\n * @param width - The new width of the block.\n * @param height - The new height of the block.\n * @param options - Optional parameters for the size. Properties:\n * - `maintainCrop` - Whether or not the crop values, if available, should be automatically adjusted.\n * - `sizeMode` - The size mode: Absolute, Percent or Auto.\n */\n setSize(id: DesignBlockId, width: number, height: number, options?: {\n maintainCrop?: boolean;\n sizeMode?: SizeMode;\n }): void;\n /**\n * Update a block's position.\n *\n * @category Helper\n * @param id - The block to update.\n * @param x - The new x position of the block.\n * @param y - The new y position of the block.\n * @param options - Optional parameters for the position. Properties:\n * - `positionMode` - The position mode: absolute, percent or undefined.\n */\n setPosition(id: DesignBlockId, x: number, y: number, options?: {\n positionMode?: PositionMode;\n }): void;\n /**\n * Sets the width of a block in the current width mode.\n *\n * If the crop is maintained, the crop values will be automatically adjusted.\n *\n * ```javascript\n * engine.block.setWidth(block, 2.5, true);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The new width of the block.\n * @param maintainCrop - Whether or not the crop values, if available, should be automatically adjusted.\n */\n setWidth(id: DesignBlockId, value: number, maintainCrop?: boolean): void;\n /**\n * Sets the mode for the block's width.\n *\n * ```javascript\n * engine.block.setWidthMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The width mode: 'Absolute', 'Percent' or 'Auto'.\n */\n setWidthMode(id: DesignBlockId, mode: WidthMode): void;\n /**\n * Sets the height of a block in the current height mode.\n *\n * If the crop is maintained, the crop values will be automatically adjusted.\n *\n * ```javascript\n * engine.block.setHeight(block, 0.5);\n * engine.block.setHeight(block, 2.5, true);\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param value - The new height of the block.\n * @param maintainCrop - Whether or not the crop values, if available, should be automatically adjusted.\n */\n setHeight(id: DesignBlockId, value: number, maintainCrop?: boolean): void;\n /**\n * Sets the mode for the block's height.\n *\n * ```javascript\n * engine.block.setHeightMode(block, 'Percent');\n * ```\n *\n * @category Block Layout\n * @param id - The block to update.\n * @param mode - The height mode: 'Absolute', 'Percent' or 'Auto'.\n */\n setHeightMode(id: DesignBlockId, mode: HeightMode): void;\n /**\n * Gets the final calculated X position of a block's frame.\n *\n * The position is only available after an internal update loop.\n *\n * ```javascript\n * const frameX = engine.block.getFrameX(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout position on the x-axis.\n */\n getFrameX(id: DesignBlockId): number;\n /**\n * Gets the final calculated Y position of a block's frame.\n *\n * The position is only available after an internal update loop.\n *\n * ```javascript\n * const frameY = engine.block.getFrameY(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout position on the y-axis.\n */\n getFrameY(id: DesignBlockId): number;\n /**\n * Gets the final calculated width of a block's frame.\n *\n * The width is only available after an internal update loop.\n *\n * ```javascript\n * const frameWidth = engine.block.getFrameWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout width.\n */\n getFrameWidth(id: DesignBlockId): number;\n /**\n * Gets the final calculated height of a block's frame.\n *\n * The height is only available after an internal update loop.\n *\n * ```javascript\n * const frameHeight = engine.block.getFrameHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block to query.\n * @returns The layout height.\n */\n getFrameHeight(id: DesignBlockId): number;\n /**\n * Sets the content fill mode of a block.\n *\n * ```javascript\n * engine.block.setContentFillMode(image, 'Cover');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param mode - The content fill mode: 'Crop', 'Cover' or 'Contain'.\n */\n setContentFillMode(id: DesignBlockId, mode: ContentFillMode): void;\n /**\n * Gets the content fill mode of a block.\n *\n * ```javascript\n * engine.block.getContentFillMode(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current mode: 'Crop', 'Cover' or 'Contain'.\n */\n getContentFillMode(id: DesignBlockId): ContentFillMode;\n /**\n * Sets the horizontal alignment of the content fill within a block.\n *\n * Only affects 'Contain' and 'Cover' fill modes; has no visible effect in 'Crop' mode,\n * where the user positions the content explicitly.\n *\n * ```javascript\n * engine.block.setContentFillHorizontalAlignment(image, 'Left');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param alignment - The horizontal alignment: 'Left', 'Center' or 'Right'.\n */\n setContentFillHorizontalAlignment(id: DesignBlockId, alignment: HorizontalContentFillAlignment): void;\n /**\n * Gets the horizontal alignment of the content fill within a block.\n *\n * ```javascript\n * engine.block.getContentFillHorizontalAlignment(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current alignment: 'Left', 'Center' or 'Right'.\n */\n getContentFillHorizontalAlignment(id: DesignBlockId): HorizontalContentFillAlignment;\n /**\n * Sets the vertical alignment of the content fill within a block.\n *\n * Only affects 'Contain' and 'Cover' fill modes; has no visible effect in 'Crop' mode,\n * where the user positions the content explicitly.\n *\n * ```javascript\n * engine.block.setContentFillVerticalAlignment(image, 'Top');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param alignment - The vertical alignment: 'Top', 'Center' or 'Bottom'.\n */\n setContentFillVerticalAlignment(id: DesignBlockId, alignment: VerticalContentFillAlignment): void;\n /**\n * Gets the vertical alignment of the content fill within a block.\n *\n * ```javascript\n * engine.block.getContentFillVerticalAlignment(image);\n * ```\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns The current alignment: 'Top', 'Center' or 'Bottom'.\n */\n getContentFillVerticalAlignment(id: DesignBlockId): VerticalContentFillAlignment;\n /**\n * Duplicates a block and its children.\n *\n * @category Block Lifecycle\n * @param id - The block to duplicate.\n * @param attachToParent - Whether the duplicated block should be attached to the original's parent. Defaults to true.\n * @returns The handle of the duplicate.\n */\n duplicate(id: DesignBlockId, attachToParent?: boolean): DesignBlockId;\n /**\n * Destroys a block and its children.\n *\n * @category Block Lifecycle\n * @param id - The block to destroy.\n */\n destroy(id: DesignBlockId): void;\n /**\n * Checks if a block handle is valid.\n *\n * A block becomes invalid once it has been destroyed.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns True, if the block is valid.\n */\n isValid(id: DesignBlockId): boolean;\n /**\n * Gets the parent of a block.\n *\n * @category Block Hierarchies\n * @param id - The block to query.\n * @returns The parent's handle or null if the block has no parent.\n */\n getParent(id: DesignBlockId): DesignBlockId | null;\n /**\n * Gets all direct children of a block.\n *\n * Children are sorted in their rendering order: Last child is rendered in front of other children.\n *\n * @category Block Hierarchies\n * @param id - The block to query.\n * @returns A list of block ids.\n */\n getChildren(id: DesignBlockId): DesignBlockId[];\n /**\n * Inserts a child block at a specific index.\n *\n * @category Block Hierarchies\n * @param parent - The block whose children should be updated.\n * @param child - The child to insert. Can be an existing child of `parent`.\n * @param index - The index to insert or move to.\n */\n insertChild(parent: DesignBlockId, child: DesignBlockId, index: number): void;\n /**\n * Appends a child block to a parent.\n *\n * @category Block Hierarchies\n * @param parent - The block whose children should be updated.\n * @param child - The child to insert. Can be an existing child of `parent`.\n */\n appendChild(parent: DesignBlockId, child: DesignBlockId): void;\n /**\n * Checks if a block references any variables.\n *\n * This check does not recurse into children.\n *\n * @category Block State\n * @param id - The block to inspect.\n * @returns true if the block references variables and false otherwise.\n */\n referencesAnyVariables(id: DesignBlockId): boolean;\n /**\n * Gets the X position of the block's global bounding box.\n *\n * The position is in the scene's global coordinate space, with the origin at the top left.\n *\n * ```javascript\n * const globalX = engine.block.getGlobalBoundingBoxX(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The x coordinate of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxX(id: DesignBlockId): number;\n /**\n * Gets the Y position of the block's global bounding box.\n *\n * The position is in the scene's global coordinate space, with the origin at the top left.\n *\n * ```javascript\n * const globalY = engine.block.getGlobalBoundingBoxY(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The y coordinate of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxY(id: DesignBlockId): number;\n /**\n * Gets the width of the block's global bounding box.\n *\n * The width is in the scene's global coordinate space.\n *\n * ```javascript\n * const globalWidth = engine.block.getGlobalBoundingBoxWidth(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The width of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxWidth(id: DesignBlockId): number;\n /**\n * Gets the height of the block's global bounding box.\n *\n * The height is in the scene's global coordinate space.\n *\n * ```javascript\n * const globalHeight = engine.block.getGlobalBoundingBoxHeight(block);\n * ```\n *\n * @category Block Layout\n * @param id - The block whose bounding box should be calculated.\n * @returns The height of the axis-aligned bounding box.\n */\n getGlobalBoundingBoxHeight(id: DesignBlockId): number;\n /**\n * Gets the screen-space bounding box for a set of blocks.\n *\n * ```javascript\n * const boundingBox = engine.block.getScreenSpaceBoundingBoxXYWH([block]);\n * ```\n *\n * @category Block Layout\n * @param ids - The block to query.\n * @returns The position and size of the bounding box.\n */\n getScreenSpaceBoundingBoxXYWH(ids: DesignBlockId[]): XYWH;\n /**\n * Aligns blocks horizontally.\n *\n * Aligns multiple blocks within their bounding box or a single block to its parent.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n * @param horizontalBlockAlignment - How they should be aligned: 'Left', 'Right', or 'Center'.\n */\n alignHorizontally(ids: DesignBlockId[], horizontalBlockAlignment: TextHorizontalAlignment): void;\n /**\n * Aligns blocks vertically.\n *\n * Aligns multiple blocks within their bounding box or a single block to its parent.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n * @param verticalBlockAlignment - How they should be aligned: 'Top', 'Bottom', or 'Center'.\n */\n alignVertically(ids: DesignBlockId[], verticalBlockAlignment: TextVerticalAlignment): void;\n /**\n * Checks if a set of blocks can be aligned.\n *\n * @category Block Utils\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be aligned.\n */\n isAlignable(ids: DesignBlockId[]): boolean;\n /**\n * Distributes blocks horizontally with even spacing.\n *\n * Distributes multiple blocks horizontally within their bounding box.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n */\n distributeHorizontally(ids: DesignBlockId[]): void;\n /**\n * Distributes blocks vertically with even spacing.\n *\n * Distributes multiple blocks vertically within their bounding box.\n *\n * @category Block Layout\n * @param ids - A non-empty array of block ids.\n */\n distributeVertically(ids: DesignBlockId[]): void;\n /**\n * Checks if a set of blocks can be distributed.\n *\n * @category Block Utils\n * @param ids - An array of block ids.\n * @returns Whether the blocks can be distributed.\n */\n isDistributable(ids: DesignBlockId[]): boolean;\n /**\n * Resizes and positions a block to fill its parent.\n *\n * The crop values of the block are reset if it can be cropped.\n *\n * @category Block Layout\n * @param id - The block that should fill its parent.\n */\n fillParent(id: DesignBlockId): void;\n /**\n * Resizes blocks while adjusting content to fit.\n *\n * The content of the blocks is automatically adjusted to fit the new dimensions.\n * Full-page blocks are resized to remain as full-page afterwards, while the blocks that are not full-page get resized as a group to the same scale factor and centered.\n * ```javascript\n * const pages = engine.scene.getPages();\n * engine.block.resizeContentAware(pages, width: 100.0, 100.0);\n * ```\n *\n * @category Block Layout\n * @param ids - The blocks to resize.\n * @param width - The new width of the blocks.\n * @param height - The new height of the blocks.\n */\n resizeContentAware(ids: DesignBlockId[], width: number, height: number): void;\n /**\n * Scales a block and its children proportionally.\n *\n * This updates the position, size and style properties (e.g. stroke width) of\n * the block and its children around the specified anchor point.\n *\n * ```javascript\n * // Scale a block to double its size, anchored at the center.\n * engine.block.scale(block, 2.0, 0.5, 0.5);\n * ```\n *\n * @category Block Layout\n * @param id - The block that should be scaled.\n * @param scale - The scale factor to be applied to the current properties of the block.\n * @param anchorX - The relative position along the width of the block around which the scaling should occur (0=left, 0.5=center, 1=right). Defaults to 0.\n * @param anchorY - The relative position along the height of the block around which the scaling should occur (0=top, 0.5=center, 1=bottom). Defaults to 0.\n */\n scale(id: DesignBlockId, scale: number, anchorX?: number, anchorY?: number): void;\n /**\n * Gets all available properties of a block.\n *\n * @category Block Properties\n * @param id - The block whose properties should be queried.\n * @returns A list of the property names.\n */\n findAllProperties(id: DesignBlockId): string[];\n /**\n * Checks if a property is readable.\n *\n * @category Block Properties\n * @param property - The name of the property to check.\n * @returns Whether the property is readable. Returns false for unknown properties.\n */\n isPropertyReadable(property: string): boolean;\n /**\n * Checks if a property is writable.\n *\n * @category Block Properties\n * @param property - The name of the property to check.\n * @returns Whether the property is writable. Returns false for unknown properties.\n */\n isPropertyWritable(property: string): boolean;\n /**\n * Gets the type of a property by its name.\n *\n * @category Block Properties\n * @param property - The name of the property whose type should be queried.\n * @returns The property type.\n */\n getPropertyType(property: string): PropertyType;\n /**\n * Gets all possible values of an enum property.\n *\n * @category Block Properties\n * @param enumProperty - The name of the property whose enum values should be queried.\n * @returns A list of the enum value names as a string array.\n */\n getEnumValues<T = string>(enumProperty: string): T[];\n /**\n * Sets a boolean property on a block.\n *\n * ```javascript\n * engine.block.setBool(scene, 'scene/aspectRatioLock', false);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setBool(id: DesignBlockId, property: BoolPropertyName, value: boolean): void;\n /**\n * Gets a boolean property from a block.\n *\n * ```javascript\n * engine.block.getBool(scene, 'scene/aspectRatioLock');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getBool(id: DesignBlockId, property: BoolPropertyName): boolean;\n /**\n * Sets an integer property on a block.\n *\n * ```javascript\n * engine.block.setInt(starShape, 'shape/star/points', points + 2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setInt(id: DesignBlockId, property: IntPropertyName, value: number): void;\n /**\n * Gets an integer property from a block.\n *\n * ```javascript\n * engine.block.setInt(starShape, 'shape/star/points', points + 2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getInt(id: DesignBlockId, property: IntPropertyName): number;\n /**\n * Sets a float property on a block.\n *\n * ```javascript\n * engine.block.setFloat(text, \"text/letterSpacing\", 0.2);\n * engine.block.setFloat(text, \"text/lineHeight\", 1.2);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setFloat(id: DesignBlockId, property: FloatPropertyName, value: number): void;\n /**\n * Gets a float property from a block.\n *\n * ```javascript\n * engine.block.getFloat(starShape, 'shape/star/innerDiameter');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getFloat(id: DesignBlockId, property: FloatPropertyName): number;\n /**\n * Sets a double-precision float property on a block.\n *\n * ```javascript\n * engine.block.setDouble(audio, 'playback/duration', 1.0);\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setDouble(id: DesignBlockId, property: DoublePropertyName, value: number): void;\n /**\n * Gets a double-precision float property from a block.\n *\n * ```javascript\n * engine.block.getDouble(audio, 'playback/duration');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getDouble(id: DesignBlockId, property: DoublePropertyName): number;\n /**\n * Sets a string property on a block.\n *\n * ```javascript\n * engine.block.setString(text, 'text/text', 'Hello World');\n * engine.block.setString(imageFill, 'fill/image/imageFileURI', 'https://example.com/sample.jpg');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setString(id: DesignBlockId, property: StringPropertyName, value: string): void;\n /**\n * Gets a string property from a block.\n *\n * ```javascript\n * engine.block.getString(text, 'text/text');\n * engine.block.getString(imageFill, 'fill/image/imageFileURI');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getString(id: DesignBlockId, property: StringPropertyName): string;\n /**\n * Sets a color property on a block.\n *\n * ```javascript\n * // Set the block's fill color to white.\n * engine.block.setColor(colorFill, 'fill/color/value', { r: 1, g: 1, b: 1, a: 1 });\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The value to set.\n */\n setColor(id: DesignBlockId, property: ColorPropertyName, value: Color): void;\n /**\n * Gets a color property from a block.\n *\n * ```javascript\n * engine.block.getColor(colorFill, 'fill/color/value');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value of the property.\n */\n getColor(id: DesignBlockId, property: ColorPropertyName): Color;\n /**\n * Sets a color property on a block using RGBA values.\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1. Defaults to 1.\n * @deprecated Use setColor() instead.\n */\n setColorRGBA(id: DesignBlockId, property: string, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets a color property from a block as RGBA values.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns A tuple of channels red, green, blue and alpha in the range of 0 to 1.\n * @deprecated Use getColor() instead.\n */\n getColorRGBA(id: DesignBlockId, property: string): RGBA;\n /**\n * Sets a spot color property on a block.\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param name - The name of the spot color.\n * @param tint - The tint factor in the range of 0 to 1. Defaults to 1.\n * @deprecated Use setColor() instead.\n */\n setColorSpot(id: DesignBlockId, property: string, name: string, tint?: number): void;\n /**\n * Gets the spot color name from a color property.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The name of the spot color.\n * @deprecated Use getColor() instead.\n */\n getColorSpotName(id: DesignBlockId, property: string): string;\n /**\n * Gets the spot color tint from a color property.\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The tint factor of the spot color.\n * @deprecated Use getColor() instead.\n */\n getColorSpotTint(id: DesignBlockId, property: string): number;\n /**\n * Sets the color stops for a gradient property.\n *\n * ```javascript\n * engine.block.setGradientColorStops(gradientFill, 'fill/gradient/colors', [\n * { color: { r: 1.0, g: 0.8, b: 0.2, a: 1.0 }, stop: 0 },\n * { color: { r: 0.3, g: 0.4, b: 0.7, a: 1.0 }, stop: 1 }\n * ]);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set, e.g. 'fill/gradient/colors'.\n * @param colors - An array of gradient color stops.\n */\n setGradientColorStops(id: DesignBlockId, property: string, colors: GradientColorStop[]): void;\n /**\n * Gets the color stops from a gradient property.\n *\n * ```\n * engine.block.getGradientColorStops(gradientFill, 'fill/gradient/colors');\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The gradient colors.\n */\n getGradientColorStops(id: DesignBlockId, property: string): GradientColorStop[];\n /**\n * Gets the source set from a block property.\n *\n * ```javascript\n * const sourceSet = engine.block.getSourceSet(imageFill, 'fill/image/sourceSet');\n * ```\n *\n * @category Block Fills\n * @param id - The block that should be queried.\n * @param property - The name of the property to query, e.g. 'fill/image/sourceSet'.\n * @returns The block's source set.\n */\n getSourceSet(id: DesignBlockId, property: SourceSetPropertyName): Source[];\n /**\n * Sets the source set for a block property.\n *\n * The crop and content fill mode of the associated block will be reset to default values.\n *\n * ```javascript\n * engine.block.setSourceSet(imageFill, 'fill/image/sourceSet', [{\n * uri: 'https://example.com/sample.jpg',\n * width: 800,\n * height: 600\n * }]);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param sourceSet - The block's new source set.\n */\n setSourceSet(id: DesignBlockId, property: SourceSetPropertyName, sourceSet: Source[]): void;\n /**\n * Adds an image file URI to a source set property.\n *\n * If an image with the same width already exists in the source set, it will be replaced.\n *\n * ```javascript\n * await engine.block.addImageFileURIToSourceSet(imageFill, 'fill/image/sourceSet', 'https://example.com/sample.jpg');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param property - The name of the property to modify.\n * @param uri - The source to add to the source set.\n * @returns A promise that resolves when the operation is complete.\n */\n addImageFileURIToSourceSet(id: DesignBlockId, property: SourceSetPropertyName, uri: string): Promise<void>;\n /**\n * Adds a video file URI to a source set property.\n *\n * If a video with the same width already exists in the source set, it will be replaced.\n *\n * ```javascript\n * await engine.block.addVideoFileURIToSourceSet(videoFill, 'fill/video/sourceSet', 'https://example.com/sample.mp4');\n * ```\n *\n * @category Block Fills\n * @param id - The block to update.\n * @param property - The name of the property to modify.\n * @param uri - The source to add to the source set.\n * @returns A promise that resolves when the operation is complete.\n */\n addVideoFileURIToSourceSet(id: DesignBlockId, property: SourceSetPropertyName, uri: string): Promise<void>;\n /**\n * Sets an enum property on a block.\n *\n * ```javascript\n * engine.block.setEnum(text, 'text/horizontalAlignment', 'Center');\n * engine.block.setEnum(text, 'text/verticalAlignment', 'Center');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be set.\n * @param property - The name of the property to set.\n * @param value - The enum value as a string.\n */\n setEnum<T extends keyof BlockEnumType>(id: DesignBlockId, property: T, value: BlockEnumType[T]): void;\n setEnum(id: DesignBlockId, property: string, value: string): void;\n /**\n * Gets an enum property from a block.\n *\n * ```javascript\n * engine.block.getEnum(text, 'text/horizontalAlignment');\n * engine.block.getEnum(text, 'text/verticalAlignment');\n * ```\n *\n * @category Block Properties\n * @param id - The block whose property should be queried.\n * @param property - The name of the property to query.\n * @returns The value as a string.\n */\n getEnum<T extends keyof BlockEnumType>(id: DesignBlockId, property: T): BlockEnumType[T];\n getEnum(id: DesignBlockId, property: string): string;\n /**\n * Checks if a block has crop properties.\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns true, if the block has crop properties.\n * @deprecated Use supportsCrop() instead.\n */\n hasCrop(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports cropping.\n *\n * ```javascript\n * engine.block.supportsCrop(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns true, if the block supports cropping.\n */\n supportsCrop(id: DesignBlockId): boolean;\n /**\n * Sets the horizontal crop scale of a block.\n *\n * ```javascript\n * engine.block.setCropScaleX(image, 2.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleX - The scale in x direction.\n */\n setCropScaleX(id: DesignBlockId, scaleX: number): void;\n /**\n * Sets the vertical crop scale of a block.\n *\n * ```javascript\n * engine.block.setCropScaleY(image, 1.5);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleY - The scale in y direction.\n */\n setCropScaleY(id: DesignBlockId, scaleY: number): void;\n /**\n * Sets the crop rotation of a block in radians.\n *\n * ```javascript\n * engine.block.setCropRotation(image, Math.PI);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param rotation - The rotation in radians.\n */\n setCropRotation(id: DesignBlockId, rotation: number): void;\n /**\n * Sets the uniform crop scale ratio of a block.\n *\n * This scales the content up or down from the center of the crop frame.\n *\n * ```javascript\n * engine.block.setCropScaleRatio(image, 3.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param scaleRatio - The crop scale ratio.\n */\n setCropScaleRatio(id: DesignBlockId, scaleRatio: number): void;\n /**\n * Sets the horizontal crop translation of a block in percentage of the crop frame width.\n *\n * ```javascript\n * engine.block.setCropTranslationX(image, -1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param translationX - The translation in x direction.\n */\n setCropTranslationX(id: DesignBlockId, translationX: number): void;\n /**\n * Sets the vertical crop translation of a block in percentage of the crop frame height.\n *\n * ```javascript\n * engine.block.setCropTranslationY(image, 1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be set.\n * @param translationY - The translation in y direction.\n */\n setCropTranslationY(id: DesignBlockId, translationY: number): void;\n /**\n * Resets the crop of a block to its default state.\n *\n * The block's content fill mode is set to 'Cover'.\n *\n * ```javascript\n * engine.block.resetCrop(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be reset.\n */\n resetCrop(id: DesignBlockId): void;\n /**\n * Gets the horizontal crop scale of a block.\n *\n * ```javascript\n * const scaleX = engine.block.getCropScaleX(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose scale should be queried.\n * @returns The scale on the x axis.\n */\n getCropScaleX(id: DesignBlockId): number;\n /**\n * Gets the vertical crop scale of a block.\n *\n * ```javascript\n * const scaleY = engine.block.getCropScaleY(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose scale should be queried.\n * @returns The scale on the y axis.\n */\n getCropScaleY(id: DesignBlockId): number;\n /**\n * Gets the crop rotation of a block in radians.\n *\n * ```javascript\n * const cropRotation = engine.block.getCropRotation(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop rotation should be queried.\n * @returns The crop rotation in radians.\n */\n getCropRotation(id: DesignBlockId): number;\n /**\n * Gets the uniform crop scale ratio of a block.\n *\n * ```javascript\n * const cropScaleRatio = engine.block.getCropScaleRatio(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop scale ratio should be queried.\n * @returns The crop scale ratio.\n */\n getCropScaleRatio(id: DesignBlockId): number;\n /**\n * Gets the horizontal crop translation of a block in percentage of the crop frame width.\n *\n * ```javascript\n * const cropTranslationX = engine.block.getCropTranslationX(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose translation should be queried.\n * @returns The translation on the x axis.\n */\n getCropTranslationX(id: DesignBlockId): number;\n /**\n * Gets the vertical crop translation of a block in percentage of the crop frame height.\n *\n * ```javascript\n * const cropTranslationY = engine.block.getCropTranslationY(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose translation should be queried.\n * @returns The translation on the y axis.\n */\n getCropTranslationY(id: DesignBlockId): number;\n /**\n * Adjusts the crop position and scale of the given image block to fill its crop frame, while maintaining the position and size of the crop frame.\n *\n * ```javascript\n * const adjustedScaleRatio = engine.block.adjustCropToFillFrame(image, 1.0);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be adjusted.\n * @param minScaleRatio - The minimal crop scale ratio to use.\n * @returns The adjusted scale ratio.\n */\n adjustCropToFillFrame(id: DesignBlockId, minScaleRatio: number): number;\n /**\n * Flips the content horizontally within its crop frame.\n *\n * ```javascript\n * engine.block.flipCropHorizontal(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be updated.\n */\n flipCropHorizontal(id: DesignBlockId): void;\n /**\n * Flips the content vertically within its crop frame.\n *\n * ```javascript\n * engine.block.flipCropVertical(image);\n * ```\n *\n * @category Block Crop\n * @param id - The block whose crop should be updated.\n */\n flipCropVertical(id: DesignBlockId): void;\n /**\n * Checks if the crop aspect ratio is locked for a block.\n *\n * When locked, crop handles will maintain the current aspect ratio during resize.\n *\n * ```javascript\n * const isLocked = engine.block.isCropAspectRatioLocked(block);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns True if aspect ratio is locked, false otherwise.\n */\n isCropAspectRatioLocked(id: DesignBlockId): boolean;\n /**\n * Sets whether the crop aspect ratio should be locked for a block.\n *\n * When enabled, crop handles will maintain the current aspect ratio.\n * When disabled, free resizing is allowed.\n *\n * ```javascript\n * engine.block.setCropAspectRatioLocked(block, true);\n * ```\n *\n * @category Block Crop\n * @param id - The block to update.\n * @param locked - Whether aspect ratio should be locked.\n */\n setCropAspectRatioLocked(id: DesignBlockId, locked: boolean): void;\n /**\n * Checks whether the \"Original\" crop preset (`ContentAspectRatio`) can be applied to a block.\n *\n * This runs the same preliminary check the apply path performs: it resolves the intrinsic\n * content dimensions from the block's image/video fill (an image fill resolves only from its\n * `sourceSet`; a video fill resolves from its `sourceSet` or the first decoded frame). Use it\n * to gate UI that would otherwise call the preset and fail — e.g. an unreplaced placeholder\n * image fill with an empty `sourceSet`.\n *\n * ```javascript\n * const canRevert = engine.block.canRevertToOriginalRatio(block);\n * ```\n *\n * @category Block Crop\n * @param id - The block to query.\n * @returns True if the preset would resolve, false if it cannot (no/placeholder fill, empty\n * sourceSet, video not yet decoded, or unsupported fill type).\n */\n canRevertToOriginalRatio(id: DesignBlockId): boolean;\n /**\n * Checks if a block has an opacity property.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has an opacity.\n * @deprecated Use supportsOpacity() instead.\n */\n hasOpacity(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports opacity.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports opacity.\n */\n supportsOpacity(id: DesignBlockId): boolean;\n /**\n * Sets the opacity of a block.\n *\n * @category Block Appearance\n * @param id - The block whose opacity should be set.\n * @param opacity - The opacity to be set. The valid range is 0 to 1.\n */\n setOpacity(id: DesignBlockId, opacity: number): void;\n /**\n * Gets the opacity of a block.\n *\n * @category Block Appearance\n * @param id - The block whose opacity should be queried.\n * @returns The opacity value.\n */\n getOpacity(id: DesignBlockId): number;\n /**\n * Checks if a block has a blend mode property.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has a blend mode.\n * @deprecated Use supportsBlendMode() instead.\n */\n hasBlendMode(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports blend modes.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports blend modes.\n */\n supportsBlendMode(id: DesignBlockId): boolean;\n /**\n * Sets the blend mode of a block.\n *\n * @category Block Appearance\n * @param id - The block whose blend mode should be set.\n * @param blendMode - The blend mode to be set.\n */\n setBlendMode(id: DesignBlockId, blendMode: BlendMode): void;\n /**\n * Gets the blend mode of a block.\n *\n * @category Block Appearance\n * @param id - The block whose blend mode should be queried.\n * @returns The blend mode.\n */\n getBlendMode(id: DesignBlockId): BlendMode;\n /**\n * Checks if a block has fill color properties.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has fill color properties.\n * @deprecated Query the fill's type using getFill() and getType() instead.\n */\n hasFillColor(id: DesignBlockId): boolean;\n /**\n * Checks if a block is included in exports.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns true, if the block is included on the exported result, false otherwise.\n */\n isIncludedInExport(id: DesignBlockId): boolean;\n /**\n * Sets whether a block should be included in exports.\n *\n * @category Block State\n * @param id - The block whose exportable state should be set.\n * @param enabled - If true, the block will be included on the exported result.\n */\n setIncludedInExport(id: DesignBlockId, enabled: boolean): void;\n /**\n * Sets the fill color of a block using RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setFillSolidColor() instead.\n */\n setFillColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the fill color of a block as RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be queried.\n * @returns The fill color.\n * @deprecated Use getFillSolidColor() instead.\n */\n getFillColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the fill of a block.\n *\n * @category Block Fills\n * @param id - The block whose fill should be enabled or disabled.\n * @param enabled - If true, the fill will be enabled.\n * @deprecated Use setFillEnabled() instead.\n */\n setFillColorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the fill of a block is enabled.\n *\n * @category Block Fills\n * @param id - The block whose fill state should be queried.\n * @returns True, if fill is enabled.\n * @deprecated Use isFillEnabled() instead.\n */\n isFillColorEnabled(id: DesignBlockId): boolean;\n /**\n * Creates a new effect block.\n *\n * @category Block Effects\n * @param type - The type of the effect.\n * @returns The created effect's handle.\n */\n createEffect(type: EffectType): DesignBlockId;\n /**\n * Checks if a block supports effects.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns True, if the block can render effects, false otherwise.\n * @deprecated Use supportsEffects instead.\n */\n hasEffects(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports effects.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns True, if the block can render effects, false otherwise.\n */\n supportsEffects(id: DesignBlockId): boolean;\n /**\n * Gets all effects attached to a block.\n *\n * @category Block Effects\n * @param id - The block to query.\n * @returns A list of effects or an error, if the block doesn't support effects.\n */\n getEffects(id: DesignBlockId): DesignBlockId[];\n /**\n * Inserts an effect into a block's effect list at a given index.\n *\n * @category Block Effects\n * @param id - The block to update.\n * @param effectId - The effect to insert.\n * @param index - The index at which the effect shall be inserted.\n */\n insertEffect(id: DesignBlockId, effectId: DesignBlockId, index: number): void;\n /**\n * Appends an effect to a block's effect list.\n *\n * @category Block Effects\n * @param id - The block to append the effect to.\n * @param effectId - The effect to append.\n */\n appendEffect(id: DesignBlockId, effectId: DesignBlockId): void;\n /**\n * Removes an effect from a block's effect list at a given index.\n *\n * @category Block Effects\n * @param id - The block to remove the effect from.\n * @param index - The index where the effect is stored.\n */\n removeEffect(id: DesignBlockId, index: number): void;\n /**\n * Checks if an effect block can be enabled or disabled.\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to query.\n * @returns True, if the block supports enabling and disabling, false otherwise.\n * @deprecated Calls to this function can be removed. All effects can be enabled and disabled.\n */\n hasEffectEnabled(effectId: DesignBlockId): boolean;\n /**\n * Sets the enabled state of an effect block.\n *\n * ```javascript\n * engine.block.setEffectEnabled(effects[0], false);\n * ```\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to update.\n * @param enabled - The new state.\n */\n setEffectEnabled(effectId: DesignBlockId, enabled: boolean): void;\n /**\n * Queries if an effect block is enabled.\n *\n * ```javascript\n * engine.block.isEffectEnabled(effects[0]);\n * ```\n *\n * @category Block Effects\n * @param effectId - The 'effect' block to query.\n * @returns True, if the effect is enabled. False otherwise.\n */\n isEffectEnabled(effectId: DesignBlockId): boolean;\n /**\n * Creates a new blur block.\n *\n * @category Block Blur\n * @param type - The type of blur.\n * @returns The handle of the newly created blur.\n */\n createBlur(type: BlurType): DesignBlockId;\n /**\n * Checks if a block supports blur.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the block supports blur.\n * @deprecated Use supportsBlur instead.\n */\n hasBlur(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports blur.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the block supports blur.\n */\n supportsBlur(id: DesignBlockId): boolean;\n /**\n * Sets the blur effect for a block.\n *\n * @category Block Blur\n * @param id - The block to update.\n * @param blurId - A 'blur' block to apply.\n */\n setBlur(id: DesignBlockId, blurId: DesignBlockId): void;\n /**\n * Gets the blur block of a given design block.\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns The 'blur' block.\n */\n getBlur(id: DesignBlockId): DesignBlockId;\n /**\n * Enables or disables the blur effect on a block.\n *\n * ```javascript\n * engine.block.setBlurEnabled(block, true);\n * ```\n *\n * @category Block Blur\n * @param id - The block to update.\n * @param enabled - The new enabled value.\n */\n setBlurEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if blur is enabled for a block.\n *\n * ```javascript\n * const isBlurEnabled = engine.block.isBlurEnabled(block);\n * ```\n *\n * @category Block Blur\n * @param id - The block to query.\n * @returns True, if the blur is enabled. False otherwise.\n */\n isBlurEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has background color properties.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block has background color properties.\n * @deprecated Use supportsBackgroundColor() instead.\n */\n hasBackgroundColor(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a background color.\n *\n * @category Block Appearance\n * @param id - The block to query.\n * @returns true, if the block supports a background color.\n */\n supportsBackgroundColor(id: DesignBlockId): boolean;\n /**\n * Sets the background color of a block using RGBA values.\n *\n * @category Block Appearance\n * @param id - The block whose background color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use `Use setColor() with the key path 'backgroundColor/color' instead.`.\n */\n setBackgroundColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the background color of a block as RGBA values.\n *\n * @category Block Appearance\n * @param id - The block whose background color should be queried.\n * @returns The background color.\n * @deprecated Use `Use getColor() with the key path 'backgroundColor/color' instead.`.\n */\n getBackgroundColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the background of a block.\n *\n * ```javascript\n * engine.block.setBackgroundColorEnabled(block, true);\n * ```\n *\n * @category Block Appearance\n * @param id - The block whose background should be enabled or disabled.\n * @param enabled - If true, the background will be enabled.\n */\n setBackgroundColorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the background of a block is enabled.\n *\n * ```javascript\n * const backgroundColorIsEnabled = engine.block.isBackgroundColorEnabled(block);\n * ```\n *\n * @category Block Appearance\n * @param id - The block whose background state should be queried.\n * @returns True, if background is enabled.\n */\n isBackgroundColorEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has a stroke property.\n *\n * @category Block Strokes\n * @param id - The block to query.\n * @returns True if the block has a stroke property.\n * @deprecated Use supportsStroke() instead.\n */\n hasStroke(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a stroke.\n *\n * @category Block Strokes\n * @param id - The block to query.\n * @returns True if the block supports a stroke.\n */\n supportsStroke(id: DesignBlockId): boolean;\n /**\n * Enables or disables the stroke of a block.\n *\n * ```javascript\n * engine.block.setStrokeEnabled(block, true);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke should be enabled or disabled.\n * @param enabled - If true, the stroke will be enabled.\n */\n setStrokeEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the stroke of a block is enabled.\n *\n * ```javascript\n * const strokeIsEnabled = engine.block.isStrokeEnabled(block);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke state should be queried.\n * @returns True if the block's stroke is enabled.\n */\n isStrokeEnabled(id: DesignBlockId): boolean;\n /**\n * Marks the stroke of a block as overprint for PDF export.\n *\n * The flag is only honored by the PDF writer when the stroke uses a spot color\n * (Separation/DeviceN). For process-color strokes it is a silent no-op. On-screen\n * rendering ignores the flag.\n *\n * ```javascript\n * engine.block.setStrokeOverprint(block, true);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke overprint flag should be set.\n * @param overprint - If true, the stroke is marked as overprint in exported PDFs.\n */\n setStrokeOverprint(id: DesignBlockId, overprint: boolean): void;\n /**\n * Queries whether the stroke of a block is marked as overprint for PDF export.\n *\n * ```javascript\n * const overprint = engine.block.getStrokeOverprint(block);\n * ```\n *\n * @category Block Strokes\n * @param id - The block whose stroke overprint flag should be queried.\n * @returns The stroke overprint flag.\n */\n getStrokeOverprint(id: DesignBlockId): boolean;\n /**\n * Sets the stroke color of a block using RGBA values.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setStrokeColor() instead.\n */\n setStrokeColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Sets the stroke color of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be set.\n * @param color - The color to set.\n */\n setStrokeColor(id: DesignBlockId, color: Color): void;\n /**\n * Gets the stroke color of a block as RGBA values.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be queried.\n * @returns The stroke color.\n * @deprecated Use getStrokeColor() instead.\n */\n getStrokeColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Gets the stroke color of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke color should be queried.\n * @returns The stroke color.\n */\n getStrokeColor(id: DesignBlockId): Color;\n /**\n * Sets the stroke width of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke width should be set.\n * @param width - The stroke width to be set.\n */\n setStrokeWidth(id: DesignBlockId, width: number): void;\n /**\n * Gets the stroke width of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke width should be queried.\n * @returns The stroke's width.\n */\n getStrokeWidth(id: DesignBlockId): number;\n /**\n * Sets the stroke style of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke style should be set.\n * @param style - The stroke style to be set.\n */\n setStrokeStyle(id: DesignBlockId, style: StrokeStyle): void;\n /**\n * Gets the stroke style of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke style should be queried.\n * @returns The stroke's style.\n */\n getStrokeStyle(id: DesignBlockId): StrokeStyle;\n /**\n * Sets the stroke position of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke position should be set.\n * @param position - The stroke position to be set.\n */\n setStrokePosition(id: DesignBlockId, position: StrokePosition): void;\n /**\n * Gets the stroke position of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke position should be queried.\n * @returns The stroke position.\n */\n getStrokePosition(id: DesignBlockId): StrokePosition;\n /**\n * Sets the stroke corner geometry of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke corner geometry should be set.\n * @param cornerGeometry - The stroke corner geometry to be set.\n */\n setStrokeCornerGeometry(id: DesignBlockId, cornerGeometry: StrokeCornerGeometry): void;\n /**\n * Gets the stroke corner geometry of a block.\n *\n * @category Block Strokes\n * @param id - The block whose stroke corner geometry should be queried.\n * @returns The stroke corner geometry.\n */\n getStrokeCornerGeometry(id: DesignBlockId): StrokeCornerGeometry;\n /**\n * Sets the stroke cap of a block. Writes both the start and end caps to the\n * same value.\n *\n * @category Block Strokes\n * @param id - The block whose stroke cap should be set.\n * @param cap - The stroke cap to be set.\n * @deprecated Use `setStrokeStartCap` and `setStrokeEndCap` to set each end\n * independently.\n */\n setStrokeCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the legacy single stroke cap of a block. Tracks the value last written\n * via `setStrokeCap` or `setStrokeStartCap`; ignores changes made via\n * `setStrokeEndCap`.\n *\n * @category Block Strokes\n * @param id - The block whose stroke cap should be queried.\n * @returns The stroke cap.\n * @deprecated Use `getStrokeStartCap` and `getStrokeEndCap` instead.\n */\n getStrokeCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the start of an open stroked path. Use this with\n * `setStrokeEndCap` to set distinct caps for each end of a stroke (for\n * example a flat start with an arrowhead end). `setStrokeCap` continues to\n * set both ends at once and is preserved for backwards compatibility.\n *\n * @category Block Strokes\n * @param id - The block whose stroke start cap should be set.\n * @param cap - The cap geometry to use at the path start.\n */\n setStrokeStartCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the start of an open stroked path.\n *\n * @category Block Strokes\n * @param id - The block whose stroke start cap should be queried.\n * @returns The start cap.\n */\n getStrokeStartCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the end of an open stroked path. Use this with\n * `setStrokeStartCap` to set distinct caps for each end of a stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke end cap should be set.\n * @param cap - The cap geometry to use at the path end.\n */\n setStrokeEndCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the end of an open stroked path.\n *\n * @category Block Strokes\n * @param id - The block whose stroke end cap should be queried.\n * @returns The end cap.\n */\n getStrokeEndCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the leading edge of each dash piece (excluding the\n * line's actual start). Only takes effect when a dash pattern is active.\n * Distinct from `setStrokeStartCap`, which only applies to the start of the\n * open path itself.\n *\n * @category Block Strokes\n * @param id - The block whose dash start cap should be set.\n * @param cap - The cap geometry to use at the leading edge of each dash piece.\n */\n setStrokeDashStartCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the leading edge of each dash piece.\n *\n * @category Block Strokes\n * @param id - The block whose dash start cap should be queried.\n * @returns The dash start cap.\n */\n getStrokeDashStartCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets the cap geometry at the trailing edge of each dash piece (excluding the\n * line's actual end). Only takes effect when a dash pattern is active. Distinct\n * from `setStrokeEndCap`, which only applies to the end of the open path itself.\n *\n * @category Block Strokes\n * @param id - The block whose dash end cap should be set.\n * @param cap - The cap geometry to use at the trailing edge of each dash piece.\n */\n setStrokeDashEndCap(id: DesignBlockId, cap: StrokeCap): void;\n /**\n * Gets the cap geometry at the trailing edge of each dash piece.\n *\n * @category Block Strokes\n * @param id - The block whose dash end cap should be queried.\n * @returns The dash end cap.\n */\n getStrokeDashEndCap(id: DesignBlockId): StrokeCap;\n /**\n * Sets a custom dash pattern for the block's stroke. Semantics match SVG's\n * `stroke-dasharray`: alternating on/off lengths in design-unit space. When the\n * pattern is non-empty it overrides the preset implied by `StrokeStyle`. Pass an\n * empty array to fall back to the preset.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash pattern should be set.\n * @param dashArray - Alternating on/off lengths. Odd-length arrays are doubled to\n * an even length, matching SVG behaviour.\n */\n setStrokeDashArray(id: DesignBlockId, dashArray: number[]): void;\n /**\n * Gets the custom dash pattern of the block's stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash pattern should be queried.\n * @returns The dash pattern, or an empty array if no custom pattern is set.\n */\n getStrokeDashArray(id: DesignBlockId): number[];\n /**\n * Sets the dash offset of the block's stroke. Semantics match SVG's\n * `stroke-dashoffset`. Ignored when the custom dash pattern is empty.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash offset should be set.\n * @param dashOffset - The dash offset in design-unit space.\n */\n setStrokeDashOffset(id: DesignBlockId, dashOffset: number): void;\n /**\n * Gets the dash offset of the block's stroke.\n *\n * @category Block Strokes\n * @param id - The block whose stroke dash offset should be queried.\n * @returns The dash offset.\n */\n getStrokeDashOffset(id: DesignBlockId): number;\n /**\n * Checks if a block has a drop shadow property.\n *\n * @category Block Drop Shadow\n * @param id - The block to query.\n * @returns True if the block has a drop shadow property.\n * @deprecated Use supportsDropShadow() instead.\n */\n hasDropShadow(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a drop shadow.\n *\n * @category Block Drop Shadow\n * @param id - The block to query.\n * @returns True if the block supports a drop shadow.\n */\n supportsDropShadow(id: DesignBlockId): boolean;\n /**\n * Enables or disables the drop shadow of a block.\n *\n * ```javascript\n * engine.block.setDropShadowEnabled(block, true);\n * ```\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow should be enabled or disabled.\n * @param enabled - If true, the drop shadow will be enabled.\n */\n setDropShadowEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the drop shadow of a block is enabled.\n *\n * ```javascript\n * const dropShadowIsEnabled = engine.block.isDropShadowEnabled(block);\n * ```\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow state should be queried.\n * @returns True if the block's drop shadow is enabled.\n */\n isDropShadowEnabled(id: DesignBlockId): boolean;\n /**\n * Sets the drop shadow color of a block using RGBA values.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setDropShadowColor() instead.\n */\n setDropShadowColorRGBA(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Sets the drop shadow color of a block.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be set.\n * @param color - The color to set.\n */\n setDropShadowColor(id: DesignBlockId, color: Color): void;\n /**\n * Gets the drop shadow color of a block as RGBA values.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be queried.\n * @returns The drop shadow color.\n * @deprecated Use getDropShadowColor instead.\n */\n getDropShadowColorRGBA(id: DesignBlockId): RGBA;\n /**\n * Gets the drop shadow color of a block.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow color should be queried.\n * @returns The drop shadow color.\n */\n getDropShadowColor(id: DesignBlockId): Color;\n /**\n * Sets the drop shadow's horizontal offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's X offset should be set.\n * @param offsetX - The X offset to be set.\n */\n setDropShadowOffsetX(id: DesignBlockId, offsetX: number): void;\n /**\n * Gets the drop shadow's horizontal offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's X offset should be queried.\n * @returns The offset.\n */\n getDropShadowOffsetX(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's vertical offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's Y offset should be set.\n * @param offsetY - The Y offset to be set.\n */\n setDropShadowOffsetY(id: DesignBlockId, offsetY: number): void;\n /**\n * Gets the drop shadow's vertical offset.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's Y offset should be queried.\n * @returns The offset.\n */\n getDropShadowOffsetY(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's horizontal blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be set.\n * @param blurRadiusX - The blur radius to be set.\n */\n setDropShadowBlurRadiusX(id: DesignBlockId, blurRadiusX: number): void;\n /**\n * Gets the drop shadow's horizontal blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be queried.\n * @returns The blur radius.\n */\n getDropShadowBlurRadiusX(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's vertical blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be set.\n * @param blurRadiusY - The blur radius to be set.\n */\n setDropShadowBlurRadiusY(id: DesignBlockId, blurRadiusY: number): void;\n /**\n * Gets the drop shadow's vertical blur radius.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's blur radius should be queried.\n * @returns The blur radius.\n */\n getDropShadowBlurRadiusY(id: DesignBlockId): number;\n /**\n * Sets the drop shadow's clipping behavior.\n *\n * This only applies to shapes.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's clip should be set.\n * @param clip - The drop shadow's clip to be set.\n */\n setDropShadowClip(id: DesignBlockId, clip: boolean): void;\n /**\n * Gets the drop shadow's clipping behavior.\n *\n * @category Block Drop Shadow\n * @param id - The block whose drop shadow's clipping should be queried.\n * @returns The drop shadow's clipping state.\n */\n getDropShadowClip(id: DesignBlockId): boolean;\n /**\n * Creates a cutout block from the contours of other blocks.\n *\n * The path is derived from either existing vector paths or by vectorizing the block's appearance.\n *\n * @category Block Cutout\n * @param ids - The blocks whose shape will serve as the basis for the cutout's path.\n * @param vectorizeDistanceThreshold - Max deviation from the original contour during vectorization.\n * @param simplifyDistanceThreshold - Max deviation for path simplification. 0 disables simplification.\n * @param useExistingShapeInformation - If true, use existing vector paths.\n * @returns The newly created block or an error.\n */\n createCutoutFromBlocks(ids: DesignBlockId[], vectorizeDistanceThreshold?: number, simplifyDistanceThreshold?: number, useExistingShapeInformation?: boolean): DesignBlockId;\n /**\n * Creates a cutout block from an SVG path string.\n *\n * @category Block Cutout\n * @param path - An SVG string describing a path.\n * @returns The newly created block or an error.\n */\n createCutoutFromPath(path: string): DesignBlockId;\n /**\n * Creates a new cutout block by performing a boolean operation on existing cutout blocks.\n *\n * @category Block Cutout\n * @param ids - The cutout blocks with which to perform to the operation.\n * @param op - The boolean operation to perform.\n * @returns The newly created block or an error.\n */\n createCutoutFromOperation(ids: DesignBlockId[], op: CutoutOperation): DesignBlockId;\n /**\n * Replaces a range of text in a text block.\n *\n * ```javascript\n * engine.block.replaceText(text, 'Hello World');\n * engine.block.replaceText(text, 'Alex', 6, 11);\n * ```\n *\n * @category Block Text\n * @param id - The text block into which to insert the given text.\n * @param text - The text which should replace the selected range in the block.\n * @param from - The start index of the UTF-16 range to replace. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to replace. Defaults to the end of the current selection or text.\n */\n replaceText(id: DesignBlockId, text: string, from?: number, to?: number): void;\n /**\n * Removes a range of text from a text block.\n *\n * ```javascript\n * engine.block.removeText(text, 0, 6);\n * ```\n * @category Block Text\n * @param id - The text block from which the selected text should be removed.\n * @param from - The start index of the UTF-16 range to remove. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to remove. Defaults to the end of the current selection or text.\n */\n removeText(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Sets the color for a range of text.\n *\n * ```javascript\n * engine.block.setTextColor(text, { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, 1, 4);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose color should be changed.\n * @param color - The new color of the selected text range.\n * @param from - The start index of the UTF-16 range to change. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range to change. Defaults to the end of the current selection or text.\n */\n setTextColor(id: DesignBlockId, color: Color, from?: number, to?: number): void;\n /**\n * Gets the unique colors within a range of text.\n *\n * ```javascript\n * const colorsInRange = engine.block.getTextColors(text, 2, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose colors should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of colors.\n */\n getTextColors(id: DesignBlockId, from?: number, to?: number): Array<Color>;\n /**\n * Sets the font weight for a range of text.\n *\n * ```javascript\n * engine.block.setTextFontWeight(text, 'bold', 0, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose weight should be changed.\n * @param fontWeight - The new weight of the selected text range.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextFontWeight(id: DesignBlockId, fontWeight: FontWeight, from?: number, to?: number): void;\n /**\n * Gets the unique font weights within a range of text.\n *\n * ```javascript\n * const fontWeights = engine.block.getTextFontWeights(text, 0, 6);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font weights should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font weights.\n */\n getTextFontWeights(id: DesignBlockId, from?: number, to?: number): FontWeight[];\n /**\n * Sets the font size for a range of text.\n *\n * ```javascript\n * // With numeric fontSize (in points)\n * engine.block.setTextFontSize(text, 12, 0, 5);\n *\n * // With font size and options object\n * engine.block.setTextFontSize(text, 16, { unit: 'Pixel' });\n * engine.block.setTextFontSize(text, 24, { unit: 'Point', from: 0, to: 10 });\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font size should be changed.\n * @param fontSize - The new font size value.\n * @param options - An options object with unit, from, and to properties.\n */\n setTextFontSize(id: DesignBlockId, fontSize: number, options?: TextFontSizeOptions): void;\n /**\n * Sets the font size for a range of text.\n *\n * @category Block Text\n * @param id - The text block whose font size should be changed.\n * @param fontSize - The new font size in points.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @deprecated Use the new signature with options object instead.\n * @example\n * ```typescript\n * // Before migration\n * engine.block.setTextFontSize(text, 18, 0, 5);\n * // After migration\n * engine.block.setTextFontSize(text, 18, { from: 0, to: 5 });\n * ```\n */\n setTextFontSize(id: DesignBlockId, fontSize: number, from?: number, to?: number): void;\n /**\n * Gets the unique font sizes within a range of text.\n *\n * ```javascript\n * // Get all font sizes\n * const fontSizes = engine.block.getTextFontSizes(text);\n *\n * // Get font sizes for a range\n * const fontSizes = engine.block.getTextFontSizes(text, 0, 10);\n *\n * // With options object\n * const sizesInPx = engine.block.getTextFontSizes(text, { unit: 'Pixel' });\n * const sizesInRange = engine.block.getTextFontSizes(text, { unit: 'Millimeter', from: 5, to: 15 });\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font sizes should be returned.\n * @param options - An options object with unit, from, and to properties.\n * @returns The ordered unique list of font sizes.\n */\n getTextFontSizes(id: DesignBlockId, options?: TextFontSizeOptions): number[];\n /**\n * Gets the unique font sizes within a range of text.\n *\n * @category Block Text\n * @param id - The text block whose font sizes should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font sizes in points.\n * @deprecated Use the new signature with options object instead.\n * @example\n * ```typescript\n * // Before migration\n * const fontSizes = engine.block.getTextFontSizes(text, 0, 10);\n * // After migration\n * const fontSizes = engine.block.getTextFontSizes(text, { from: 0, to: 10 });\n * ```\n */\n getTextFontSizes(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Sets the font style for a range of text.\n *\n * ```javascript\n * engine.block.setTextFontStyle(text, 'italic', 0, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose style should be changed.\n * @param fontStyle - The new style of the selected text range.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextFontStyle(id: DesignBlockId, fontStyle: FontStyle, from?: number, to?: number): void;\n /**\n * Gets the unique font styles within a range of text.\n *\n * ```javascript\n * const fontStyles = engine.block.getTextFontStyles(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font styles should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered unique list of font styles.\n */\n getTextFontStyles(id: DesignBlockId, from?: number, to?: number): FontStyle[];\n /**\n * Gets the unique text cases within a range of text.\n *\n * ```javascript\n * const textCases = engine.block.getTextCases(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text cases should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered list of text cases.\n */\n getTextCases(id: DesignBlockId, from?: number, to?: number): TextCase[];\n /**\n * Sets the text case for a range of text.\n *\n * ```javascript\n * engine.block.setTextCase(text, 'Titlecase');\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text case should be changed.\n * @param textCase - The new text case value.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextCase(id: DesignBlockId, textCase: TextCase, from?: number, to?: number): void;\n /**\n * Gets the unique text decoration configurations within a range of text.\n *\n * Each element of the returned array is a decoration configuration representing\n * a unique combination of lines, style, color, and thickness found in the range.\n *\n * ```javascript\n * const decorations = engine.block.getTextDecorations(text);\n * // e.g., [{ lines: ['None'] }, { lines: ['Underline'], style: 'Dashed' }]\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text decorations should be returned.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered list of unique decoration configurations.\n */\n getTextDecorations(id: DesignBlockId, from?: number, to?: number): TextDecorationConfig[];\n /**\n * Sets the text decoration for a range of text.\n *\n * The config specifies which decoration lines, style, underline color, thickness, and offset to apply.\n * Use `{ lines: ['None'] }` to remove all decorations.\n *\n * ```javascript\n * engine.block.setTextDecoration(text, { lines: ['Underline'] });\n * engine.block.setTextDecoration(text, { lines: ['Underline', 'Strikethrough'], style: 'Dashed' });\n * engine.block.setTextDecoration(text, { lines: ['Overline'], style: 'Wavy', underlineThickness: 2.0 });\n * engine.block.setTextDecoration(text, { lines: ['None'] }); // Remove decorations\n * ```\n *\n * @category Block Text\n * @param id - The text block whose text decoration should be changed.\n * @param config - The decoration configuration to apply.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextDecoration(id: DesignBlockId, config: TextDecorationConfig, from?: number, to?: number): void;\n /**\n * Sets kerning for a grapheme range.\n *\n * Applies an additional offset in em units on top of the font's built-in kern.\n * `1.0` equals the run's font size, so the offset scales proportionally with text size.\n *\n * ```javascript\n * engine.block.setTextKerning(text, 0.1); // add 10% of font size as extra spacing\n * engine.block.setTextKerning(text, -0.05, 0, 5); // tighten first 5 graphemes\n * engine.block.setTextKerning(text, 0); // reset to no extra offset\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param kerning - Additional kerning in em units (1.0 = one full em). Use 0 for no extra offset.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTextKerning(id: DesignBlockId, kerning: number, from?: number, to?: number): void;\n /**\n * Returns the unique kerning values across the grapheme range.\n *\n * ```javascript\n * const kernings = engine.block.getTextKernings(text); // e.g. [0] or [0.1, 0]\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n getTextKernings(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Toggles the underline decoration for a text range.\n *\n * If any part of the range does not have underline, the entire range gets underline.\n * If the entire range already has underline, it is removed.\n * Other decoration lines (strikethrough, overline) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationUnderline(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationUnderline(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the strikethrough decoration for a text range.\n *\n * If any part of the range does not have strikethrough, the entire range gets strikethrough.\n * If the entire range already has strikethrough, it is removed.\n * Other decoration lines (underline, overline) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationStrikethrough(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationStrikethrough(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the overline decoration for a text range.\n *\n * If any part of the range does not have overline, the entire range gets overline.\n * If the entire range already has overline, it is removed.\n * Other decoration lines (underline, strikethrough) on each text run are preserved.\n *\n * ```javascript\n * engine.block.toggleTextDecorationOverline(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleTextDecorationOverline(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Gets the paragraph-level horizontal alignment override for a specific paragraph,\n * or the block-level alignment.\n *\n * ```javascript\n * const alignment = engine.block.getTextHorizontalAlignment(text, 0);\n * const blockAlignment = engine.block.getTextHorizontalAlignment(text); // paragraphIndex defaults to -1\n * // e.g. 'Left' | 'Center' | 'Right' | 'Auto' | undefined\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param paragraphIndex - The 0-based index of the paragraph to query.\n * Negative values return the block-level `text/horizontalAlignment` setting.\n * @returns The paragraph override, `undefined` if no override is set,\n * or the block-level alignment when `paragraphIndex < 0`.\n */\n getTextHorizontalAlignment(id: DesignBlockId, paragraphIndex?: number): TextHorizontalAlignment | undefined;\n /**\n * Sets the paragraph-level horizontal alignment override for one or all paragraphs.\n *\n * ```javascript\n * engine.block.setTextHorizontalAlignment(text, 'Center', 0);\n * engine.block.setTextHorizontalAlignment(text, undefined, 0); // clear override\n * engine.block.setTextHorizontalAlignment(text, 'Right'); // apply to all\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param alignment - The alignment to apply, or `undefined` to clear the paragraph override.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * Negative values clear all paragraph-level alignment overrides and, when `alignment` is provided,\n * apply that alignment to the whole text block.\n */\n setTextHorizontalAlignment(id: DesignBlockId, alignment: TextHorizontalAlignment | undefined, paragraphIndex?: number): void;\n /**\n * Gets the list style for a specific paragraph of a text block.\n *\n * ```javascript\n * const listStyle = engine.block.getTextListStyle(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list style should be returned.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The list style of the paragraph.\n */\n getTextListStyle(id: DesignBlockId, paragraphIndex: number): ListStyle;\n /**\n * Sets the list style for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextListStyle(text, 'Unordered');\n * engine.block.setTextListStyle(text, 'Ordered', 0, 2);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list style should be changed.\n * @param listStyle - The list style to apply.\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n * @param listLevel - Optional list nesting level to set atomically with the list style (0 = outermost).\n * When omitted the existing list level of each paragraph is preserved.\n * Has no visual effect when listStyle is 'None'.\n */\n setTextListStyle(id: DesignBlockId, listStyle: ListStyle, paragraphIndex?: number, listLevel?: number): void;\n /**\n * Gets the list nesting level for a specific paragraph of a text block.\n *\n * ```javascript\n * const listLevel = engine.block.getTextListLevel(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list level should be returned.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The list nesting level of the paragraph.\n */\n getTextListLevel(id: DesignBlockId, paragraphIndex: number): number;\n /**\n * Sets the list nesting level for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextListLevel(text, 1);\n * engine.block.setTextListLevel(text, 2, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose list level should be changed.\n * @param listLevel - The list nesting level (0 = outermost).\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n */\n setTextListLevel(id: DesignBlockId, listLevel: number, paragraphIndex?: number): void;\n /**\n * Returns the 0-based paragraph indices that overlap the given UTF-16 range.\n *\n * The range is half-open (exclusive): `from` is inclusive, `to` is exclusive (one past the last\n * code unit of interest). When `from === to` the range is a cursor position and the paragraph\n * containing `from` is returned. This convention matches `getTextCursorRange`, so the values\n * it returns can be passed directly without adjustment.\n *\n * Negative values for either parameter cause all paragraph indices to be returned.\n *\n * ```javascript\n * const indices = engine.block.getTextParagraphIndices(text);\n * const { from, to } = engine.block.getTextCursorRange();\n * const indices = engine.block.getTextParagraphIndices(text, from, to);\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - The inclusive start UTF-16 index. Negative values reference the entire text.\n * @param to - The exclusive end UTF-16 index. Negative values reference the entire text.\n * @returns The paragraph indices overlapping the range.\n */\n getTextParagraphIndices(id: DesignBlockId, from?: number, to?: number): number[];\n /**\n * Sets the line height multiplier for a specific paragraph or all paragraphs of a text block.\n *\n * ```javascript\n * engine.block.setTextLineHeight(text, 1.5);\n * engine.block.setTextLineHeight(text, 1.5, 0);\n * engine.block.setTextLineHeight(text, null); // reset all paragraphs to block default\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param lineHeight - The line height multiplier, or `null` to reset to the block-level default.\n * @param paragraphIndex - The 0-based index of the paragraph to modify. Negative values apply to all paragraphs.\n */\n setTextLineHeight(id: DesignBlockId, lineHeight: number | null, paragraphIndex?: number): void;\n /**\n * Returns the line height multiplier for a specific paragraph of a text block.\n *\n * Returns the per-paragraph override if one is set, otherwise returns the block-level `lineHeight`.\n *\n * ```javascript\n * const lineHeight = engine.block.getTextLineHeight(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param paragraphIndex - The 0-based index of the paragraph.\n * @returns The line height multiplier for the paragraph.\n */\n getTextLineHeight(id: DesignBlockId, paragraphIndex: number): number;\n /**\n * Checks if the bold font weight can be toggled for a range of text.\n *\n * Returns true if any part of the range is not bold and the bold font is available.\n *\n * ```javascript\n * const canToggleBold = engine.block.canToggleBoldFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to check.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns Whether the font weight can be toggled.\n */\n canToggleBoldFont(id: DesignBlockId, from?: number, to?: number): boolean;\n /**\n * Checks if the italic font style can be toggled for a range of text.\n *\n * Returns true if any part of the range is not italic and the italic font is available.\n *\n * ```javascript\n * const canToggleItalic = engine.block.canToggleItalicFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to check.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns Whether the font style can be toggled.\n */\n canToggleItalicFont(id: DesignBlockId, from?: number, to?: number): boolean;\n /**\n * Toggles the font weight of a text range between bold and normal.\n *\n * If any part of the range is not bold, the entire range becomes bold. If the entire range is already bold, it becomes normal.\n *\n *\n * ```javascript\n * engine.block.toggleBoldFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleBoldFont(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Toggles the font style of a text range between italic and normal.\n *\n * If any part of the range is not italic, the entire range becomes italic. If the entire range is already italic, it becomes normal.\n *\n *\n * ```javascript\n * engine.block.toggleItalicFont(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n toggleItalicFont(id: DesignBlockId, from?: number, to?: number): void;\n /**\n * Sets the font and typeface for an entire text block.\n *\n * Existing formatting is reset.\n *\n * ```javascript\n * engine.block.setFont(text, font.uri, typeface);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font should be changed.\n * @param fontFileUri - The URI of the new font file.\n * @param typeface - The typeface of the new font.\n */\n setFont(id: DesignBlockId, fontFileUri: string, typeface: Typeface): void;\n /**\n * Sets the typeface for a range of text.\n *\n * The current formatting is retained as much as possible.\n *\n *\n * ```javascript\n * engine.block.setTypeface(text, typeface, 2, 5);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose font should be changed.\n * @param typeface - The new typeface.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n */\n setTypeface(id: DesignBlockId, typeface: Typeface, from?: number, to?: number): void;\n /**\n * Gets the base typeface of a text block.\n *\n * This does not return the typefaces of individual text runs.\n *\n * ```javascript\n * const defaultTypeface = engine.block.getTypeface(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose typeface should be queried.\n * @returns the typeface property of the text block.\n */\n getTypeface(id: DesignBlockId): Typeface;\n /**\n * Gets the unique typefaces within a range of text.\n *\n * ```javascript\n * const currentTypefaces = engine.block.getTypefaces(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose typefaces should be queried.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The unique typefaces in the range.\n */\n getTypefaces(id: DesignBlockId, from?: number, to?: number): Typeface[];\n /**\n * Gets all text runs within a range of text.\n *\n * Each run represents a contiguous span of text with uniform formatting.\n *\n * ```javascript\n * const runs = engine.block.getTextRuns(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - The start index of the UTF-16 range. Defaults to the start of the current selection or text.\n * @param to - The end index of the UTF-16 range. Defaults to the end of the current selection or text.\n * @returns The ordered list of text runs covering the requested range.\n */\n getTextRuns(id: DesignBlockId, from?: number, to?: number): TextRunInfo[];\n /**\n * Gets the current text cursor or selection range.\n *\n * Returns the UTF-16 indices of the selected range of the text block that is currently being\n * edited. The range is half-open (exclusive): `from` is the index of the first selected code\n * unit, `to` is one past the last selected code unit. When `from === to` the cursor is\n * positioned between characters with no text selected.\n *\n * ```javascript\n * const selectedRange = engine.block.getTextCursorRange();\n * ```\n *\n * @category Block Text\n * @returns The selected UTF-16 range or `{ from: -1, to: -1 }` if no text block is being edited.\n */\n getTextCursorRange(): Range_2;\n /**\n * Sets the text cursor range (selection) within the text block that is currently being edited.\n *\n * @category Block Text\n * @param range - The UTF-16 range to set as the selection. If `from` equals `to`, the cursor is positioned at that index. If `from` and `to` are set to -1, the whole text is selected.\n * @throws Error if no text block is currently being edited or if the range is invalid.\n */\n setTextCursorRange(range: Range_2): void;\n /**\n * Gets the number of visible lines in a text block.\n *\n * ```javascript\n * const lineCount = engine.block.getTextVisibleLineCount(text);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose line count should be returned.\n * @returns The number of lines in the text block.\n */\n getTextVisibleLineCount(id: DesignBlockId): number;\n /**\n * Gets the global bounding box of a visible line of text.\n *\n * The values are in the scene's global coordinate space.\n *\n * ```javascript\n * const lineBoundingBox = engine.block.getTextVisibleLineGlobalBoundingBoxXYWH(text, 0);\n * ```\n *\n * @category Block Text\n * @param id - The text block whose line bounding box should be returned.\n * @param lineIndex - The index of the line whose bounding box should be returned.\n * @returns The bounding box of the line.\n */\n getTextVisibleLineGlobalBoundingBoxXYWH(id: DesignBlockId, lineIndex: number): XYWH;\n /**\n * Gets the text content of a visible line.\n *\n * @category Block Text\n * @param id - The text block whose line content should be returned.\n * @param lineIndex - The index of the line whose content should be returned.\n * @returns The text content of the line.\n */\n getTextVisibleLineContent(id: DesignBlockId, lineIndex: number): string;\n /**\n * Returns the tight ink-paint bounding box for each grapheme in the range.\n * One entry per grapheme in [from, to). Non-printable graphemes get a zero-rect.\n * Coordinates are in global scene space.\n *\n * @category Block Text\n * @param id - The text block to query.\n * @param from - Start grapheme index (-1 = start of cursor selection or 0).\n * @param to - End grapheme index (-1 = end of cursor selection or text length).\n * @returns Array of CharacterInkBox, one per grapheme in range, in text order.\n */\n getTextCharacterInkBoxes(id: DesignBlockId, from?: number, to?: number): CharacterInkBox[];\n /**\n * Gets the effective horizontal alignment of a text block.\n * If the alignment is set to Auto, this returns the resolved alignment (Left or Right)\n * based on the text direction of the first logical run. This never returns 'Auto'.\n *\n * @category Block Text\n * @param id - The text block whose effective alignment should be returned.\n * @returns The effective alignment ('Left', 'Right', or 'Center').\n */\n getTextEffectiveHorizontalAlignment(id: DesignBlockId): 'Left' | 'Right' | 'Center';\n /**\n * Sets the SVG path that the text baseline follows.\n * Pass `null` to restore normal straight-line text layout.\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param svgPath - An SVG path string in the block's local coordinate space, or `null` to clear.\n */\n setTextOnPath(id: DesignBlockId, svgPath: string | null): void;\n /**\n * Gets the SVG path currently used as the text baseline.\n *\n * @category Block Text\n * @param id - The text block to query.\n * @returns The SVG path string, or `null` if no path is set.\n */\n getTextOnPath(id: DesignBlockId): string | null;\n /**\n * Sets the start offset along the baseline path as a proportion of the path length.\n * Values are clamped to `[-1, 1]`; `1` and `-1` wrap back to the path start.\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param offset - The proportional offset. Positive values move the text forward along the path.\n */\n setTextOnPathOffset(id: DesignBlockId, offset: number): void;\n /**\n * Gets the start offset along the baseline path as a proportion of the path length.\n *\n * @category Block Text\n * @param id - The text block to query.\n * @returns The proportional offset in `[-1, 1]`.\n */\n getTextOnPathOffset(id: DesignBlockId): number;\n /**\n * Sets whether text is placed on the opposite side of the baseline path.\n *\n * @category Block Text\n * @param id - The text block to modify.\n * @param flipped - When `true`, text sits on the underside of the curve and reads in the reverse direction.\n */\n setTextOnPathFlipped(id: DesignBlockId, flipped: boolean): void;\n /**\n * Gets whether the text-on-path rendering is flipped.\n *\n * @category Block Text\n * @param id - The text block to query.\n * @returns `true` when text is on the underside of the curve.\n */\n getTextOnPathFlipped(id: DesignBlockId): boolean;\n /**\n * Checks if a block has fill properties.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block has fill properties.\n * @deprecated Use supportsFill instead.\n */\n hasFill(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a fill.\n *\n * @category Block Fills\n * @param id - The block to query.\n * @returns true, if the block supports a fill.\n */\n supportsFill(id: DesignBlockId): boolean;\n /**\n * Checks if the fill of a block is enabled.\n *\n * ```javascript\n * engine.block.isFillEnabled(block);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill state should be queried.\n * @returns The fill state.\n */\n isFillEnabled(id: DesignBlockId): boolean;\n /**\n * Enables or disables the fill of a block.\n *\n * ```javascript\n * engine.block.setFillEnabled(block, false);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill should be enabled or disabled.\n * @param enabled - If true, the fill will be enabled.\n */\n setFillEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Queries whether the fill of a block is marked as overprint for PDF export.\n *\n * ```javascript\n * const overprint = engine.block.getFillOverprint(block);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill overprint flag should be queried.\n * @returns The fill overprint flag.\n */\n getFillOverprint(id: DesignBlockId): boolean;\n /**\n * Marks the fill of a block as overprint for PDF export.\n *\n * The flag is only honored by the PDF writer when the fill uses a spot color\n * (Separation/DeviceN). For process-color fills it is a silent no-op. On-screen\n * rendering ignores the flag.\n *\n * ```javascript\n * engine.block.setFillOverprint(block, true);\n * ```\n *\n * @category Block Fills\n * @param id - The block whose fill overprint flag should be set.\n * @param overprint - If true, the fill is marked as overprint in exported PDFs.\n */\n setFillOverprint(id: DesignBlockId, overprint: boolean): void;\n /**\n * Gets the fill block attached to a given block.\n *\n * @category Block Fills\n * @param id - The block whose fill block should be returned.\n * @returns The block that currently defines the given block's fill.\n */\n getFill(id: DesignBlockId): DesignBlockId;\n /**\n * Sets the fill block for a given block.\n *\n * The previous fill block is not destroyed automatically.\n *\n * @category Block Fills\n * @param id - The block whose fill should be changed.\n * @param fill - The new fill block.\n */\n setFill(id: DesignBlockId, fill: DesignBlockId): void;\n /**\n * Sets the solid fill color of a block.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be set.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1. Defaults to 1.\n */\n setFillSolidColor(id: DesignBlockId, r: number, g: number, b: number, a?: number): void;\n /**\n * Gets the solid fill color of a block as RGBA values.\n *\n * @category Block Fills\n * @param id - The block whose fill color should be queried.\n * @returns The fill color.\n */\n getFillSolidColor(id: DesignBlockId): RGBA;\n /**\n * Enables or disables the placeholder function for a block.\n *\n * When set to `true`, the given block becomes selectable by users and its placeholder capabilities are enabled in Adopter mode.\n *\n * ```javascript\n * engine.block.setPlaceholderEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder function should be enabled or disabled.\n * @param enabled - Whether the function should be enabled or disabled.\n */\n setPlaceholderEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder function for a block is enabled and can be selected by users in Adopter mode.\n *\n * ```javascript\n * const placeholderIsEnabled = engine.block.isPlaceholderEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder function state should be queried.\n * @returns The enabled state of the placeholder function.\n */\n isPlaceholderEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder behavior.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder behavior.\n * @deprecated Use supportsPlaceholderBehavior instead.\n */\n hasPlaceholderBehavior(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder behavior.\n *\n * ```javascript\n * const placeholderBehaviorSupported = engine.block.supportsPlaceholderBehavior(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder behavior.\n */\n supportsPlaceholderBehavior(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder behavior for a block.\n *\n * When its fill block is set to `true`, an image block will act as a placeholder, showing a control overlay and a replacement button.\n *\n * ```javascript\n * engine.block.setPlaceholderBehaviorEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder behavior should be enabled or disabled.\n * @param enabled - Whether the placeholder behavior should be enabled or disabled.\n */\n setPlaceholderBehaviorEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder behavior for a block is enabled.\n *\n * ```javascript\n * engine.block.setPlaceholderBehaviorEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder behavior state should be queried.\n * @returns The enabled state of the placeholder behavior.\n */\n isPlaceholderBehaviorEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder controls.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder controls.\n * @deprecated Use supportsPlaceholderControls instead.\n */\n hasPlaceholderControls(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports placeholder controls, e.g. a control overlay and a replacement button.\n *\n * @category Block Placeholder\n * @param id - The block to query.\n * @returns True, if the block supports placeholder controls.\n */\n supportsPlaceholderControls(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder overlay pattern.\n *\n * ```javascript\n * engine.block.setPlaceholderControlsOverlayEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder overlay should be enabled or disabled.\n * @param enabled - Whether the placeholder overlay should be shown or not.\n */\n setPlaceholderControlsOverlayEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder overlay pattern is enabled.\n *\n * ```javascript\n * const overlayEnabled = engine.block.isPlaceholderControlsOverlayEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder overlay visibility state should be queried.\n * @returns The visibility state of the block's placeholder overlay pattern.\n */\n isPlaceholderControlsOverlayEnabled(id: DesignBlockId): boolean;\n /**\n * Enables or disables the placeholder button.\n *\n * ```javascript\n * engine.block.setPlaceholderControlsButtonEnabled(block, true);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder button should be shown or not.\n * @param enabled - Whether the placeholder button should be shown or not.\n */\n setPlaceholderControlsButtonEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if the placeholder button is enabled.\n *\n * ```javascript\n * const buttonEnabled = engine.block.isPlaceholderControlsButtonEnabled(block);\n * ```\n *\n * @category Block Placeholder\n * @param id - The block whose placeholder button visibility state should be queried.\n * @returns The visibility state of the block's placeholder button.\n */\n isPlaceholderControlsButtonEnabled(id: DesignBlockId): boolean;\n /**\n * Sets a metadata value for a given key on a block.\n *\n * If the key does not exist, it will be added.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @param value - The value to set.\n */\n setMetadata(id: DesignBlockId, key: string, value: string): void;\n /**\n * Gets a metadata value for a given key from a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @returns The value associated with the key.\n */\n getMetadata(id: DesignBlockId, key: string): string;\n /**\n * Checks if a block has metadata for a given key.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n * @returns Whether the key exists.\n */\n hasMetadata(id: DesignBlockId, key: string): boolean;\n /**\n * Finds all metadata keys on a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @returns A list of all metadata keys on this block.\n */\n findAllMetadata(id: DesignBlockId): string[];\n /**\n * Removes metadata for a given key from a block.\n *\n * @category Block Metadata\n * @param id - The block whose metadata will be accessed.\n * @param key - The key used to identify the desired piece of metadata.\n */\n removeMetadata(id: DesignBlockId, key: string): void;\n /**\n * Enables or disables a scope for a block.\n *\n * ```javascript\n * // Allow the user to move the image block.\n * engine.block.setScopeEnabled(image, 'layer/move', true);\n * ```\n *\n * @category Block Scopes\n * @param id - The block whose scope should be enabled or disabled.\n * @param key - The scope to enable or disable.\n * @param enabled - Whether the scope should be enabled or disabled.\n */\n setScopeEnabled(id: DesignBlockId, key: Scope, enabled: boolean): void;\n /**\n * Checks if a scope is enabled for a block.\n *\n * ```javascript\n * engine.block.isScopeEnabled(image, 'layer/move');\n * ```\n *\n * @category Block Scopes\n * @param id - The block whose scope state should be queried.\n * @param key - The scope to query.\n * @returns The enabled state of the scope for the given block.\n */\n isScopeEnabled(id: DesignBlockId, key: Scope): boolean;\n /**\n * Checks if an operation is allowed by a block's scopes.\n *\n * ```javascript\n * // This will return true when the global scope is set to 'Defer'.\n * engine.block.isAllowedByScope(image, 'layer/move');\n * ```\n *\n * @category Block Scopes\n * @param id - The block to check.\n * @param key - The scope to check.\n * @returns Whether the scope is allowed for the given block.\n */\n isAllowedByScope(id: DesignBlockId, key: Scope): boolean;\n /**\n * Checks if a block has a duration property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true if the block has a duration property.\n * @deprecated Use supportsDuration instead.\n */\n hasDuration(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a duration property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true if the block supports a duration property.\n */\n supportsDuration(id: DesignBlockId): boolean;\n /**\n * Sets the playback duration of a block.\n *\n * The duration defines how long the block is active in the scene during playback.\n *\n * @category Block Video\n * @param id - The block whose duration should be changed.\n * @param duration - The new duration in seconds.\n */\n setDuration(id: DesignBlockId, duration: number): void;\n /**\n * Gets the playback duration of a block.\n *\n * @category Block Video\n * @param id - The block whose duration should be returned.\n * @returns The block's duration in seconds.\n */\n getDuration(id: DesignBlockId): number;\n /**\n * Sets a block as the page's duration source.\n *\n * This causes the page's total duration to be automatically determined by this block.\n *\n * @category Block Video\n * @param page - The page block for which it should be enabled.\n * @param id - The block that should become the duration source.\n */\n setPageDurationSource(page: DesignBlockId, id: DesignBlockId): void;\n /**\n * Checks if a block is the duration source for its page.\n *\n * @category Block Video\n * @param id - The block whose duration source property should be queried.\n * @returns true if the block is a duration source for a page.\n */\n isPageDurationSource(id: DesignBlockId): boolean;\n /**\n * Checks if a block can be set as the page's duration source.\n *\n * @category Block Video\n * @param page - The page to check against.\n * @param id - The block to query.\n * @returns true, if the block can be marked as the page's duration source.\n */\n supportsPageDurationSource(page: DesignBlockId, id: DesignBlockId): boolean;\n /**\n * Removes a block as the page's duration source.\n *\n * If a scene or page is given, it is deactivated for all blocks within it.\n *\n * @category Block Video\n * @param id - The block whose duration source property should be removed.\n */\n removePageDurationSource(id: DesignBlockId): void;\n /**\n * Checks if a block has a time offset property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block has a time offset property.\n * @deprecated Use supportsTimeOffset instead.\n */\n hasTimeOffset(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a time offset.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block supports a time offset.\n */\n supportsTimeOffset(id: DesignBlockId): boolean;\n /**\n * Sets the time offset of a block relative to its parent.\n *\n * The time offset controls when the block first becomes active in the timeline.\n *\n * @category Block Video\n * @param id - The block whose time offset should be changed.\n * @param offset - The new time offset in seconds.\n */\n setTimeOffset(id: DesignBlockId, offset: number): void;\n /**\n * Gets the time offset of a block relative to its parent.\n *\n * @category Block Video\n * @param id - The block whose time offset should be queried.\n * @returns The time offset of the block in seconds.\n */\n getTimeOffset(id: DesignBlockId): number;\n /**\n * Checks if a block has trim properties.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block has trim properties.\n * @deprecated Use supportsTrim instead.\n */\n hasTrim(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports trim properties.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns true, if the block supports trim properties.\n */\n supportsTrim(id: DesignBlockId): boolean;\n /**\n * Sets the trim offset of a block's media content.\n *\n * This sets the time within the media clip where playback should begin.\n *\n * @category Block Video\n * @param id - The block whose trim should be updated.\n * @param offset - The new trim offset, measured in timeline seconds (scaled by playback rate).\n */\n setTrimOffset(id: DesignBlockId, offset: number): void;\n /**\n * Gets the trim offset of a block's media content.\n *\n * @category Block Video\n * @param id - The block whose trim offset should be queried.\n * @returns the trim offset in seconds.\n */\n getTrimOffset(id: DesignBlockId): number;\n /**\n * Sets the trim length of a block's media content.\n *\n * This is the duration of the media clip that should be used for playback.\n *\n * @category Block Video\n * @param id - The object whose trim length should be updated.\n * @param length - The new trim length in seconds.\n */\n setTrimLength(id: DesignBlockId, length: number): void;\n /**\n * Gets the trim length of a block's media content.\n *\n * @category Block Video\n * @param id - The object whose trim length should be queried.\n * @returns The trim length of the object in seconds.\n */\n getTrimLength(id: DesignBlockId): number;\n /**\n * Splits a block at the specified time.\n *\n * The original block will be trimmed to end at the split time, and the returned duplicate\n * will start at the split time and continue to the original end time.\n *\n * ```javascript\n * const duplicate = engine.block.split(video, 10.0);\n * ```\n *\n * @category Block\n * @param id - The block to split.\n * @param atTime - The time (in seconds) relative to the block's time offset where the split should occur.\n * @param options - The options for configuring the split operation.\n * @returns The newly created second half of the split block.\n */\n split(id: DesignBlockId, atTime: number, options?: SplitOptions): DesignBlockId;\n /**\n * Gets the total duration of a scene in video mode.\n *\n * @category Block Video\n * @param scene - The scene whose duration is being queried.\n * @returns the total scene duration.\n * @deprecated Use `getDuration` and pass a page block.\n */\n getTotalSceneDuration(scene: DesignBlockId): number;\n /**\n * Sets whether a block should play its content during active playback.\n *\n * @category Block Video\n * @param id - The block that should be updated.\n * @param enabled - Whether the block should be playing its contents.\n */\n setPlaying(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if a block is playing its content.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block is playing during playback.\n */\n isPlaying(id: DesignBlockId): boolean;\n /**\n * Checks if a block has a playback time property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block has a playback time property.\n * @deprecated Use supportsPlaybackTime instead.\n */\n hasPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports a playback time property.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns whether the block supports a playback time property.\n */\n supportsPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Sets the current playback time of a block's content.\n *\n * @category Block Video\n * @param id - The block whose playback time should be updated.\n * @param time - The new playback time of the block in seconds.\n */\n setPlaybackTime(id: DesignBlockId, time: number): void;\n /**\n * Gets the current playback time of a block's content.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The playback time of the block in seconds.\n */\n getPlaybackTime(id: DesignBlockId): number;\n /**\n * Checks if a block is visible at the current scene playback time.\n *\n * @category Block State\n * @param id - The block to query.\n * @returns Whether the block should be visible on the canvas at the current playback time.\n */\n isVisibleAtCurrentPlaybackTime(id: DesignBlockId): boolean;\n /**\n * Enables or disables solo playback for a block.\n *\n * When enabled, only this block's content will play while the rest of the scene remains paused.\n *\n * ```javascript\n * engine.block.setSoloPlaybackEnabled(videoFill, true);\n * ```\n *\n * @category Block Video\n * @param id - The block or fill to update.\n * @param enabled - Whether solo playback should be enabled.\n */\n setSoloPlaybackEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Checks if solo playback is enabled for a block.\n *\n * ```javascript\n * engine.block.isSoloPlaybackEnabled(videoFill);\n * ```\n *\n * @category Block Video\n * @param id - The block or fill to query.\n * @returns Whether solo playback is enabled for this block.\n */\n isSoloPlaybackEnabled(id: DesignBlockId): boolean;\n /**\n * Checks if a block has playback controls.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block has playback control.\n * @deprecated Use supportsPlaybackControl instead\n */\n hasPlaybackControl(id: DesignBlockId): boolean;\n /**\n * Checks if a block supports playback controls.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block supports playback control.\n */\n supportsPlaybackControl(id: DesignBlockId): boolean;\n /**\n * Sets whether a block's media content should loop.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param looping - Whether the block should loop to the beginning or stop.\n */\n setLooping(id: DesignBlockId, looping: boolean): void;\n /**\n * Checks if a block's media content is set to loop.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is looping.\n */\n isLooping(id: DesignBlockId): boolean;\n /**\n * Sets whether the audio of a block is muted.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param muted - Whether the audio should be muted.\n */\n setMuted(id: DesignBlockId, muted: boolean): void;\n /**\n * Checks if a block's audio is muted due to engine rules.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is force muted.\n */\n isForceMuted(id: DesignBlockId): boolean;\n /**\n * Checks if a block's audio is muted.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns Whether the block is muted.\n */\n isMuted(id: DesignBlockId): boolean;\n /**\n * Sets the audio volume of a block.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param volume - The desired volume, ranging from 0.0 to 1.0.\n */\n setVolume(id: DesignBlockId, volume: number): void;\n /**\n * Gets the audio volume of a block.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The volume, ranging from 0.0 to 1.0.\n */\n getVolume(id: DesignBlockId): number;\n /**\n * Sets the playback speed multiplier of a block that supports playback control.\n * Note: This also adjusts the trim and duration of the block.\n * Video fills running faster than 3.0x are force muted until reduced to 3.0x or below.\n *\n * @category Block Video\n * @param id - The block or video fill to update.\n * @param speed - The desired playback speed multiplier. Valid range is [0.25, 3.0] for audio blocks and\n * [0.25, infinity) for video fills.\n */\n setPlaybackSpeed(id: DesignBlockId, speed: number): void;\n /**\n * Gets the playback speed multiplier of a block that supports playback control.\n *\n * @category Block Video\n * @param id - The block to query.\n * @returns The playback speed multiplier.\n */\n getPlaybackSpeed(id: DesignBlockId): number;\n /**\n * Forces the loading of a block's audio/video resource.\n *\n * If the resource failed to load previously, it will be reloaded.\n *\n * @category Block Video\n * @param id - The video fill or audio block whose resource should be loaded.\n * @returns A Promise that resolves once the resource has finished loading.\n */\n forceLoadAVResource(id: DesignBlockId): Promise<void>;\n /**\n * Checks if a block's audio/video resource is loaded.\n *\n * @category Block Video\n * @param id - The video fill or audio block.\n * @returns The loading state of the resource.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isAVResourceLoaded(id: DesignBlockId): boolean;\n /**\n * Gets the total duration of a block's audio/video resource.\n *\n * @category Block Video\n * @param id - The video fill or audio block.\n * @returns The video or audio file duration in seconds.\n */\n getAVResourceTotalDuration(id: DesignBlockId): number;\n /**\n * Gets the width of a block's video resource.\n *\n * @category Block Video\n * @param id - The video fill block.\n * @returns The video width in pixels.\n */\n getVideoWidth(id: DesignBlockId): number;\n /**\n * Gets the height of a block's video resource.\n *\n * @category Block Video\n * @param id - The video fill block.\n * @returns The video height in pixels.\n */\n getVideoHeight(id: DesignBlockId): number;\n /**\n * Generate a sequence of thumbnails for the given video fill or design block.\n *\n * Note: There can only be one thumbnail generation request in progress for a given block.\n * Note: During playback, the thumbnail generation will be paused.\n * @category Block Video\n * @param id - The video fill or design block.\n * @param thumbnailHeight - The height of each thumbnail.\n * @param timeBegin - The start time in seconds for the thumbnail sequence.\n * @param timeEnd - The end time in seconds for the thumbnail sequence.\n * @param numberOfFrames - The number of frames to generate.\n * @param onFrame - A callback that receives the frame index and image data.\n * @returns A function to cancel the thumbnail generation request.\n */\n generateVideoThumbnailSequence(id: DesignBlockId, thumbnailHeight: number, timeBegin: number, timeEnd: number, numberOfFrames: number, onFrame: (frameIndex: number, result: ImageData | Error) => void): () => void;\n /**\n * Generate a thumbnail sequence for the given audio block or video fill.\n *\n * A thumbnail in this case is a chunk of samples in the range of 0 to 1.\n * In case stereo data is requested, the samples are interleaved, starting with the left channel.\n * Note: During playback, the thumbnail generation will be paused.\n *\n * @category Block Video\n * @param id - The audio block or video fill.\n * @param samplesPerChunk - The number of samples per chunk.\n * @param timeBegin - The start time in seconds for the thumbnail sequence.\n * @param timeEnd - The end time in seconds for the thumbnail sequence.\n * @param numberOfSamples - The total number of samples to generate.\n * @param numberOfChannels - The number of channels in the output (1 for mono, 2 for stereo).\n * @param onChunk - A callback that receives the chunk index and sample data.\n * @returns A function to cancel the thumbnail generation request.\n */\n generateAudioThumbnailSequence(id: DesignBlockId, samplesPerChunk: number, timeBegin: number, timeEnd: number, numberOfSamples: number, numberOfChannels: number, onChunk: (chunkIndex: number, result: Float32Array | Error) => void): () => void;\n /**\n * Generates a thumbnail for a video fill.\n *\n * @category Block Video\n * @param id - The video fill.\n * @param thumbnailHeight - The height of a thumbnail. The width will be calculated from the video aspect ratio.\n * @returns A promise that resolves with a thumbnail encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getVideoFillThumbnail(id: DesignBlockId, thumbnailHeight: number): Promise<Blob>;\n /**\n * Generates a thumbnail atlas for a video fill.\n *\n * @category Block Video\n * @param id - The video fill.\n * @param numberOfColumns - The number of columns in the atlas.\n * @param numberOfRows - The number of rows in the atlas.\n * @param thumbnailHeight - The height of a single thumbnail.\n * @returns A promise that resolves with a thumbnail atlas encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getVideoFillThumbnailAtlas(id: DesignBlockId, numberOfColumns: number, numberOfRows: number, thumbnailHeight: number): Promise<Blob>;\n /**\n * Generates a thumbnail atlas for a page.\n *\n * @category Block Video\n * @param id - The page.\n * @param numberOfColumns - The number of columns in the atlas.\n * @param numberOfRows - The number of rows in the atlas.\n * @param thumbnailHeight - The height of a single thumbnail.\n * @returns A promise that resolves with a thumbnail atlas encoded as a JPEG blob.\n * @deprecated Use `generateVideoThumbnailSequence` instead.\n */\n getPageThumbnailAtlas(id: DesignBlockId, numberOfColumns: number, numberOfRows: number, thumbnailHeight: number): Promise<Blob>;\n /**\n * Creates a new animation block.\n *\n * @category Block Animations\n * @param type - The type of animation to create.\n * @returns The handle of the new animation instance.\n */\n createAnimation(type: AnimationType): DesignBlockId;\n /**\n * Checks if a block supports animation.\n *\n * @category Block Animations\n * @param id - The block to query.\n * @returns Whether the block supports animation.\n */\n supportsAnimation(id: DesignBlockId): boolean;\n /**\n * Sets the \"in\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"in\" animation should be set.\n * @param animation - The animation to set.\n */\n setInAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Sets the \"loop\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"loop\" animation should be set.\n * @param animation - The animation to set.\n */\n setLoopAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Sets the \"out\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"out\" animation should be set.\n * @param animation - The animation to set.\n */\n setOutAnimation(id: DesignBlockId, animation: DesignBlockId): void;\n /**\n * Gets the \"in\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"in\" animation should be queried.\n * @returns The \"in\" animation of the block.\n */\n getInAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Gets the \"loop\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"loop\" animation should be queried.\n * @returns The \"loop\" animation of the block.\n */\n getLoopAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Gets the \"out\" animation of a block.\n *\n * @category Block Animations\n * @param id - The block whose \"out\" animation should be queried.\n * @returns The \"out\" animation of the block.\n */\n getOutAnimation(id: DesignBlockId): DesignBlockId;\n /**\n * Updates a pixel stream fill block with a new pixel buffer.\n *\n * @category Block Video\n * @param id - The pixel stream fill block.\n * @param buffer - A canvas or video element to use as the pixel source.\n */\n setNativePixelBuffer(id: number, buffer: HTMLCanvasElement | HTMLVideoElement): void;\n /**\n * Gets the current state of a block.\n *\n * A block's state is determined by its own state and that of its shape, fill, and effects.\n *\n * ```javascript\n * const state = engine.block.getState(block);\n * ```\n *\n * @category Block State\n * @param id - The block to query.\n * @returns The block's state: 'Ready', 'Pending', or 'Error'.\n */\n getState(id: DesignBlockId): BlockState;\n /**\n * Sets the state of a block.\n *\n * ```javascript\n * engine.block.setState(video, {type: 'Pending', progress: 0.5});\n * engine.block.setState(page, {type: 'Ready'});\n * engine.block.setState(image, {type: 'Error', error: 'ImageDecoding'});\n * ```\n *\n * @category Block State\n * @param id - The block whose state should be set.\n * @param state - The new state to set.\n */\n setState(id: DesignBlockId, state: BlockState): void;\n /**\n * Subscribes to state changes for a set of blocks.\n *\n * The state is determined by the block and its associated shape, fill, and effects.\n *\n * ```javascript\n * const unsubscribe = engine.block.onStateChanged([], (blocks) => {\n * blocks.forEach(block => console.log(block));\n * });\n * ```\n *\n * @category Block Events\n * @param ids - A list of block IDs to monitor. If empty, all blocks are monitored.\n * @param callback - The function to call when a state changes.\n * @returns A function to unsubscribe from the event.\n */\n onStateChanged: (ids: DesignBlockId[], callback: (ids: DesignBlockId[]) => void) => (() => void);\n /**\n * Forces the loading of resources for a set of blocks and their children.\n *\n * This is useful for preloading resources. If a resource failed to load previously, it will be reloaded.\n *\n * Pass an empty array to load resources for every block currently known to the engine.\n *\n * @category Block Lifecycle\n * @param ids - The blocks whose resources should be loaded. Pass an empty array to load resources for every\n * block currently known to the engine.\n * @returns A Promise that resolves once all resources have finished loading.\n */\n forceLoadResources(ids: DesignBlockId[]): Promise<void>;\n /**\n * Adds an image to the current page. The image will be automatically loaded\n * and sized appropriately. In Video mode, timeline and animation options can be applied.\n *\n * @category Helper\n * @param url - URL or path to the image file\n * @param options - Configuration options for the image\n * @returns Promise that resolves to the ID of the created image block\n * @throws Error if no current page exists\n */\n addImage(url: string, options?: AddImageOptions): Promise<DesignBlockId>;\n /**\n * Adds a video block to the current scene page. The video will be positioned and sized\n * according to the provided parameters. Timeline and animation effects can be applied.\n *\n * @category Helper\n * @param url - URL or path to the video file\n * @param width - Width of the video in scene design units\n * @param height - Height of the video in scene design units\n * @param options - Configuration options for the video\n * @returns Promise that resolves to the ID of the created video block\n * @throws Error if no current page exists\n */\n addVideo(url: string, width: number, height: number, options?: AddVideoOptions): Promise<DesignBlockId>;\n /**\n * Applies an animation to a block.\n *\n * @category Helper\n * @param block - The ID of the block to apply the animation to\n * @param animation - The animation configuration options\n */\n applyAnimation(block: DesignBlockId, animation?: AnimationOptions): void;\n /**\n * Applies a drop shadow effect to any block.\n *\n * @category Helper\n * @param block - The ID of the block to apply the shadow to\n * @param options - Shadow configuration options. If not provided, enables shadow with default settings\n */\n applyDropShadow(block: DesignBlockId, options?: DropShadowOptions): void;\n /**\n * Generates a thumbnail image of the scene at a specific time.\n *\n * @category Helper\n * @param height - Height of the thumbnail in scene design units (maximum 512)\n * @param time - Time position in seconds to capture the thumbnail\n * @returns Promise that resolves to a Blob containing the PNG thumbnail image\n * @throws Error if no page exists or if height exceeds 512 pixels\n */\n generateThumbnailAtTimeOffset(height: number, time: number): Promise<Blob>;\n /**\n * Gets the background track of the current scene.\n * The background track is the track that determines the page duration.\n *\n * @category Helper\n * @returns The ID of the background track, or null if none exists\n */\n getBackgroundTrack(): DesignBlockId | null;\n /**\n * Moves a block to the background track.\n * This is useful for organizing content in video scenes where you want\n * certain elements to be part of the background layer.\n * The background track is the track that determines the page duration.\n * If no background track exists, one will be created automatically.\n *\n * @category Helper\n * @param block - The ID of the block to move to the background track\n */\n moveToBackgroundTrack(block: DesignBlockId): void;\n}\n\n/** @public */\nexport declare type BlockEnumType = {\n 'blend/mode': BlendMode;\n 'contentFill/horizontalAlignment': HorizontalContentFillAlignment;\n 'contentFill/mode': ContentFillMode;\n 'contentFill/verticalAlignment': VerticalContentFillAlignment;\n 'height/mode': HeightMode;\n 'position/x/mode': PositionXMode;\n 'position/y/mode': PositionYMode;\n 'scene/designUnit': SceneDesignUnit;\n 'scene/fontSizeUnit': SceneFontSizeUnit;\n 'scene/layout': SceneLayout;\n 'scene/mode': SceneMode;\n 'width/mode': WidthMode;\n 'page/guides/source': PageGuidesSource;\n 'stroke/cap': StrokeCap;\n 'stroke/cornerGeometry': StrokeCornerGeometry;\n 'stroke/dashEndCap': StrokeDashEndCap;\n 'stroke/dashStartCap': StrokeDashStartCap;\n 'stroke/endCap': StrokeEndCap;\n 'stroke/position': StrokePosition;\n 'stroke/startCap': StrokeStartCap;\n 'stroke/style': StrokeStyle;\n 'text/horizontalAlignment': TextHorizontalAlignment;\n 'text/verticalAlignment': TextVerticalAlignment;\n 'cutout/type': CutoutType;\n 'caption/horizontalAlignment': CaptionHorizontalAlignment;\n 'caption/verticalAlignment': CaptionVerticalAlignment;\n animationEasing: AnimationEasing;\n textAnimationWritingStyle: TextAnimationWritingStyle;\n 'animation/grow/direction': AnimationGrowDirection;\n 'animation/wipe/direction': AnimationWipeDirection;\n 'animation/baseline/direction': AnimationBaselineDirection;\n 'animation/spin/direction': AnimationSpinDirection;\n 'animation/spin_loop/direction': AnimationSpinLoopDirection;\n 'animation/jump_loop/direction': AnimationJumpLoopDirection;\n 'animation/typewriter_text/writingStyle': AnimationTypewriterTextWritingStyle;\n 'animation/block_swipe_text/direction': AnimationBlockSwipeTextDirection;\n 'animation/merge_text/direction': AnimationMergeTextDirection;\n 'animation/ken_burns/direction': AnimationKenBurnsDirection;\n 'fill/pixelStream/orientation': FillPixelStreamOrientation;\n 'shape/vector_path/fillRule': ShapeVectorPathFillRule;\n};\n\n/**\n * Represents an event related to a design block.\n *\n * The `BlockEvent` interface provides a set of properties that describe an event related to\n * a design block, including the block ID and the type of event.\n *\n * @public\n */\nexport declare interface BlockEvent {\n block: DesignBlockId;\n type: 'Created' | 'Updated' | 'Destroyed';\n}\n\n/**\n * Represents the state of a design block.\n *\n * The `BlockState` type is a union of the `BlockStateError`, `BlockStatePending`, and\n * `BlockStateReady` interfaces, which describe the possible states of a design block.\n *\n * @categoryDescription BlockState\n * Methods for working with the state of design blocks.\n *\n * @public\n */\nexport declare type BlockState = BlockStateError | BlockStatePending | BlockStateReady;\n\n/**\n * Represents an error state for a design block.\n *\n * The `BlockStateError` interface provides a set of properties that describe an error state\n * for a design block, including the type of error and a description of the error.\n *\n * @public\n */\nexport declare interface BlockStateError {\n type: 'Error';\n error: 'AudioDecoding' | 'ImageDecoding' | 'FileFetch' | 'Unknown' | 'VideoDecoding';\n}\n\n/**\n * Represents a pending state for a design block.\n *\n * The `BlockStatePending` interface provides a set of properties that describe a pending\n * state for a design block, including the type of state and the progress of the operation.\n *\n * @public\n */\nexport declare interface BlockStatePending {\n type: 'Pending';\n /** Expected range is [0, 1] */\n progress: number;\n}\n\n/**\n * Represents a ready state for a design block.\n *\n * The `BlockStateReady` interface provides a set of properties that describe a ready state\n * for a design block, including the type of state.\n *\n * @public\n */\nexport declare interface BlockStateReady {\n type: 'Ready';\n}\n\n/**\n * The shorthand block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * @public\n */\nexport declare const BLUR_TYPES: readonly [\"uniform\", \"linear\", \"mirrored\", \"radial\"];\n\n/**\n * The block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * Refer to {@link BlurTypeShorthand} and {@link BlurTypeLonghand} for more details.\n * @public\n */\nexport declare type BlurType = BlurTypeShorthand | BlurTypeLonghand;\n\n/**\n * The longhand block type IDs for the blur blocks. These are the IDs used to create new blurs\n * using `cesdk.engine.block.createBlur(id)`.\n * @public\n */\nexport declare type BlurTypeLonghand = `//ly.img.ubq/blur/${BlurTypeShorthand}`;\n\n/** @public */\nexport declare type BlurTypeShorthand = (typeof BLUR_TYPES)[number];\n\n/**\n * Represents the names of boolean operations.\n *\n * Defines the possible boolean operations.\n * - 'Difference': The difference between two shapes.\n * - 'Intersection': The intersection of two shapes.\n * - 'Union': The union of two shapes.\n * - 'XOR': The exclusive OR of two shapes.\n *\n * @public\n */\nexport declare type BooleanOperation = 'Difference' | 'Intersection' | 'Union' | 'XOR';\n\n/** @public */\nexport declare type BoolPropertyName = 'alwaysOnBottom' | 'alwaysOnTop' | 'clipped' | 'flip/horizontal' | 'flip/vertical' | 'highlightEnabled' | 'includedInExport' | 'placeholder/enabled' | 'playback/playing' | 'playback/soloPlaybackEnabled' | 'scene/aspectRatioLock' | 'scene/extendedPanningArea' | 'selected' | 'selectionEnabled' | 'transformLocked' | 'visible' | 'blur/enabled' | 'dropShadow/clip' | 'dropShadow/enabled' | 'fill/enabled' | 'fill/overprint' | 'page/guides/gridEnabled' | 'page/guides/gridSnapEnabled' | 'page/marginEnabled' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'playback/looping' | 'playback/muted' | 'stroke/enabled' | 'stroke/overprint' | 'backgroundColor/enabled' | 'placeholderBehavior/enabled' | 'text/automaticFontSizeEnabled' | 'text/clipLinesOutsideOfFrame' | 'text/hasClippedLines' | 'text/pathFlipped' | 'text/useContextualLigatures' | 'text/useDiscretionaryLigatures' | 'text/useKerning' | 'text/useLigatures' | 'track/automaticallyManageBlockOffsets' | 'caption/automaticFontSizeEnabled' | 'caption/clipLinesOutsideOfFrame' | 'caption/hasClippedLines' | 'caption/pathFlipped' | 'caption/useContextualLigatures' | 'caption/useDiscretionaryLigatures' | 'caption/useKerning' | 'caption/useLigatures' | 'captionTrack/automaticallyManageBlockOffsets' | 'animation/slide/fade' | 'animation/pan/fade' | 'animation/blur/fade' | 'animation/zoom/fade' | 'animation/crop_zoom/fade' | 'animation/spin/fade' | 'animation/block_swipe_text/useTextColor' | 'animation/spread_text/fade' | 'animation/ken_burns/fade' | 'effect/enabled' | (string & {});\n\n/**\n * Represents a buffer of data.\n *\n * The `Buffer` interface provides a set of properties that describe a buffer of data,\n * including a handle and the buffer itself.\n *\n * @public\n */\ndeclare interface Buffer_2 {\n handle: string;\n buffer: Uint8Array;\n}\nexport { Buffer_2 as Buffer }\n\n/** @public */\nexport declare type CameraClampingOvershootMode = (typeof CameraClampingOvershootModeValues)[number];\n\n/** @public */\nexport declare const CameraClampingOvershootModeValues: readonly [\"Center\", \"Reverse\"];\n\n/** @public */\nexport declare type CaptionHorizontalAlignment = (typeof CaptionHorizontalAlignmentValues)[number];\n\n/** @public */\nexport declare const CaptionHorizontalAlignmentValues: readonly [\"Left\", \"Right\", \"Center\", \"Auto\"];\n\n/** @public */\nexport declare type CaptionVerticalAlignment = (typeof CaptionVerticalAlignmentValues)[number];\n\n/** @public */\nexport declare const CaptionVerticalAlignmentValues: readonly [\"Top\", \"Bottom\", \"Center\"];\n\n/**\n * Tight ink-paint bounding box of a single grapheme, in global scene\n * coordinates. Returned by `block.getTextCharacterInkBoxes`. The baseline\n * Y is reported separately because it does not equal `y + height` (the\n * box is the tight ink rect; the baseline anchors glyph descenders).\n */\nexport declare interface CharacterInkBox {\n /** Global X of the tight ink rect (left edge, Y-down scene space). */\n x: number;\n /** Global Y of the tight ink rect (top edge, Y-down scene space). */\n y: number;\n /** Width of the tight ink rect. */\n width: number;\n /** Height of the tight ink rect. */\n height: number;\n /** Global Y of the glyph baseline. */\n baselineY: number;\n}\n\n/**\n * Represents a color in the CMYK color space.\n *\n * The `CMYK` type is a tuple that contains four numbers representing the cyan, magenta,\n * yellow, and black components of the color.\n *\n * @categoryDescription CMYK\n * Methods for working with colors in the CMYK color space.\n *\n * @public\n */\nexport declare type CMYK = [c: number, m: number, y: number, k: number];\n\n/**\n * Represents a CMYK color value.\n *\n * Defines a CMYK color value with components between 0 and 1.\n * - 'c': The cyan component.\n * - 'm': The magenta component.\n * - 'y': The yellow component.\n * - 'k': The black component.\n * - 'tint': The tint factor.\n *\n * @public\n */\nexport declare interface CMYKColor {\n /** Cyan */\n c: number;\n /** Magenta */\n m: number;\n /** Yellow */\n y: number;\n /** Black */\n k: number;\n /** The tint factor */\n tint: number;\n}\n\n/**\n * Represents all color types supported by the engine.\n *\n * @categoryDescription Color\n * Defines all color types supported by the engine.\n * - 'RGBAColor': An RGBA color value.\n * - 'CMYKColor': A CMYK color value.\n * - 'SpotColor': A spot color value.\n *\n * @public\n */\nexport declare type Color = RGBAColor | CMYKColor | SpotColor;\n\n/** @public */\nexport declare type ColorPickerColorMode = (typeof ColorPickerColorModeValues)[number];\n\n/** @public */\nexport declare const ColorPickerColorModeValues: readonly [\"RGB\", \"CMYK\", \"Any\"];\n\n/** @public */\nexport declare type ColorPropertyName = 'dropShadow/color' | 'fill/solid/color' | 'page/guides/gridColor' | 'stroke/color' | 'backgroundColor/color' | 'animation/block_swipe_text/blockColor' | 'effect/duotone_filter/darkColor' | 'effect/duotone_filter/lightColor' | 'effect/green_screen/fromColor' | 'effect/recolor/fromColor' | 'effect/recolor/toColor' | 'fill/color/value' | (string & {});\n\n/**\n * Represents the color space used in the editor.\n *\n * @categoryDescription Color Space\n * Defines the possible color spaces used in the editor.\n * - 'sRGB': The sRGB color space.\n * - 'CMYK': The CMYK color space.\n * - 'SpotColor': The spot color space.\n *\n * @public\n */\nexport declare type ColorSpace = 'sRGB' | 'CMYK' | 'SpotColor';\n\n/**\n * Asset results that are returned from the engine.\n *\n * They contain additional information about the context of the asset.\n * @public\n */\nexport declare interface CompleteAssetResult extends AssetResult {\n /**\n * Context how an asset was added or shall be used in the future.\n * This is added to all assets coming from the engine.\n */\n context: {\n sourceId: string;\n };\n /** This is optional in `AssetResult` but always present here */\n active: boolean;\n}\n\n/**\n * Compression format for scene serialization.\n * @public\n */\ndeclare enum CompressionFormat_2 {\n None = 0,\n Zstd = 1\n}\nexport { CompressionFormat_2 as CompressionFormat }\n\n/**\n * Compression level for scene serialization.\n * @public\n */\nexport declare enum CompressionLevel {\n Fastest = 0,\n Default = 1,\n Best = 2\n}\n\n/**\n * Specifies the configuration for the Creative Editor SDK.\n *\n * The `Configuration` interface provides a set of properties that control the behavior\n * and settings of the editor. These options include settings for the base URL, license,\n * user ID, core settings, logger, feature flags, presets, force WebGL1, audio output,\n * and role.\n *\n * @public\n */\nexport declare interface Configuration {\n baseURL: string;\n license?: string;\n userId?: string;\n core: {\n baseURL: string;\n };\n logger: Logger;\n featureFlags?: {\n [flag: string]: boolean | string;\n };\n /**\n * @deprecated This config key is not used anymore and will be removed.\n */\n presets: {\n /**\n * @deprecated The configuration option `presets.typefaces` does not exist anymore.\n * Custom typefaces should be defined as asset sources using\n * the `cesdk.engine.asset.addSource` or `cesdk.engine.asset.addLocalSource` instead.\n */\n typefaces?: {\n [id: string]: TypefaceDefinition;\n };\n };\n /**\n * By default the engine tries to create a webgl2 context. If this fails it\n * falls back to trying to create a webgl1 context. If this configuration\n * option is set to true, it will no longer try to create a webgl2 context\n * and always create a webgl1 context.\n */\n forceWebGL1?: boolean;\n /**\n * Whether the engine should automatically choose an audio output device or\n * should not output audio at all.\n *\n * If not configured the fallback value is 'auto'.\n */\n audioOutput?: 'auto' | 'none';\n role?: RoleString;\n}\n\n/** @public */\nexport declare type ContentFillMode = (typeof ContentFillModeValues)[number];\n\n/** @public */\nexport declare const ContentFillModeValues: readonly [\"Crop\", \"Cover\", \"Contain\"];\n\n/** @public */\nexport declare type ControlGizmoMoveHandleVisibility = (typeof ControlGizmoMoveHandleVisibilityValues)[number];\n\n/** @public */\nexport declare const ControlGizmoMoveHandleVisibilityValues: readonly [\"auto\", \"always\", \"never\"];\n\n/** @public */\nexport declare type ControlGizmoResizeHandlesVisibility = (typeof ControlGizmoResizeHandlesVisibilityValues)[number];\n\n/** @public */\nexport declare const ControlGizmoResizeHandlesVisibilityValues: readonly [\"auto\", \"always\", \"never\"];\n\n/** @public */\nexport declare type ControlGizmoRotateHandlesVisibility = (typeof ControlGizmoRotateHandlesVisibilityValues)[number];\n\n/** @public */\nexport declare const ControlGizmoRotateHandlesVisibilityValues: readonly [\"auto\", \"always\", \"never\"];\n\n/** @public */\nexport declare type ControlGizmoScaleHandlesVisibility = (typeof ControlGizmoScaleHandlesVisibilityValues)[number];\n\n/** @public */\nexport declare const ControlGizmoScaleHandlesVisibilityValues: readonly [\"auto\", \"always\", \"never\"];\n\n/**\n * Options for creating a video scene.\n * @public\n */\nexport declare type CreateSceneOptions = {\n /** The page options */\n page?: {\n /** The size of the page */\n size: number | {\n width: number;\n height: number;\n };\n /** The background color of the page */\n color?: Color;\n };\n /**\n * The design unit of the new scene. Defaults to `Pixel`.\n */\n designUnit?: SceneDesignUnit;\n /**\n * The unit in which font sizes for `setTextFontSize` and `getTextFontSizes` are interpreted.\n * If omitted, it is paired with `designUnit`: `Pixel` scenes get `Pixel`, all other scenes get `Point`.\n */\n fontSizeUnit?: SceneFontSizeUnit;\n};\n\n/**\n * The CreativeEngine is the core processing unit of CE.SDK and handles state management, rendering, input handling, and much more.\n * It provides APIs to directly interact with assets, blocks, scenes, and variables. These APIs can be used in a headless environment\n * to build and manipulate designs programmatically, or in a browser to create interactive applications.\n *\n * @public\n */\ndeclare class CreativeEngine {\n #private;\n /**\n * The version of the CE.SDK Node package.\n */\n static readonly version: string;\n asset: AssetAPI;\n block: BlockAPI;\n editor: EditorAPI;\n event: EventAPI;\n scene: SceneAPI;\n variable: VariableAPI;\n /**\n * Register, run, and discover named, overridable actions. On headless Node the registry\n * starts with only the engine-default `ly.img.*` actions (no host UI), but the API is\n * identical to the browser engine.\n */\n actions: EngineActions;\n version: string;\n\n /**\n * Update the engine's internal state and render to the canvas, if a scene exists.\n *\n * @category Engine Management\n */\n update(): boolean;\n /**\n * Dispose the engine and clean up all resources.\n *\n * @category Engine Management\n */\n dispose(): void;\n /**\n * Initialize a CreativeEngine with an optional configuration.\n *\n * @category Engine Management\n * @param config - Optional configuration object for engine initialization.\n * @returns A promise that resolves to an engine instance.\n */\n static init(config?: Partial<Configuration>): Promise<CreativeEngine>;\n /**\n * Register a set of asset sources containing default assets.\n *\n * Available default asset sources:\n * - `'ly.img.sticker'` - Various stickers\n * - `'ly.img.vectorpath'` - Shapes and arrows\n * - `'ly.img.filter.lut'` - LUT effects of various kinds\n * - `'ly.img.filter.duotone'` - Color effects of various kinds\n *\n * These assets are parsed at \\{\\{base_url\\}\\}/<id>/content.json, where\n * `base_url` defaults to the IMG.LY CDN.\n * Each source is created via `addLocalSource` and populated with the parsed assets. To modify the available\n * assets, you may either exclude certain IDs via `excludeAssetSourceIds` or alter the sources after creation.\n *\n * @category Asset Sources\n * @param options - Configuration options for loading default asset sources.\n * @returns A promise that resolves when all asset sources are loaded.\n */\n addDefaultAssetSources({ baseURL, excludeAssetSourceIds }?: {\n /** The source of the asset definitions, must be absolute. Defaults to IMG.LY CDN. */\n baseURL?: string;\n /** A list of IDs, that will be ignored during load. */\n excludeAssetSourceIds?: DefaultAssetSourceId[];\n }): Promise<void>;\n /**\n * Register a set of demo asset sources containing example assets.\n *\n * **Note**: These are demonstration assets not meant for production use.\n *\n * Available demo asset sources:\n * - `'ly.img.image'` - Sample images\n * - `'ly.img.image.upload'` - Demo source to upload image assets\n * - `'ly.img.audio'` - Sample audios\n * - `'ly.img.audio.upload'` - Demo source to upload audio assets\n * - `'ly.img.video'` - Sample videos\n * - `'ly.img.video.upload'` - Demo source to upload video assets\n *\n * @category Asset Sources\n * @param options - Configuration options for loading demo asset sources.\n * @returns A promise that resolves when all demo asset sources are loaded.\n */\n addDemoAssetSources({ baseURL, excludeAssetSourceIds, sceneMode, withUploadAssetSources }?: {\n /** The source of the demo asset definitions, must be absolute. Defaults to IMG.LY CDN. */\n baseURL?: string;\n /** A list of IDs, that will be ignored during load */\n excludeAssetSourceIds?: DemoAssetSourceId[];\n /** If 'Video' video specific demo asset sources will be loaded as well (default 'Design') */\n sceneMode?: SceneMode;\n /** If 'true' asset sources for uploads are added (default false) */\n withUploadAssetSources?: boolean;\n }): Promise<void>;\n /**\n * Returns the configured base URL for the engine's assets.\n *\n * @category Engine Management\n * @returns The absolute base URL configured for this engine instance.\n *\n * @example\n * ```typescript\n * const engine = await CreativeEngine.init({\n * baseURL: 'https://my-cdn.example.com/assets/'\n * });\n *\n * console.log(engine.getBaseURL()); // 'https://my-cdn.example.com/assets/'\n * ```\n */\n getBaseURL(): string;\n}\nexport default CreativeEngine;\n\n/**\n * Represents the type of a cutout.\n *\n * @categoryDescription Cutout Type\n * Defines the possible types for a cutout.\n * - 'Solid': A solid cutout.\n * - 'Dashed': A dashed cutout.\n *\n * @public\n */\nexport declare type CutoutOperation = 'Difference' | 'Intersection' | 'Union' | 'XOR';\n\n/** @public */\nexport declare type CutoutType = (typeof CutoutTypeValues)[number];\n\n/** @public */\nexport declare const CutoutTypeValues: readonly [\"Solid\", \"Dashed\"];\n\n/**\n * Represents the default asset source IDs used in the editor.\n *\n * @categoryDescription Default Asset Source ID\n * Defines the possible default asset source IDs used in the editor.\n * - 'ly.img.sticker': Asset source for stickers.\n * - 'ly.img.vectorpath': Asset source for vector paths.\n * - 'ly.img.colors.defaultPalette': Asset source for the default color palette.\n * - 'ly.img.filter.lut': Asset source for LUT filters.\n * - 'ly.img.filter.duotone': Asset source for duotone filters.\n * - 'ly.img.effect': Asset source for effects.\n * - 'ly.img.blur': Asset source for blur effects.\n * - 'ly.img.typeface': Asset source for typefaces.\n * - 'ly.img.page.presets': Asset source for page presets.\n * - 'ly.img.page.presets.video': Asset source for video page presets.\n * - 'ly.img.crop.presets': Asset source for crop presets.\n * - 'ly.img.captionPresets': Asset source for caption presets.\n *\n * @deprecated This function uses legacy v4 asset source IDs. Please migrate to v5 asset sources using engine.asset.addLocalAssetSourceFromJSONURI() directly.\n * @public\n */\nexport declare type DefaultAssetSourceId = 'ly.img.sticker' | 'ly.img.vectorpath' | 'ly.img.colors.defaultPalette' | 'ly.img.filter.lut' | 'ly.img.filter.duotone' | 'ly.img.effect' | 'ly.img.blur' | 'ly.img.typeface' | 'ly.img.page.presets' | 'ly.img.page.presets.video' | 'ly.img.crop.presets' | 'ly.img.text' | 'ly.img.captionPresets';\n\n/**\n * Represents the default demo asset source IDs used in the editor.\n *\n * @categoryDescription Default Demo Asset Source ID\n * Defines the possible default demo asset source IDs used in the editor.\n * - 'ly.img.template': Asset source for templates.\n * - 'ly.img.image.upload': Asset source for uploading images.\n * - 'ly.img.video.upload': Asset source for uploading videos.\n * - 'ly.img.audio.upload': Asset source for uploading audio.\n * - 'ly.img.image': Asset source for images.\n * - 'ly.img.video': Asset source for videos.\n * - 'ly.img.video.template': Asset source for video templates.\n * - 'ly.img.audio': Asset source for audio.\n * - 'ly.img.textComponents': Asset source for text components.\n *\n * @deprecated This function uses legacy v3 demo asset source IDs. Please migrate to v4 asset sources using engine.asset.addLocalAssetSourceFromJSONURI() directly.\n * @public\n */\nexport declare type DemoAssetSourceId = 'ly.img.template' | 'ly.img.image.upload' | 'ly.img.video.upload' | 'ly.img.audio.upload' | 'ly.img.image' | 'ly.img.video' | 'ly.img.video.template' | 'ly.img.audio' | 'ly.img.textComponents';\n\n/**\n * The shorthand block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * @public\n */\nexport declare const DESIGN_BLOCK_TYPES: readonly [\"scene\", \"stack\", \"camera\", \"page\", \"graphic\", \"audio\", \"text\", \"group\", \"cutout\", \"track\", \"caption\", \"captionTrack\"];\n\n/**\n * A numerical identifier for a design block\n * @public\n */\nexport declare type DesignBlockId = number;\n\n/**\n * The block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * Refer to {@link DesignBlockTypeShorthand} and {@link DesignBlockTypeLonghand} for more details.\n * @public\n */\nexport declare type DesignBlockType = DesignBlockTypeShorthand | DesignBlockTypeLonghand;\n\n/**\n * The longhand block type IDs for the top-level design blocks. These are the IDs used to create new blocks\n * using `cesdk.engine.block.create(id)`.\n * @public\n */\nexport declare type DesignBlockTypeLonghand = `//ly.img.ubq/${DesignBlockTypeShorthand}`;\n\n/** @public */\nexport declare type DesignBlockTypeShorthand = (typeof DESIGN_BLOCK_TYPES)[number];\n\n/**\n * A single color extracted from the rendered appearance of a block.\n *\n * @public\n */\nexport declare interface DominantColor {\n /** Red component in sRGB, normalized to the range [0, 1]. */\n r: number;\n /** Green component in sRGB, normalized to the range [0, 1]. */\n g: number;\n /** Blue component in sRGB, normalized to the range [0, 1]. */\n b: number;\n /**\n * Share of analyzed pixels represented by this color, in the range [0, 1].\n * Higher values indicate a more prominent color. The sum of weights returned\n * by a single `BlockAPI.getDominantColors` call is `1.0`.\n */\n weight: number;\n}\n\n/**\n * Options for `BlockAPI.getDominantColors`.\n *\n * @public\n */\nexport declare interface DominantColorsOptions {\n /**\n * Number of dominant colors to extract.\n * The returned palette may contain fewer entries for images with very little variation,\n * and is empty when `count` is `0`.\n *\n * @defaultValue 5\n */\n count?: number;\n /**\n * If `true`, near-white pixels are excluded from the analysis.\n * Useful when analyzing images on white backgrounds to avoid the background\n * dominating the result.\n *\n * @defaultValue false\n */\n ignoreWhite?: boolean;\n}\n\n/** @public */\nexport declare type DoubleClickSelectionMode = (typeof DoubleClickSelectionModeValues)[number];\n\n/** @public */\nexport declare const DoubleClickSelectionModeValues: readonly [\"Direct\", \"Hierarchical\"];\n\n/** @public */\nexport declare type DoublePropertyName = 'playback/time' | 'playback/duration' | 'playback/timeOffset' | 'audio/totalDuration' | 'playback/trimLength' | 'playback/trimOffset' | 'fill/video/totalDuration' | (string & {});\n\n/**\n * Information about a single audio track from a video.\n * This interface provides comprehensive metadata about audio tracks,\n * including codec information, technical specifications, and track details.\n * @public\n */\n/**\n * Options for configuring drop shadow effects on blocks.\n * @public\n */\nexport declare type DropShadowOptions = {\n /** The color of the drop shadow */\n color?: Color;\n /** The offset position of the shadow */\n offset?: {\n /** Horizontal offset in scene design units */\n x?: number;\n /** Vertical offset in scene design units */\n y?: number;\n };\n /** The blur radius of the shadow */\n blur?: {\n /** Horizontal blur radius in scene design units */\n x?: number;\n /** Vertical blur radius in scene design units */\n y?: number;\n };\n};\n\n/**\n * Represents the current edit mode of the editor.\n *\n * @categoryDescription Edit Mode\n * Defines the possible edit modes of the editor.\n * - 'Transform': The mode for transforming blocks (e.g., resizing, rotating).\n * - 'Crop': The mode for cropping images.\n * - 'Text': The mode for editing text.\n * - 'Playback': The mode for playing back animations or videos.\n * - 'Trim': The mode for trimming video or audio.\n * - 'Custom': A custom edit mode defined by the user.\n *\n * @public\n */\nexport declare type EditMode = 'Transform' | 'Crop' | 'Text' | 'Playback' | 'Trim' | 'Vector' | (string & {});\n\n/**\n * @public Control the design editor's behavior and settings.\n *\n * The EditorAPI provides access to edit modes, history management, editor settings, color management,\n * resource handling, and global scope controls. It serves as the central configuration and control interface\n * for the design editor engine.\n *\n * @categoryDescription Edit Mode Management\n * Control the editor's current editing mode and interaction state.\n *\n * @categoryDescription History Management\n * Create, manage, and operate on undo/redo history stacks.\n *\n * @categoryDescription Editor Settings\n * Configure editor behavior through typed settings for different data types.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to editor state changes, history updates, and role changes.\n *\n * @categoryDescription Role & Scope Management\n * Manage user roles and global scope permissions.\n *\n * @categoryDescription Color Management\n * Handle spot colors, color conversion, and color space operations.\n *\n * @categoryDescription Resource Management\n * Manage buffers, URIs, and resource data handling.\n *\n * @categoryDescription System Information\n * Access memory usage, export limits, and system capabilities.\n */\nexport declare class EditorAPI {\n #private;\n\n\n\n\n\n\n\n /**\n * Subscribe to editor state changes.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the editor state changes.\n * @returns A method to unsubscribe from the event.\n */\n onStateChanged: (callback: () => void) => (() => void);\n /**\n * Set the editor's current edit mode.\n *\n * Edit modes represent different tools or interaction states within the editor. Common ones, are \"Crop\" while the crop tool is shown or \"Text\" when inline-editing text.\n *\n * ```javascript\n * engine.editor.setEditMode('Crop');\n * // With a base mode\n * engine.editor.setEditMode('CustomMode', 'Crop');\n * ```\n *\n * @category Edit Mode Management\n * @param mode - \"Transform\", \"Crop\", \"Text\", \"Playback\", \"Trim\", \"Vector\" or a custom value.\n * @param baseMode - Optional base mode from which the custom mode will inherit the settings.\n */\n setEditMode(mode: EditMode, baseMode?: string): void;\n /**\n * Get the editor's current edit mode.\n *\n * Edit modes represent different tools or interaction states within the editor. Common ones, are \"Crop\" while the crop tool is shown or \"Text\" when inline-editing text.\n *\n * @category Edit Mode Management\n * @returns \"Transform\", \"Crop\", \"Text\", \"Playback\", \"Trim\", \"Vector\" or a custom value.\n */\n getEditMode(): EditMode;\n /**\n * Check if a user interaction is currently happening.\n *\n * Detects active interactions like resize edits with drag handles or touch gestures.\n *\n * @category Experimental\n * @returns True if an interaction is happening.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isInteractionHappening(): boolean;\n /**\n * Check whether a vector anchor node is currently selected in vector edit mode.\n *\n * @category Vector Edit\n * @returns True if a vector anchor node is selected.\n */\n hasSelectedVectorNode(): boolean;\n /**\n * Add a new vertex by splitting the segment after the currently selected vector node.\n *\n * @category Vector Edit\n */\n addVectorNode(): void;\n /**\n * Delete the currently selected vector node from the path.\n *\n * @category Vector Edit\n */\n deleteVectorNode(): void;\n /**\n * Check whether a vector control point handle is currently selected.\n *\n * @category Vector Edit\n */\n hasSelectedVectorControlPoint(): boolean;\n /**\n * Delete (reset) the currently selected vector control point handles.\n * Removes the bezier handle from the node, converting that side to a straight line.\n * If the node has two handles, only the selected one is removed.\n *\n * @category Vector Edit\n */\n deleteSelectedVectorControlPoints(): void;\n /**\n * Toggle the currently selected vector node between smooth (bezier handles)\n * and corner (no handles).\n *\n * @category Vector Edit\n */\n toggleSelectedVectorNodeSmooth(): void;\n /**\n * Enable or disable bend mode for vector editing.\n *\n * When bend mode is active, clicking an anchor node automatically toggles\n * it between smooth (bezier handles) and corner (no handles).\n *\n * @param active - true to enable bend mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditBendMode(active: boolean): void;\n /**\n * Check whether vector edit bend mode is currently active.\n *\n * @returns true if bend mode is active.\n * @category Vector Edit\n */\n getVectorEditBendMode(): boolean;\n /**\n * Enable or disable add mode for vector editing.\n *\n * When add mode is active, clicking on a path segment inserts a new anchor\n * point at the click position. Mutually exclusive with bend and delete modes.\n *\n * @param active - true to enable add mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditAddMode(active: boolean): void;\n /**\n * Check whether vector edit add mode is currently active.\n *\n * @returns true if add mode is active.\n * @category Vector Edit\n */\n getVectorEditAddMode(): boolean;\n /**\n * Enable or disable delete mode for vector editing.\n *\n * When delete mode is active, clicking an anchor node instantly deletes it\n * from the path. Mutually exclusive with bend and add modes.\n *\n * @param active - true to enable delete mode, false to return to normal move mode.\n * @category Vector Edit\n */\n setVectorEditDeleteMode(active: boolean): void;\n /**\n * Check whether vector edit delete mode is currently active.\n *\n * @returns true if delete mode is active.\n * @category Vector Edit\n */\n getVectorEditDeleteMode(): boolean;\n /**\n * Set the bezier handle mirror mode for the currently selected vector node.\n *\n * Mirror modes control how the opposite handle behaves when one handle is dragged:\n * - 0 (None): handles move independently\n * - 1 (AngleAndLength): the opposite handle mirrors both angle and length\n * - 2 (AngleOnly): the opposite handle mirrors the angle but keeps its own length\n *\n * @param mode - The mirror mode (0, 1, or 2).\n * @category Vector Edit\n */\n setSelectedVectorNodeMirrorMode(mode: number): void;\n /**\n * Get the bezier handle mirror mode of the currently selected vector node.\n *\n * @returns The mirror mode as a number (0 = None, 1 = AngleAndLength, 2 = AngleOnly).\n * @throws Error if no node is selected or no vector path is being edited.\n * @category Vector Edit\n */\n getSelectedVectorNodeMirrorMode(): number;\n /**\n * Get the cursor type that should be displayed.\n *\n * @category Edit Mode Management\n * @returns The cursor type.\n */\n getCursorType(): 'Arrow' | 'Move' | 'MoveNotPermitted' | 'Resize' | 'Rotate' | 'Text' | 'Cell';\n /**\n * Get the cursor rotation angle.\n *\n * @category Edit Mode Management\n * @returns The angle in radians.\n */\n getCursorRotation(): number;\n /**\n * Get the text cursor's x position in screen space.\n *\n * @category Edit Mode Management\n * @returns The text cursor's x position in screen space.\n */\n getTextCursorPositionInScreenSpaceX(): number;\n /**\n * Get the text cursor's y position in screen space.\n *\n * @category Edit Mode Management\n * @returns The text cursor's y position in screen space.\n */\n getTextCursorPositionInScreenSpaceY(): number;\n /**\n * Create a new undo/redo history stack.\n *\n * Multiple histories can exist, but only one can be active at a time.\n *\n * ```javascript\n * const newHistory = engine.editor.createHistory();\n * ```\n *\n * @category History Management\n * @returns The handle of the created history.\n */\n createHistory(): HistoryId;\n /**\n * Destroy a history stack and free its resources.\n *\n * ```javascript\n * engine.editor.destroyHistory(oldHistory);\n * ```\n *\n * @category History Management\n * @param history - The history handle to destroy.\n * @throws Error if the handle doesn't refer to a valid history.\n */\n destroyHistory(history: HistoryId): void;\n /**\n * Set a history as the active undo/redo stack.\n *\n * All other histories lose their active state. Undo/redo operations only apply to the active history.\n *\n * ```javascript\n * engine.editor.setActiveHistory(newHistory);\n * ```\n *\n * @category History Management\n * @param history - The history handle to make active.\n * @throws Error if the handle doesn't refer to a valid history.\n */\n setActiveHistory(history: HistoryId): void;\n /**\n * Get the currently active history handle.\n *\n * Creates a new history if none exists.\n *\n * ```javascript\n * const oldHistory = engine.editor.getActiveHistory();\n * ```\n *\n * @category History Management\n * @returns The handle of the active history.\n */\n getActiveHistory(): HistoryId;\n /**\n * Add a new history state to the undo stack.\n *\n * Only adds a state if undoable changes were made since the last undo step.\n *\n * ```javascript\n * engine.editor.addUndoStep();\n * ```\n *\n * @category History Management\n */\n addUndoStep(): void;\n /**\n * Remove the last history state from the undo stack.\n *\n * Removes the most recent undo step if available.\n *\n * ```javascript\n * engine.editor.removeUndoStep();\n * ```\n *\n * @category History Management\n */\n removeUndoStep(): void;\n /**\n * Undo one step in the active history if an undo step is available.\n *\n * ```javascript\n * engine.editor.undo();\n * ```\n *\n * @category History Management\n */\n undo(): void;\n /**\n * Redo one step in the active history if a redo step is available.\n *\n * ```javascript\n * engine.editor.redo();\n * ```\n *\n * @category History Management\n */\n redo(): void;\n /**\n * Check if an undo step is available.\n *\n * ```javascript\n * if (engine.editor.canUndo()) {\n * engine.editor.undo();\n * }\n * ```\n *\n * @category History Management\n * @returns True if an undo step is available.\n */\n canUndo(): boolean;\n /**\n * Check if a redo step is available.\n *\n * ```javascript\n * if (engine.editor.canRedo()) {\n * engine.editor.redo();\n * }\n * ```\n *\n * @category History Management\n * @returns True if a redo step is available.\n */\n canRedo(): boolean;\n /**\n * Subscribe to undo/redo history changes.\n *\n * @deprecated Use {@link onHistoryUpdatedWithKind} instead, which additionally reports a {@link HistoryUpdate}\n * describing the kind of update.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the undo/redo history changes.\n * @returns A method to unsubscribe from the event.\n */\n onHistoryUpdated: (callback: () => void) => (() => void);\n /**\n * Subscribe to undo/redo history changes.\n *\n * The callback receives a {@link HistoryUpdate} describing what kind of update happened so consumers can\n * distinguish a real change to the active history's snapshots (e.g. an edit, undo, or redo) from a pure activation\n * via `setActiveHistory`.\n *\n * ```javascript\n * const unsubscribe = engine.editor.onHistoryUpdatedWithKind((kind) => {\n * if (kind === 'Activated') {\n * // The active history was switched; no scene change happened on this event.\n * return;\n * }\n * const canUndo = engine.editor.canUndo();\n * const canRedo = engine.editor.canRedo();\n * console.log('History updated', { canUndo, canRedo });\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - Function called when the undo/redo history changes. The argument describes the kind of update.\n * @returns A method to unsubscribe from the event.\n */\n onHistoryUpdatedWithKind: (callback: (kind: HistoryUpdate) => void) => (() => void);\n /**\n * Subscribe to editor settings changes.\n *\n * @category Event Subscriptions\n * @param callback - Function called when editor settings change.\n * @returns A method to unsubscribe from the event.\n */\n onSettingsChanged: (callback: () => void) => (() => void);\n /**\n * Subscribe to editor role changes.\n *\n * Allows reacting to role changes and updating engine settings accordingly.\n * The callback is triggered immediately after role changes and default settings are applied.\n *\n * @category Event Subscriptions\n * @param callback - Function called when the user role changes.\n * @returns A method to unsubscribe from the event.\n */\n onRoleChanged: (callback: (role: RoleString) => void) => (() => void);\n /**\n * Set a setting value using the unified API.\n * The value type is automatically validated based on the key.\n *\n * @category Editor Settings\n * @param keypath - The setting key from Settings\n * @param value - The value to set (type-safe based on key)\n * @throws Error if the keypath is invalid or value type doesn't match\n *\n * @example\n * ```typescript\n * // Boolean setting\n * engine.editor.setSetting('doubleClickToCropEnabled', false);\n *\n * // Color setting\n * engine.editor.setSetting('highlightColor', { r: 1, g: 0, b: 1, a: 1 });\n *\n * // Enum setting\n * engine.editor.setSetting('doubleClickSelectionMode', 'Direct');\n * ```\n */\n setSetting<K extends SettingKey>(keypath: OptionalPrefix<K>, value: SettingValueType<K>): void;\n /**\n * Get a setting value using the unified API.\n * The return type is automatically inferred from the key.\n *\n * @category Editor Settings\n * @param keypath - The setting key from Settings\n * @returns The value of the setting (type-safe based on key)\n * @throws Error if the keypath is invalid\n *\n * @example\n * ```typescript\n * // Boolean setting\n * const cropEnabled = engine.editor.getSetting('doubleClickToCropEnabled');\n *\n * // Color setting\n * const highlight = engine.editor.getSetting('highlightColor');\n *\n * // Enum setting\n * const selectionMode = engine.editor.getSetting('doubleClickSelectionMode');\n * ```\n */\n getSetting<K extends SettingKey>(keypath: OptionalPrefix<K>): SettingValueType<K>;\n\n\n\n /**\n * Set a boolean setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickToCropEnabled`.\n * @param value - The boolean value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingBool(keypath: SettingsBool, value: boolean): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingBool(keypath: `ubq://${SettingsBool}`, value: boolean): void;\n /**\n * Get a boolean setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickToCropEnabled`.\n * @returns The boolean value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingBool(keypath: SettingsBool): boolean;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingBool(keypath: `ubq://${SettingsBool}`): boolean;\n getSettingBool(keypath: SettingBoolPropertyName): boolean;\n /**\n * Set an integer setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath.\n * @param value - The integer value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingInt(keypath: SettingsInt, value: number): void;\n setSettingInt(keypath: SettingIntPropertyName, value: number): void;\n /**\n * Get an integer setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath.\n * @returns The integer value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingInt(keypath: SettingsInt): number;\n getSettingInt(keypath: SettingIntPropertyName): number;\n /**\n * Set a float setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `positionSnappingThreshold`.\n * @param value - The float value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingFloat(keypath: SettingsFloat, value: number): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingFloat(keypath: `ubq://${SettingsFloat}`, value: number): void;\n setSettingFloat(keypath: SettingFloatPropertyName, value: number): void;\n /**\n * Get a float setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `positionSnappingThreshold`.\n * @returns The float value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingFloat(keypath: SettingsFloat): number;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingFloat(keypath: `ubq://${SettingsFloat}`): number;\n getSettingFloat(keypath: SettingFloatPropertyName): number;\n /**\n * Set a string setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `license`.\n * @param value - The string value to set.\n * @throws Error if the keypath is invalid.\n */\n setSettingString(keypath: SettingsString, value: string): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingString(keypath: `ubq://${SettingsString}`, value: string): void;\n setSettingString(keypath: SettingStringPropertyName, value: string): void;\n /**\n * Get a string setting value.\n *\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `license`.\n * @returns The string value of the setting.\n * @throws Error if the keypath is invalid.\n */\n getSettingString(keypath: SettingsString): string;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingString(keypath: `ubq://${SettingsString}`): string;\n getSettingString(keypath: SettingStringPropertyName): string;\n /**\n * Set a color setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @param value - The The value to set.\n */\n setSettingColor(keypath: SettingsColor, value: Color): void;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n setSettingColor(keypath: `ubq://${SettingsColor}`, value: Color): void;\n setSettingColor(keypath: SettingColorPropertyName, value: Color): void;\n /**\n * Get a color setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @throws An error, if the keypath is invalid.\n */\n getSettingColor(keypath: SettingsColor): Color;\n /** @deprecated Support for `ubq://` prefixed keypaths will be removed in a future release. */\n getSettingColor(keypath: `ubq://${SettingsColor}`): Color;\n getSettingColor(keypath: SettingColorPropertyName): Color;\n /**\n * Set a color setting.\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n * @param a - The alpha color component in the range of 0 to 1.\n * @deprecated Use setSettingColor() instead.\n */\n setSettingColorRGBA(keypath: SettingsColorRGBA | `ubq://${SettingsColorRGBA}`, r: number, g: number, b: number, a?: number): void;\n /**\n * Get a color setting.\n * @param keypath - The settings keypath, e.g. `highlightColor`.\n * @returns A tuple of channels red, green, blue and alpha in the range of 0 to 1.\n * @deprecated Use getSettingColor() instead.\n */\n getSettingColorRGBA(keypath: SettingsColorRGBA | `ubq://${SettingsColorRGBA}`): RGBA;\n /**\n * Set an enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @param value - The enum value as string.\n */\n setSettingEnum<T extends keyof SettingEnumType>(keypath: T, value: SettingEnumType[T]): void;\n setSettingEnum(keypath: string, value: string): void;\n /**\n * Get an enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The value as string.\n */\n getSettingEnum<T extends keyof SettingEnumType>(keypath: T): SettingEnumType[T];\n getSettingEnum(keypath: string): string;\n /**\n * Get the possible enum options for a given enum setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The possible enum options as strings.\n */\n getSettingEnumOptions<T extends keyof SettingEnumType>(keypath: T): SettingEnumType[T][];\n getSettingEnumOptions(keypath: string): string[];\n /**\n * Set the user role and apply role-dependent defaults.\n *\n * Automatically configures scopes and settings based on the specified role.\n *\n * @category Role & Scope Management\n * @param role - The role to assign to the user.\n */\n setRole(role: RoleString): void;\n /**\n * Get the current user role.\n *\n * @category Role & Scope Management\n * @returns The current role of the user.\n */\n getRole(): RoleString;\n /**\n * Returns a list of all the settings available.\n * @category Editor Settings\n * @returns A list of settings keypaths.\n */\n findAllSettings(): string[];\n /**\n * Returns the type of a setting.\n * @category Editor Settings\n * @param keypath - The settings keypath, e.g. `doubleClickSelectionMode`.\n * @returns The setting type.\n */\n getSettingType(keypath: string): SettingType;\n /**\n * Get the currently available memory.\n *\n * @category System Information\n * @returns The available memory in bytes.\n */\n getAvailableMemory(): number;\n /**\n * Get the engine's current memory usage.\n *\n * @category System Information\n * @returns The current memory usage in bytes.\n */\n getUsedMemory(): number;\n /**\n * Get the maximum export size limit for the current device.\n *\n * Exports are only possible when both width and height are below this limit.\n * Note that exports may still fail due to other constraints like memory.\n *\n * @category System Information\n * @returns The upper export size limit in pixels, or maximum 32-bit integer if unlimited.\n */\n getMaxExportSize(): number;\n /**\n * Sets a custom URI resolver.\n *\n * This function can be called more than once. Subsequent calls will overwrite previous calls.\n * To remove a previously set resolver, pass the value `null`.\n * The given function must return an absolute path with a scheme and cannot be asynchronous. The input is allowed to be an invalid URI, e.g., due to placeholders.\n *\n * ```javascript\n * // Replace all .jpg files with the IMG.LY logo\n * engine.editor.setURIResolver((uri) => {\n * if (uri.endsWith('.jpg')) {\n * return 'https://img.ly/static/ubq_samples/imgly_logo.jpg';\n * }\n * // Make use of the default URI resolution behavior.\n * return engine.editor.defaultURIResolver(uri);\n * });\n * ```\n *\n * @category Editor Settings\n * @param resolver - Custom resolution function. The resolution function\n * should not reference variables outside of its scope.\n * It receives the default URI resolver as its second argument\n */\n setURIResolver(resolver: SyncURIResolver): void;\n /**\n * Sets a custom async URI resolver.\n *\n * This function can be called more than once. Subsequent calls will overwrite previous calls.\n * To remove a previously set resolver, pass the value `null`.\n * The given function must return an absolute path with a scheme. The input is allowed to be invalid URI, e.g., due\n * to placeholders.\n *\n * @category Editor Settings\n * @param resolver - Custom async resolution function.\n */\n setURIResolverAsync(resolver: AsyncURIResolver | null): void;\n\n\n /**\n * This is the default implementation for the URI resolver.\n *\n * It resolves the given path relative to the `basePath` setting.\n *\n * ```javascript\n * engine.editor.defaultURIResolver(uri);\n * ```\n *\n * @category Editor Settings\n * @param relativePath - The relative path that should be resolved.\n * @returns The resolved absolute URI.\n */\n defaultURIResolver(relativePath: string): string;\n /**\n * Resolves the given path asynchronously.\n *\n * If a custom resolver has been set with `setURIResolverAsync` (or `setURIResolver`), it invokes it with the given\n * path. Else, it resolves it as relative to the `basePath` setting.\n * This performs NO validation of whether a file exists at the specified location.\n *\n * **Breaking change:** This method now returns a `Promise<string>` instead\n * of a plain `string`. Callers must `await` the result.\n *\n * @category Editor Settings\n * @param relativePath - A relative path string\n * @returns Promise resolving to the resolved absolute uri or rejecting if an invalid path was given.\n */\n getAbsoluteURI(relativePath: string): Promise<string>;\n /**\n * Get all available global scope names.\n *\n * @category Role & Scope Management\n * @returns The names of all available global scopes.\n */\n findAllScopes(): Scope[];\n /**\n * Set a global scope permission level.\n *\n * @category Role & Scope Management\n * @param key - The scope to configure.\n * @param value - `Allow` always allows, `Deny` always denies, `Defer` defers to block-level.\n */\n setGlobalScope(key: Scope, value: 'Allow' | 'Deny' | 'Defer'): void;\n /**\n * Get a global scope's permission level.\n *\n * @category Role & Scope Management\n * @param key - The scope to query.\n * @returns `Allow`, `Deny`, or `Defer` indicating the scope's permission level.\n */\n getGlobalScope(key: Scope): 'Allow' | 'Deny' | 'Defer';\n /**\n * Get all spot color names currently defined.\n *\n * @category Color Management\n * @returns The names of all defined spot colors.\n */\n findAllSpotColors(): string[];\n /**\n * Queries the RGB representation set for a spot color.\n *\n * If the value of the queried spot color has not been set yet, returns the default RGB representation (of magenta).\n * The alpha value is always 1.0.\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns A result holding a float array of the four color components.\n */\n getSpotColorRGBA(name: string): RGBA;\n /**\n * Queries the CMYK representation set for a spot color.\n *\n * If the value of the queried spot color has not been set yet, returns the default CMYK representation (of magenta).\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns A result holding a float array of the four color components.\n */\n getSpotColorCMYK(name: string): CMYK;\n /**\n * Sets the RGB representation of a spot color.\n *\n * Use this function to both create a new spot color or update an existing spot color.\n * @category Color Management\n * @param name - The name of a spot color.\n * @param r - The red color component in the range of 0 to 1.\n * @param g - The green color component in the range of 0 to 1.\n * @param b - The blue color component in the range of 0 to 1.\n */\n setSpotColorRGB(name: string, r: number, g: number, b: number): void;\n /**\n * Sets the CMYK representation of a spot color.\n *\n * Use this function to both create a new spot color or update an existing spot color.\n * @category Color Management\n * @param name - The name of a spot color.\n * @param c - The cyan color component in the range of 0 to 1.\n * @param m - The magenta color component in the range of 0 to 1.\n * @param y - The yellow color component in the range of 0 to 1.\n * @param k - The key color component in the range of 0 to 1.\n */\n setSpotColorCMYK(name: string, c: number, m: number, y: number, k: number): void;\n /**\n * Removes a spot color from the list of set spot colors.\n *\n * @category Color Management\n * @param name - The name of a spot color.\n * @returns An empty result on success, an error otherwise.\n */\n removeSpotColor(name: string): void;\n /**\n * Set the spot color assign to a cutout type.\n *\n * All cutout blocks of the given type will be immediately assigned that spot color.\n * @category Color Management\n * @param type - The cutout type.\n * @param color - The spot color name to assign.\n */\n setSpotColorForCutoutType(type: CutoutType, color: string): void;\n /**\n * Get the name of the spot color assigned to a cutout type.\n * @category Color Management\n * @param type - The cutout type.\n * @returns The color spot name.\n */\n getSpotColorForCutoutType(type: CutoutType): string;\n /**\n * Converts a color to the given color space.\n * @category Color Management\n * @param color - The color to convert.\n * @param colorSpace - The color space to convert to.\n * @returns The converted color.\n */\n convertColorToColorSpace(color: Color, colorSpace: 'sRGB'): RGBAColor;\n /** */\n convertColorToColorSpace(color: Color, colorSpace: 'CMYK'): CMYKColor;\n /** */\n convertColorToColorSpace(color: Color, colorSpace: ColorSpace): never;\n /**\n * Create a resizable buffer for arbitrary data.\n *\n * ```javascript\n * const buffer = engine.editor.createBuffer();\n *\n * // Reference the buffer resource from the audio block\n * engine.block.setString(audioBlock, 'audio/fileURI', buffer);\n * ```\n *\n * @category Resource Management\n * @returns A URI to identify the created buffer.\n */\n createBuffer(): string;\n /**\n * Destroy a buffer and free its resources.\n *\n * ```javascript\n * engine.editor.destroyBuffer(buffer);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to destroy.\n */\n destroyBuffer(uri: string): void;\n /**\n * Set the data of a buffer at a given offset.\n *\n * ```javascript\n * // Generate 10 seconds of stereo 48 kHz audio data\n * const samples = new Float32Array(10 * 2 * 48000);\n * for (let i = 0; i < samples.length; i += 2) {\n * samples[i] = samples[i + 1] = Math.sin((440 * i * Math.PI) / 48000);\n * }\n * // Assign the audio data to the buffer\n * engine.editor.setBufferData(buffer, 0, new Uint8Array(samples.buffer));\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to update.\n * @param offset - The offset in bytes at which to start writing.\n * @param data - The data to write.\n */\n setBufferData(uri: string, offset: number, data: Uint8Array): void;\n /**\n * Get the data of a buffer at a given offset.\n *\n * ```javascript\n * engine.editor.findAllTransientResources().forEach((resource) => {\n * const bufferURI = resource.URL;\n * const length = engine.editor.getBufferLength(buffer);\n * const data = engine.editor.getBufferData(buffer, 0, length);\n * const blob = new Blob([data]);\n * })\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to query.\n * @param offset - The offset in bytes at which to start reading.\n * @param length - The number of bytes to read.\n * @returns The data at the given offset.\n */\n getBufferData(uri: string, offset: number, length: number): Uint8Array;\n /**\n * Set the length of a buffer.\n *\n * ```javascript\n * // Reduce the buffer to half its length\n * const currentLength = engine.editor.getBufferLength(buffer);\n * engine.editor.setBufferLength(buffer, currentLength / 2);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to update.\n * @param length - The new length of the buffer in bytes.\n */\n setBufferLength(uri: string, length: number): void;\n /**\n * Get the length of a buffer.\n *\n * ```javascript\n * const length = engine.editor.getBufferLength(buffer);\n * ```\n *\n * @category Resource Management\n * @param uri - The URI of the buffer to query.\n * @returns The length of the buffer in bytes.\n */\n getBufferLength(uri: string): number;\n\n\n /**\n * Get the MIME type of a resource.\n *\n * Downloads the resource if not already cached.\n *\n * @category Resource Management\n * @param uri - The URI of the resource.\n * @returns Promise resolving to the resource's MIME type.\n * @throws Error if the resource cannot be downloaded or MIME type determined.\n */\n getMimeType(uri: string): Promise<string>;\n /**\n * Gets the font metrics for a given font file URI.\n *\n * If the font is not yet loaded, it will be fetched asynchronously.\n * The returned metrics are in the font's design units coordinate space.\n *\n * ```javascript\n * const metrics = await engine.editor.getFontMetrics('/extensions/ly.img.cesdk.fonts/fonts/Roboto/Roboto-Regular.ttf');\n * console.log(metrics.ascender, metrics.descender, metrics.unitsPerEm);\n * console.log(metrics.lineGap);\n * console.log(metrics.capHeight, metrics.xHeight);\n * console.log(metrics.underlineOffset, metrics.underlineSize, metrics.strikeoutOffset, metrics.strikeoutSize);\n * ```\n *\n * @category Resource Management\n * @param fontFileUri - The URI of the font file to get metrics from.\n * @returns A promise resolving to the font metrics.\n */\n getFontMetrics(fontFileUri: string): Promise<FontMetrics>;\n /**\n * Get all transient resources that would be lost during export.\n *\n * Useful for identifying resources that need relocation (e.g., to a CDN) before export,\n * as these resources are not included in the exported scene.\n *\n * @category Resource Management\n * @returns The URLs and sizes of transient resources.\n */\n findAllTransientResources(): TransientResource[];\n /**\n * Get all media URIs referenced by blocks in the scene.\n *\n * Returns URIs from image fills, video fills, and audio blocks, including their source sets.\n * Only returns valid media URIs (http://, https://, file://), excluding transient resources\n * like buffer URIs. Useful for determining which media files are referenced by a scene\n * (e.g., for cleanup operations, CDN management, or file system tracking).\n *\n * @category Resource Management\n * @returns The URLs of all media resources referenced in the scene, deduplicated.\n */\n findAllMediaURIs(): string[];\n /**\n * Provides the data of a resource at the given URL.\n *\n * @category Resource Management\n * @param uri - The URL of the resource.\n * @param chunkSize - The size of the chunks in which the resource data is provided.\n * @param onData - The callback function that is called with the resource data or an error if an error occurred.\n * The callback will be called as long as there is data left to provide and the callback returns `true`.\n */\n getResourceData(uri: string, chunkSize: number, onData: (result: Uint8Array) => boolean): void;\n /**\n * Changes the URL associated with a resource.\n *\n * This function can be used change the URL of a resource that has been relocated (e.g., to a CDN).\n * @category Resource Management\n * @param currentUrl - The current URL of the resource.\n * @param relocatedUrl - The new URL of the resource.\n */\n relocateResource(currentUrl: string, relocatedUrl: string): void;\n /**\n * Checks wether the block has selection and hover highlighting enabled or disabled.\n *\n * ```javascript\n * const highlightingIsEnabled = engine.editor.isHighlightingEnabled(block);\n * ```\n *\n * @param id - The block to query.\n * @returns True if highlighting is enabled, false otherwise.\n */\n isHighlightingEnabled(id: DesignBlockId): boolean;\n /**\n * Enable or disable selection and hover highlighting for a block.\n *\n * ```javascript\n * engine.editor.setHighlightingEnabled(block, true);\n * ```\n *\n * @param id - The block to update.\n * @param enabled - Whether or not the block should show highlighting when selected or hovered.\n */\n setHighlightingEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Set global safe area insets for UI overlays.\n *\n * Safe area insets define UI-safe regions by specifying padding from screen edges.\n * These insets are automatically applied to all camera operations (zoom, pan, clamping)\n * to ensure important content remains visible when UI elements overlap the viewport edges.\n * Set to zero to disable (default state).\n *\n * @param insets - The inset values in CSS pixels (device-independent)\n * @public\n * @category Viewport\n */\n setSafeAreaInsets(insets: {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n }): void;\n /**\n * Get the current global safe area insets configuration.\n *\n * @returns The current inset values in CSS pixels (device-independent)\n * @public\n * @category Viewport\n */\n getSafeAreaInsets(): {\n left: number;\n top: number;\n right: number;\n bottom: number;\n };\n /**\n * Checks whether the block can currently be selected.\n *\n * ```javascript\n * const selectionIsEnabled = engine.editor.isSelectionEnabled(block);\n * ```\n *\n * @param id - The block to query.\n * @returns True if selection is enabled, false otherwise.\n */\n isSelectionEnabled(id: DesignBlockId): boolean;\n /**\n * Enable or disable selection for a block.\n *\n * ```javascript\n * engine.editor.setSelectionEnabled(block, true);\n * ```\n *\n * @param id - The block to update.\n * @param enabled - Whether the block should be selectable.\n */\n setSelectionEnabled(id: DesignBlockId, enabled: boolean): void;\n /**\n * Set one or more rules that limit how far blocks can be positioned outside their\n * parent page during user interactions (drag, resize, touch gestures, crop).\n * Programmatic API calls are not affected.\n *\n * `overshoot` is a non-negative fraction of the moved block's own size: `0`\n * pins blocks fully inside the page, `0.3` allows 30% to extend past the page\n * bounds. Each rule's scope is determined by its keys:\n * - `{ overshoot }` — scene-wide default for every page in the scene.\n * - `{ overshoot, block }` — applies to a specific block. Pages are blocks, so\n * setting this on a page acts as the default for blocks inside that page.\n * - `{ overshoot, blockType }` — applies to every block of the given type\n * (e.g. `\"text\"` or `\"//ly.img.ubq/text\"`).\n *\n * Use `removeMovementConstraint` to clear a rule.\n *\n * When multiple rules match a block, the most specific one wins:\n * block \\> parent page \\> blockType \\> scene-wide.\n *\n * @param rules - A single rule or an array of rules to apply.\n */\n setMovementConstraint(rules: MovementConstraintRule | MovementConstraintRule[]): void;\n /**\n * Get the effective movement constraint for a block, picking the most specific\n * matching rule: block \\> parent page \\> blockType \\> scene-wide.\n *\n * The returned `overshoot` is a fraction of the block's own size.\n *\n * @param id - The block to query.\n * @returns `{ overshoot }` with the effective value, or `null` if unconstrained.\n */\n getMovementConstraint(id: DesignBlockId): ResolvedMovementConstraint;\n /**\n * Remove previously set movement constraints.\n *\n * - No argument: removes the scene-wide default.\n * - `{ block }` / `{ blockType }` (or an array): removes the matching scope(s).\n *\n * Removing a scope falls through to the next tier on subsequent resolution.\n *\n * @param scopes - Scope or array of scopes to remove. Omit to remove the\n * scene-wide default.\n */\n removeMovementConstraint(scopes?: MovementConstraintScope | MovementConstraintScope[]): void;\n}\n\n/**\n * The shorthand block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * @public\n */\nexport declare const EFFECT_TYPES: readonly [\"adjustments\", \"cross_cut\", \"dot_pattern\", \"duotone_filter\", \"extrude_blur\", \"glow\", \"green_screen\", \"half_tone\", \"linocut\", \"liquid\", \"lut_filter\", \"mirror\", \"outliner\", \"pixelize\", \"posterize\", \"radial_pixel\", \"recolor\", \"sharpie\", \"shifter\", \"tilt_shift\", \"tv_glitch\", \"vignette\"];\n\n/**\n * The block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * Refer to {@link EffectTypeShorthand} and {@link EffectTypeLonghand} for more details.\n * @public\n */\nexport declare type EffectType = EffectTypeShorthand | EffectTypeLonghand;\n\n/**\n * The longhand block type IDs for the effect blocks. These are the IDs used to create new effects\n * using `cesdk.engine.block.createEffect(id)`.\n * @public\n */\nexport declare type EffectTypeLonghand = `//ly.img.ubq/effect/${EffectTypeShorthand}`;\n\n/** @public */\nexport declare type EffectTypeShorthand = (typeof EFFECT_TYPES)[number];\n\n/** @public Known action ids from {@link EngineActionsRegistry}. */\nexport declare type EngineActionId = keyof EngineActionsRegistry & string;\n\n/** @public Info about a registered action, from {@link EngineActions.list}. */\nexport declare interface EngineActionInfo {\n /** The action id, e.g. `nudge`. */\n id: string;\n /** Whether the action currently says it can run. */\n enabled: boolean;\n /** Optional JSON description of the arguments it accepts. */\n argSchema: string | null;\n}\n\n/**\n * @public Named, overridable actions for one engine. Actions are either JS\n * closures you register or engine defaults (e.g. undo/redo), and\n * either kind can override the other by reusing the id.\n *\n * JS-registered actions run directly in JS, so on the web you get full fidelity:\n * {@link get} hands back the raw function and {@link run} passes args/results by\n * reference (non-serializable payloads like File/Blob work). The engine also keeps\n * a JSON trampoline per action so defaults run natively and host actions stay\n * reachable across the FFI — that path is JSON-only and async. Engine defaults you\n * have not overridden are reachable only via {@link run}; {@link get} returns undefined.\n *\n * @remarks Main-thread only. {@link get} is web-only; use run/has/list cross-platform.\n */\nexport declare class EngineActions {\n #private;\n\n /**\n * Register an action, replacing any existing one with the same id.\n *\n * @param id - The action id (e.g. `undo`). Reusing an engine default's id overrides it.\n * @param fn - The action body (sync or async). On the web it runs directly with\n * any JS values. Across the FFI args/results are JSON, so only serializable\n * payloads work there.\n */\n register<K extends EngineActionId>(id: K, fn: EngineActionsRegistry[K] extends (...args: any[]) => any ? EngineActionsRegistry[K] : EngineCustomActionFunction): void;\n register(id: string, fn: EngineCustomActionFunction): void;\n /**\n * Get the raw registered function for an id so you can call it synchronously.\n *\n * Returns the exact function you registered. Returns `undefined` for unknown ids\n * and engine-default native actions (which have no JS function) — use {@link run}\n * for those.\n *\n * @remarks Web-only.\n */\n get<K extends EngineActionId>(id: K): EngineActionsRegistry[K] | undefined;\n get(id: string): EngineCustomActionFunction | undefined;\n /**\n * Run an action by id and return its result as a Promise.\n *\n * JS-registered actions are called directly (args/result by reference). Engine\n * defaults go across the FFI (JSON args/result).\n *\n * @param id - The action id.\n * @param args - Arguments forwarded to the action.\n * @returns The action's result, or a rejection if the id is unknown or it threw.\n */\n run<K extends EngineActionId>(id: K, ...args: EngineActionsRegistry[K] extends (...args: infer A) => any ? A : unknown[]): Promise<EngineActionsRegistry[K] extends (...args: any[]) => infer R ? Awaited<R> : unknown>;\n run<R = unknown>(id: string, ...args: unknown[]): Promise<R>;\n /** Whether an action with this id is registered (host or engine default). */\n has(id: string): boolean;\n /**\n * Remove a host action, or revert an overridden engine default to its built-in.\n *\n * If you override an engine default (such as `select` or `undo`), unregistering the id restores\n * the default rather than leaving it unhandled. A custom id you registered yourself is removed\n * entirely. Returns `false` only when the id is unknown.\n */\n unregister(id: string): boolean;\n /** List registered actions, optionally filtered by a `*` glob matcher on the id. */\n list(options?: {\n matcher?: string;\n }): EngineActionInfo[];\n\n}\n\n/**\n * @public Hook for hosts to add strongly-typed action ids. Augment via\n * `declare module '@cesdk/engine'` to get autocomplete on register/run while\n * still allowing custom string ids.\n */\nexport declare interface EngineActionsRegistry {\n}\n\n/** @public A generic, untyped action function for custom ids. */\nexport declare type EngineCustomActionFunction = (...args: any[]) => unknown;\n\n/**\n * Represents an engine plugin.\n *\n * Defines the structure of an engine plugin, including its name, version, and initialization function.\n * - 'name': The name of the plugin.\n * - 'version': The version of the plugin.\n * - 'initialize': The function to initialize the plugin with the provided context. Can be synchronous or asynchronous.\n *\n * @public\n */\nexport declare interface EnginePlugin {\n name: string;\n version: string;\n initialize: (context: EnginePluginContext) => void | Promise<void>;\n}\n\n/**\n * Represents the context for an engine plugin.\n *\n * Defines the context provided to an engine plugin, including APIs for assets, blocks, scenes, editor, events, and variables.\n * - 'engine': The engine instance containing APIs for asset, block, scene, editor, event, and variable management.\n *\n * @public\n */\nexport declare type EnginePluginContext = {\n engine: CreativeEngine;\n};\n\n/** @public */\nexport declare type EnumPropertyName = 'blend/mode' | 'contentFill/horizontalAlignment' | 'contentFill/mode' | 'contentFill/verticalAlignment' | 'height/mode' | 'position/x/mode' | 'position/y/mode' | 'scene/designUnit' | 'scene/fontSizeUnit' | 'scene/layout' | 'scene/mode' | 'width/mode' | 'page/guides/source' | 'stroke/cap' | 'stroke/cornerGeometry' | 'stroke/dashEndCap' | 'stroke/dashStartCap' | 'stroke/endCap' | 'stroke/position' | 'stroke/startCap' | 'stroke/style' | 'text/horizontalAlignment' | 'text/verticalAlignment' | 'cutout/type' | 'caption/horizontalAlignment' | 'caption/verticalAlignment' | 'animationEasing' | 'textAnimationWritingStyle' | 'animation/grow/direction' | 'animation/wipe/direction' | 'animation/baseline/direction' | 'animation/spin/direction' | 'animation/spin_loop/direction' | 'animation/jump_loop/direction' | 'animation/typewriter_text/writingStyle' | 'animation/block_swipe_text/direction' | 'animation/merge_text/direction' | 'animation/ken_burns/direction' | 'fill/pixelStream/orientation' | 'shape/vector_path/fillRule' | (string & {});\n\n/** @public */\nexport declare type EnumValues = BlendMode | HorizontalContentFillAlignment | ContentFillMode | VerticalContentFillAlignment | HeightMode | PositionXMode | PositionYMode | SceneDesignUnit | SceneFontSizeUnit | SceneLayout | SceneMode | WidthMode | PageGuidesSource | StrokeCap | StrokeCornerGeometry | StrokeDashEndCap | StrokeDashStartCap | StrokeEndCap | StrokePosition | StrokeStartCap | StrokeStyle | TextHorizontalAlignment | TextVerticalAlignment | CutoutType | CaptionHorizontalAlignment | CaptionVerticalAlignment | AnimationEasing | TextAnimationWritingStyle | AnimationGrowDirection | AnimationWipeDirection | AnimationBaselineDirection | AnimationSpinDirection | AnimationSpinLoopDirection | AnimationJumpLoopDirection | AnimationTypewriterTextWritingStyle | AnimationBlockSwipeTextDirection | AnimationMergeTextDirection | AnimationKenBurnsDirection | FillPixelStreamOrientation | ShapeVectorPathFillRule | (string & {});\n\n/**\n * @public Subscribe to block lifecycle events in the design engine.\n *\n * The EventAPI enables real-time monitoring of block changes through event subscriptions.\n * Events are bundled and delivered efficiently at the end of each engine update cycle.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to block lifecycle events with filtering and callback management.\n */\nexport declare class EventAPI {\n #private;\n\n /**\n * Subscribe to block lifecycle events.\n *\n * Events are bundled and delivered at the end of each engine update cycle for efficient processing.\n *\n * @category Event Subscriptions\n * @param blocks - List of blocks to filter events by. If empty, events for all blocks are sent.\n * @param callback - Function called with bundled events.\n * @returns A method to unsubscribe from the events.\n */\n subscribe: (blocks: DesignBlockId[], callback: (events: BlockEvent[]) => void) => (() => void);\n}\n\n/**\n * Represents the options for exporting a design block.\n *\n * Defines the possible options for exporting a design block.\n * - 'mimeType': The MIME type of the output file.\n * - 'pngCompressionLevel': The PNG compression level to use, when exporting to PNG.\n * - 'jpegQuality': The JPEG quality to use when encoding to JPEG.\n * - 'webpQuality': The WebP quality to use when encoding to WebP.\n * - 'targetWidth': An optional target width used in conjunction with target height.\n * - 'targetHeight': An optional target height used in conjunction with target width.\n * - 'exportPdfWithHighCompatibility': Export the PDF document with a higher compatibility to different PDF\n viewers.\n * - 'exportPdfWithUnderlayer': Export the PDF document with an underlayer.\n * - 'underlayerSpotColorName': The name of the spot color to be used for the underlayer's fill.\n * - 'underlayerOffset': The adjustment in size of the shape of the underlayer.\n * - 'underlayerRenderRatio': Resolution multiplier for the underlayer contour extraction.\n * - 'underlayerMaxError': Curve-fit error tolerance for the underlayer contour.\n * - 'abortSignal': An abort signal that can be used to cancel the export.\n *\n * @public\n */\nexport declare type ExportOptions = {\n /**\n * The MIME type of the output file.\n *\n * @defaultValue 'image/png'\n */\n mimeType?: ImageMimeType | Exclude<ApplicationMimeType, 'application/zip'>;\n /**\n * The PNG compression level to use, when exporting to PNG.\n *\n * Valid values are 0 to 9, higher means smaller, but slower.\n * Quality is not affected.\n * Ignored for other encodings.\n * @defaultValue 5.\n */\n pngCompressionLevel?: number;\n /**\n * The JPEG quality to use when encoding to JPEG.\n *\n * Valid values are (0-1], higher means better quality.\n * Ignored for other encodings.\n *\n * @defaultValue 0.9\n */\n jpegQuality?: number;\n /**\n * The WebP quality to use when encoding to WebP. Valid values are (0-1], higher means better quality.\n * WebP uses a special lossless encoding that usually produces smaller file sizes than PNG.\n * Ignored for other encodings. Defaults to 1.0.\n */\n webpQuality?: number;\n /**\n * An optional target width used in conjunction with target height.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetWidth?: number;\n /**\n * An optional target height used in conjunction with target width.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetHeight?: number;\n /**\n * Export the PDF document with a higher compatibility to different PDF viewers.\n * Bitmap images and some effects like gradients will be rasterized with the DPI\n * setting instead of embedding them directly.\n */\n exportPdfWithHighCompatibility?: boolean;\n /**\n * Export the PDF document with an underlayer.\n * An underlayer is generated by adding a graphics block behind the existing elements of the shape of the elements on\n * the page.\n */\n exportPdfWithUnderlayer?: boolean;\n /**\n * The name of the spot color to be used for the underlayer's fill.\n */\n underlayerSpotColorName?: string;\n /**\n * The adjustment in size of the shape of the underlayer.\n */\n underlayerOffset?: number;\n /**\n * Resolution multiplier for the raster pass that extracts the underlayer contour.\n * Higher values produce sharper underlayer outlines at the cost of memory and export time.\n * Useful for small text on large pages, where the 1.0 default can miss fine glyph details.\n * Values `<= 0` fall back to 1.0. `NaN` / `Infinity` are rejected at the binding boundary\n * with a `StructError`; pass a real number or leave the field undefined to use the default.\n *\n * @defaultValue 1.0\n */\n underlayerRenderRatio?: number;\n /**\n * Maximum acceptable curve-fit error, in pixels, when vectorising the underlayer contour.\n * Smaller values produce tighter fits at the cost of more path complexity.\n * Useful together with `underlayerRenderRatio` for small text on large pages.\n * Values `<= 0` fall back to 2.0. `NaN` / `Infinity` are rejected at the binding boundary\n * with a `StructError`; pass a real number or leave the field undefined to use the default.\n *\n * @defaultValue 2.0\n */\n underlayerMaxError?: number;\n /**\n * If true, the export will include text bounding boxes that account for glyph overhangs.\n * When enabled, text blocks with glyphs that extend beyond their frame (e.g., decorative fonts with swashes)\n * will be exported with the full glyph bounds visible, preventing text clipping.\n *\n * @defaultValue false\n */\n allowTextOverhang?: boolean;\n /**\n * Export CMYK colors using their native color spaces in the PDF.\n * When enabled, direct CMYK colors are written as DeviceCMYK (k/K operators) and spot colors with CMYK values\n * (set via setSpotColorCMYK) are written as DeviceN with process CMYK components.\n * When disabled (default), all colors are exported as DeviceRGB.\n *\n * @defaultValue false\n */\n exportPdfWithDeviceCMYK?: boolean;\n /**\n * An abortsignal that can be used to cancel the export.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * The shorthand block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * @public\n */\nexport declare const FILL_TYPES: readonly [\"color\", \"gradient/linear\", \"gradient/radial\", \"gradient/conical\", \"image\", \"video\", \"pixelStream\"];\n\n/** @public */\nexport declare type FillPixelStreamOrientation = (typeof FillPixelStreamOrientationValues)[number];\n\n/** @public */\nexport declare const FillPixelStreamOrientationValues: readonly [\"Up\", \"Down\", \"Left\", \"Right\", \"UpMirrored\", \"DownMirrored\", \"LeftMirrored\", \"RightMirrored\"];\n\n/**\n * The block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * Refer to {@link FillTypeShorthand} and {@link FillTypeLonghand} for more details.\n * @public\n */\nexport declare type FillType = FillTypeShorthand | FillTypeLonghand;\n\n/**\n * The longhand block type IDs for the fill blocks. These are the IDs used to create new fills\n * using `cesdk.engine.block.createFill(id)`.\n * @public\n */\nexport declare type FillTypeLonghand = `//ly.img.ubq/fill/${FillTypeShorthand}`;\n\n/** @public */\nexport declare type FillTypeShorthand = (typeof FILL_TYPES)[number];\n\n/**\n * Represents a query for finding assets.\n *\n * The `FindAssetsQuery` interface provides a set of properties that describe a query for finding\n * assets, including the number of assets per page, the page number, the query string, the tags,\n * the groups, the excluded groups, the locale, the sorting order, the sort key, and whether to\n * sort active assets first.\n *\n * Methods for working with queries for finding assets.\n *\n * @public\n */\ndeclare interface FindAssetsQuery {\n perPage: number;\n page: number;\n query: string;\n tags: string[];\n groups: string[];\n excludeGroups: string[];\n locale: string;\n sortingOrder: SortingOrder;\n sortKey: string;\n sortActiveFirst: boolean;\n filter: AssetFilter[];\n}\n\n/**\n * Specifies the horizontal and vertical flip states of a design block.\n *\n * The `Flip` interface provides a set of properties that indicate whether the design block\n * is flipped horizontally or vertically.\n *\n * Methods for configuring the flip states of a design block.\n *\n * @public\n */\ndeclare interface Flip {\n horizontal: boolean;\n vertical: boolean;\n}\n\n/** @public */\nexport declare type FloatPropertyName = 'globalBoundingBox/height' | 'globalBoundingBox/width' | 'globalBoundingBox/x' | 'globalBoundingBox/y' | 'height' | 'lastFrame/height' | 'lastFrame/width' | 'lastFrame/x' | 'lastFrame/y' | 'movement/constraint' | 'position/x' | 'position/y' | 'rotation' | 'scene/dpi' | 'scene/pageDimensions/height' | 'scene/pageDimensions/width' | 'scene/pixelScaleFactor' | 'width' | 'camera/pixelRatio' | 'camera/resolution/height' | 'camera/resolution/width' | 'camera/zoomLevel' | 'dropShadow/blurRadius/x' | 'dropShadow/blurRadius/y' | 'dropShadow/offset/x' | 'dropShadow/offset/y' | 'page/guides/gridSpacingX' | 'page/guides/gridSpacingY' | 'page/margin/bottom' | 'page/margin/left' | 'page/margin/right' | 'page/margin/top' | 'page/marginScale' | 'playback/speed' | 'playback/volume' | 'stroke/dashOffset' | 'stroke/width' | 'opacity' | 'backgroundColor/cornerRadius' | 'backgroundColor/paddingBottom' | 'backgroundColor/paddingLeft' | 'backgroundColor/paddingRight' | 'backgroundColor/paddingTop' | 'text/fontSize' | 'text/letterSpacing' | 'text/lineHeight' | 'text/maxAutomaticFontSize' | 'text/minAutomaticFontSize' | 'text/paragraphSpacing' | 'text/pathOffset' | 'cutout/offset' | 'cutout/smoothing' | 'caption/fontSize' | 'caption/letterSpacing' | 'caption/lineHeight' | 'caption/maxAutomaticFontSize' | 'caption/minAutomaticFontSize' | 'caption/paragraphSpacing' | 'caption/pathOffset' | 'animation/slide/direction' | 'textAnimationOverlap' | 'animation/pan/direction' | 'animation/pan/distance' | 'animation/blur/intensity' | 'animation/grow/scaleFactor' | 'animation/crop_zoom/scale' | 'animation/spin/intensity' | 'animation/blur_loop/intensity' | 'animation/pulsating_loop/intensity' | 'animation/breathing_loop/intensity' | 'animation/jump_loop/intensity' | 'animation/sway_loop/intensity' | 'animation/spread_text/intensity' | 'animation/merge_text/intensity' | 'animation/ken_burns/travelDistanceRatio' | 'animation/ken_burns/zoomIntensity' | 'blur/uniform/intensity' | 'blur/linear/blurRadius' | 'blur/linear/x1' | 'blur/linear/x2' | 'blur/linear/y1' | 'blur/linear/y2' | 'blur/mirrored/blurRadius' | 'blur/mirrored/gradientSize' | 'blur/mirrored/size' | 'blur/mirrored/x1' | 'blur/mirrored/x2' | 'blur/mirrored/y1' | 'blur/mirrored/y2' | 'blur/radial/blurRadius' | 'blur/radial/gradientRadius' | 'blur/radial/radius' | 'blur/radial/x' | 'blur/radial/y' | 'effect/adjustments/blacks' | 'effect/adjustments/brightness' | 'effect/adjustments/clarity' | 'effect/adjustments/contrast' | 'effect/adjustments/exposure' | 'effect/adjustments/gamma' | 'effect/adjustments/highlights' | 'effect/adjustments/saturation' | 'effect/adjustments/shadows' | 'effect/adjustments/sharpness' | 'effect/adjustments/temperature' | 'effect/adjustments/whites' | 'effect/cross_cut/offset' | 'effect/cross_cut/slices' | 'effect/cross_cut/speedV' | 'effect/cross_cut/time' | 'effect/dot_pattern/blur' | 'effect/dot_pattern/dots' | 'effect/dot_pattern/size' | 'effect/duotone_filter/intensity' | 'effect/extrude_blur/amount' | 'effect/glow/amount' | 'effect/glow/darkness' | 'effect/glow/size' | 'effect/green_screen/colorMatch' | 'effect/green_screen/smoothness' | 'effect/green_screen/spill' | 'effect/half_tone/angle' | 'effect/half_tone/scale' | 'effect/linocut/scale' | 'effect/liquid/amount' | 'effect/liquid/scale' | 'effect/liquid/time' | 'effect/lut_filter/intensity' | 'effect/outliner/amount' | 'effect/outliner/passthrough' | 'effect/posterize/levels' | 'effect/radial_pixel/radius' | 'effect/radial_pixel/segments' | 'effect/recolor/brightnessMatch' | 'effect/recolor/colorMatch' | 'effect/recolor/smoothness' | 'effect/shifter/amount' | 'effect/shifter/angle' | 'effect/tilt_shift/amount' | 'effect/tilt_shift/position' | 'effect/tv_glitch/distortion' | 'effect/tv_glitch/distortion2' | 'effect/tv_glitch/rollSpeed' | 'effect/tv_glitch/speed' | 'effect/vignette/darkness' | 'effect/vignette/offset' | 'fill/gradient/linear/endPointX' | 'fill/gradient/linear/endPointY' | 'fill/gradient/linear/startPointX' | 'fill/gradient/linear/startPointY' | 'fill/gradient/radial/centerPointX' | 'fill/gradient/radial/centerPointY' | 'fill/gradient/radial/radius' | 'fill/gradient/conical/centerPointX' | 'fill/gradient/conical/centerPointY' | 'shape/rect/cornerRadiusBL' | 'shape/rect/cornerRadiusBR' | 'shape/rect/cornerRadiusTL' | 'shape/rect/cornerRadiusTR' | 'shape/polygon/cornerRadius' | 'shape/star/cornerRadius' | 'shape/star/innerDiameter' | 'shape/vector_path/cornerRadius' | 'shape/vector_path/height' | 'shape/vector_path/width' | (string & {});\n\n/**\n * Individual font within a typeface. Field optionality matches `@cesdk/engine`\n * (WASM) — fields not present in the engine response are simply omitted\n * rather than empty strings.\n */\nexport declare interface Font {\n uri: string;\n subFamily?: string;\n weight?: FontWeight;\n style?: FontStyle;\n}\n\n/**\n * Font metrics extracted from a font file.\n * Values are in the font's design units coordinate space.\n * @public\n */\nexport declare interface FontMetrics {\n /** The ascender value in font design units. */\n ascender: number;\n /** The descender value in font design units (typically negative). */\n descender: number;\n /** The number of units per em square (typically 1000 or 2048). */\n unitsPerEm: number;\n /** The OS/2 sTypoLineGap value in font design units. */\n lineGap: number;\n /** The OS/2 sCapHeight value in font design units. */\n capHeight: number;\n /** The OS/2 sxHeight value in font design units. */\n xHeight: number;\n /** The post.underlinePosition value in font design units (typically negative). */\n underlineOffset: number;\n /** The post.underlineThickness value in font design units. */\n underlineSize: number;\n /** The OS/2 yStrikeoutPosition value in font design units. */\n strikeoutOffset: number;\n /** The OS/2 yStrikeoutSize value in font design units. */\n strikeoutSize: number;\n}\n\n/**\n * Extended design unit type that includes Point for font size operations.\n * Maintains consistency with SceneDesignUnit's capitalized naming convention.\n * @public\n */\nexport declare type FontSizeUnit = SceneDesignUnit | 'Point';\n\n/** Allowed font styles. Mirrors the WASM `FontStyle` union. */\nexport declare type FontStyle = 'normal' | 'italic';\n\n/**\n * Allowed font weights. Mirrors the `@cesdk/engine` (WASM) `FontWeight`\n * union so a single `Font` is interchangeable across bindings.\n */\nexport declare type FontWeight = 'thin' | 'extraLight' | 'light' | 'normal' | 'medium' | 'semiBold' | 'bold' | 'extraBold' | 'heavy';\n\n/**\n * Represents a gradient color stop.\n *\n * Defines a gradient color stop with a color and a stop position.\n * - 'color': The color value.\n * - 'stop': The relative position of the color within the gradient in the range [0, 1].\n *\n * @public\n */\nexport declare interface GradientColorStop {\n /** A color value within a gradient. */\n color: Color;\n /** The relative position of the color within the gradient in the range [0, 1]. */\n stop: number;\n}\n\n/**\n * Represents a gradient stop in the RGBA color space.\n *\n * The `GradientstopRGBA` type is a tuple that contains five numbers representing the stop\n * position and the red, green, blue, and alpha components of the color.\n *\n * @categoryDescription GradientstopRGBA\n * Methods for working with gradient stops in the RGBA color space.\n *\n * @public\n */\nexport declare type GradientstopRGBA = [\nstop: number,\nr: number,\ng: number,\nb: number,\na: number\n];\n\n/** @public */\nexport declare type HeightMode = (typeof HeightModeValues)[number];\n\n/** @public */\nexport declare const HeightModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Represents a hexadecimal color value (RGB or RGBA) that starts with a '#'.\n *\n * @categoryDescription Hex Color String\n * Defines a hexadecimal color value that starts with a '#'.\n * - '#6686FF': A hexadecimal color value for RGB.\n * - '#6686FFFF': A hexadecimal color value for RGBA.\n *\n * @public\n */\nexport declare type HexColorString = string;\n\n/**\n * A numerical identifier for a history stack\n * @public\n */\nexport declare type HistoryId = number;\n\n/**\n * Describes the kind of update that triggered an `onHistoryUpdatedWithKind` callback.\n *\n * - `Updated`: The active history's snapshots changed: a new snapshot was added (e.g. after an edit), or undo/redo\n * was applied. The scene state changed as a direct consequence.\n * - `Activated`: A different history buffer was activated via `setActiveHistory`. The undo/redo stack visible to the\n * user changed, but no new snapshot was created and no undo/redo was applied as part of this event.\n *\n * @public\n */\nexport declare type HistoryUpdate = 'Updated' | 'Activated';\n\n/** @public */\nexport declare type HorizontalBlockAlignment = TextHorizontalAlignment;\n\n/** @public */\nexport declare type HorizontalContentFillAlignment = (typeof HorizontalContentFillAlignmentValues)[number];\n\n/** @public */\nexport declare const HorizontalContentFillAlignmentValues: readonly [\"Left\", \"Center\", \"Right\"];\n\n/**\n * Represents the image MIME types used in the editor.\n *\n * @categoryDescription Image MIME Type\n * Defines the possible image MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n *\n * @public\n */\nexport declare type ImageMimeType = Extract<MimeType_2, 'image/png' | 'image/jpeg' | 'image/webp' | 'image/x-tga' | 'image/svg+xml'>;\n\n/** @public */\nexport declare type IntPropertyName = 'effect/lut_filter/horizontalTileCount' | 'effect/lut_filter/verticalTileCount' | 'effect/mirror/side' | 'effect/pixelize/horizontalPixelSize' | 'effect/pixelize/verticalPixelSize' | 'shape/polygon/sides' | 'shape/star/points' | (string & {});\n\n/**\n * Type guard for {@link CMYKColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for CMYKColor.\n *\n * @public\n */\nexport declare function isCMYKColor(color: Color): color is CMYKColor;\n\n/**\n * Type guard for {@link RGBAColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for RGBAColor.\n *\n * @public\n */\nexport declare function isRGBAColor(color: Color): color is RGBAColor;\n\n/**\n * Type guard for {@link SpotColor}.\n *\n * @categoryDescription Type Guard\n * Defines a type guard for SpotColor.\n *\n * @public\n */\nexport declare function isSpotColor(color: Color): color is SpotColor;\n\n/**\n * Represents the list style of a paragraph.\n *\n * @public\n */\nexport declare type ListStyle = 'None' | 'Unordered' | 'Ordered';\n\n/**\n * e.g. `en`, `de`, etc.\n * @public\n */\nexport declare type Locale = string;\n\n/**\n * Represents a logger function.\n *\n * The Logger interface defines the structure of a logger function within the Creative Editor SDK.\n * It includes a method for logging messages with an optional log level.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n */\nexport declare interface Logger {\n (message: string, level?: LogLevel): void;\n}\n\n/**\n * Provides logging functionality for the Creative Editor SDK.\n *\n * The `Logger` interface and associated types define a standardized way to log messages\n * at different severity levels within the SDK. This allows developers to track the\n * behavior of the editor, diagnose issues, and understand the flow of operations.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n */\nexport declare type LogLevel = 'Info' | 'Warning' | 'Error';\n\n/**\n * Provides a set of predefined log levels for the Creative Editor SDK.\n *\n * The `LogLevel` object contains constants representing different severity levels\n * for logging messages. These levels can be used to categorize log messages based\n * on their importance and urgency.\n *\n * @categoryDescription Logging\n * Methods for managing logging within the editor.\n *\n * @public\n * @deprecated Specifying log levels via `LogLevel.Info` has been deprecated.\n * Please use the desired LogLevel string directly.\n */\nexport declare const LogLevel: {\n readonly Info: \"Info\";\n readonly Warning: \"Warning\";\n readonly Error: \"Error\";\n};\n\n/**\n * Represents the MIME types used in the editor.\n *\n * @categoryDescription MIME Type\n * Defines the possible MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n * @deprecated Use the `MimeType` string literal types instead.\n */\ndeclare const MimeType_2: {\n readonly Png: \"image/png\";\n readonly Jpeg: \"image/jpeg\";\n readonly WebP: \"image/webp\";\n readonly Tga: \"image/x-tga\";\n readonly Svg: \"image/svg+xml\";\n readonly Wav: \"audio/wav\";\n readonly Mp4Audio: \"audio/mp4\";\n readonly Mp4: \"video/mp4\";\n readonly QuickTime: \"video/quicktime\";\n readonly Binary: \"application/octet-stream\";\n readonly Pdf: \"application/pdf\";\n readonly Zip: \"application/zip\";\n};\n\n/**\n * Represents the MIME types used in the editor.\n *\n * @categoryDescription MIME Type\n * Defines the possible MIME types used in the editor.\n * - 'image/png': PNG image format.\n * - 'image/jpeg': JPEG image format.\n * - 'image/webp': WebP image format.\n * - 'image/x-tga': TGA image format.\n * - 'image/svg+xml': SVG image format.\n * - 'audio/wav': WAV audio format.\n * - 'audio/mp4': MP4 audio format.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n * - 'application/octet-stream': Binary data format.\n * - 'application/pdf': PDF document format.\n * - 'application/zip': ZIP archive format.\n *\n * @public\n */\ndeclare type MimeType_2 = (typeof MimeType_2)[keyof typeof MimeType_2];\nexport { MimeType_2 as MimeType }\n\n/**\n * A movement constraint rule. The scope is determined by which key is present:\n * neither (scene-wide default), `block` (per-block, includes pages), or\n * `blockType` (per-block-type).\n *\n * `overshoot` is a non-negative fraction of the moved block's own size.\n */\ndeclare type MovementConstraintRule = {\n overshoot: number;\n} | {\n overshoot: number;\n block: DesignBlockId;\n} | {\n overshoot: number;\n blockType: string;\n};\n\n/**\n * A scope descriptor used to identify an existing movement constraint for\n * removal.\n */\ndeclare type MovementConstraintScope = {\n block: DesignBlockId;\n} | {\n blockType: string;\n};\n\n/**\n * The block type IDs for all blocks types in the Creative Engine. Those are the types that can be\n * passed to `cesdk.engine.block.findByType(type)` for example.\n * Refer to {@link ObjectTypeShorthand} and {@link ObjectTypeLonghand} for more details.\n * @public\n */\nexport declare type ObjectType = ObjectTypeShorthand | ObjectTypeLonghand;\n\n/**\n * The longhand block type IDs for all blocks types in the Creative Engine. Those are the Types returned by the\n * engine when calling `cesdk.engine.block.getType(blockId)` for example.\n * @public\n */\nexport declare type ObjectTypeLonghand = DesignBlockTypeLonghand | ShapeTypeLonghand | FillTypeLonghand | EffectTypeLonghand | BlurTypeLonghand | AnimationTypeLonghand;\n\n/**\n * The shorthand block type IDs for all blocks types in the Creative Engine. Those are the types that can be\n * passed to `cesdk.engine.block.findByType(type)` for example.\n * @public\n */\nexport declare type ObjectTypeShorthand = DesignBlockTypeShorthand | `shape/${ShapeTypeShorthand}` | `fill/${FillTypeShorthand}` | `effect/${EffectTypeShorthand}` | `blur/${BlurTypeShorthand}` | `animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport declare type OptionalPrefix<T extends string> = `ubq://${T}` | T;\n\n/** @public */\nexport declare interface PageDuration {\n pageId: DesignBlockId;\n duration: number;\n start: number;\n end: number;\n}\n\n/** @public */\nexport declare type PageGuidesSource = (typeof PageGuidesSourceValues)[number];\n\n/** @public */\nexport declare const PageGuidesSourceValues: readonly [\"Document\", \"Custom\"];\n\n/**\n * Represents a color definition for the custom color palette.\n *\n * @categoryDescription Palette Color\n * Defines a color definition for the custom color palette.\n * - 'HexColorString': A hexadecimal color value.\n * - 'RGBColor': An RGB color value.\n * - 'RGBAColor': An RGBA color value.\n * - 'SpotColor': A spot color value.\n *\n * @public\n */\nexport declare type PaletteColor = HexColorString | RGBColor | RGBAColor | SpotColor;\n\n/** @public */\nexport declare type PositionMode = PositionXMode | PositionYMode;\n\n/** @public */\nexport declare type PositionXMode = (typeof PositionXModeValues)[number];\n\n/** @public */\nexport declare const PositionXModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/** @public */\nexport declare type PositionYMode = (typeof PositionYModeValues)[number];\n\n/** @public */\nexport declare const PositionYModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Represents the various types of properties that can be associated with design blocks.\n * Each type corresponds to a different kind of data that can be used to define the properties\n * of a design block within the system.\n *\n * @categoryDescription Property Types\n * Defines the different types of properties that can be used to describe design blocks.\n *\n * @public\n */\nexport declare type PropertyType = 'Bool' | 'Int' | 'Float' | 'String' | 'Color' | 'Enum' | 'Struct' | 'Double' | 'SourceSet';\n\n/**\n * An open range.\n * @public\n * */\ndeclare interface Range_2 {\n /** The starting value of the range */\n from: number;\n /** The non-inclusive ending value of the range */\n to: number;\n}\nexport { Range_2 as Range }\n\n/**\n * The effective movement constraint for a block, or `null` when no constraint\n * applies.\n */\ndeclare type ResolvedMovementConstraint = {\n overshoot: number;\n} | null;\n\n/**\n * Represents a color in the RGBA color space.\n *\n * The `RGBA` type is a tuple that contains four numbers representing the red, green,\n * blue, and alpha components of the color.\n *\n * @categoryDescription RGBA\n * Methods for working with colors in the RGBA color space.\n *\n * @public\n */\nexport declare type RGBA = [r: number, g: number, b: number, a: number];\n\n/**\n * Represents an RGBA color value.\n *\n * Defines an RGBA color value with components between 0 and 1.\n * - 'r': The red component.\n * - 'g': The green component.\n * - 'b': The blue component.\n * - 'a': The alpha component.\n *\n * @public\n */\nexport declare interface RGBAColor {\n /** Red */\n r: number;\n /** Green */\n g: number;\n /** Blue */\n b: number;\n /** Alpha */\n a: number;\n}\n\n/**\n * Represents an RGB color value.\n *\n * Defines an RGB color value with components between 0 and 1.\n * - 'r': The red component.\n * - 'g': The green component.\n * - 'b': The blue component.\n *\n * @public\n */\nexport declare interface RGBColor {\n /** Red */\n r: number;\n /** Green */\n g: number;\n /** Blue */\n b: number;\n}\n\n/**\n * Represents a role string.\n *\n * The RoleString type defines the possible roles within the Creative Editor SDK.\n * Each role corresponds to a different level of access and permissions, allowing for flexibility in how users are managed.\n *\n * @categoryDescription Roles\n * Methods for managing roles within the editor.\n *\n * @public\n */\nexport declare type RoleString = 'Creator' | 'Adopter' | 'Viewer' | 'Presenter';\n\n/**\n * Options for saveSceneToString operation.\n * @public\n */\ndeclare interface SaveToStringOptions {\n /**\n * List of resource URL schemes that are allowed in the serialized scene.\n * Resources with other schemes will trigger the persistence callback.\n */\n resourceSchemesAllowed?: string[];\n /**\n * Optional callback for persisting resources with disallowed schemes.\n */\n persistenceCallback?: (url: string, dataHash: string, persistedCallback?: {\n invoke(url: string, persistedUrl: string): void;\n }) => void;\n /**\n * Compression options for the serialized scene.\n * When compression is enabled, base64 encoding is skipped and raw binary data is returned.\n */\n compression?: {\n /** Compression format (None = no compression, Zstd = zstd compression) */\n format?: CompressionFormat_2;\n /** Compression level (Fastest, Default, Best) */\n level?: CompressionLevel;\n };\n}\n\n/**\n * @public Create, load, save, and manipulate scenes.\n *\n * Scenes are the root element of every design hierarchy. Their children, stacks of pages, individual pages or other blocks, define the content of the design.\n * Scenes can be created from scratch, loaded from a file or URL, or created from an image or video. After manipulation, they can be saved to a string or an archive. This allows further processing in another editor instance, automated processing in scripts or sharing with other users.\n *\n * @categoryDescription Scene Loading\n * Load scenes from various sources including strings, URLs, and archives.\n *\n * @categoryDescription Scene Saving\n * Save and export scenes to different formats.\n *\n * @categoryDescription Scene Creation\n * Create new scenes from scratch or from media files.\n *\n * @categoryDescription Scene Properties\n * Get and set scene properties like design units and mode.\n *\n * @categoryDescription Template Operations\n * Apply templates to existing scenes.\n *\n * @categoryDescription Page Management\n * Manage pages within scenes and find elements.\n *\n * @categoryDescription Camera & Zoom\n * Control camera position, zoom levels, and auto-fit behavior.\n *\n * @categoryDescription Event Subscriptions\n * Subscribe to scene-related events and changes.\n *\n * @categoryDescription Experimental Features\n * Experimental features that may change or be removed in future versions.\n */\nexport declare class SceneAPI {\n #private;\n\n /**\n * Load the contents of a scene file.\n *\n * The string must be the binary contents of a scene file and is directly imported as blocks. Any existing scene is replaced by the new one.\n * This is useful for loading scenes that were saved with `saveToString` or scenes that were created in another editor instance.\n *\n * ```javascript\n * const sceneContent = await creativeEngine.scene.saveToString();\n * creativeEngine.scene.loadFromString(sceneContent);\n * ```\n *\n * @category Scene Loading\n * @param sceneContent - The scene file contents, a base64 string.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns A handle to the loaded scene.\n */\n loadFromString(sceneContent: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Load a scene from the URL to the scene file.\n *\n * The scene file will be fetched asynchronously by the engine and loaded into the engine once it is available. Any existing scene is replaced by the new one.\n *\n * ```javascript\n * const sceneURL = 'https://example.com/my-scene.json';\n * creativeEngine.scene.loadFromURL(sceneURL);\n * ```\n *\n * @category Scene Loading\n * @param url - The URL of the scene file.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns scene A promise that resolves once the scene was loaded or rejects with an error otherwise.\n */\n loadFromURL(url: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Load a previously archived scene from the URL to the scene file.\n *\n * The scene file will be fetched asynchronously by the engine. This requires continuous `render`\n * calls on this engines instance.\n *\n * @category Scene Loading\n * @param url - The URL of the scene archive file.\n * @param overrideEditorConfig - Whether to override editor configuration with settings and data from the scene file. Defaults to false.\n * @param waitForResources - Whether to wait for all resources to finish loading before resolving. Defaults to false.\n * @returns scene A promise that resolves once the scene was loaded or rejects with an error otherwise.\n */\n loadFromArchiveURL(url: string, overrideEditorConfig?: boolean, waitForResources?: boolean): Promise<DesignBlockId>;\n /**\n * Serializes the current scene into a string. Selection is discarded.\n *\n * @category Scene Saving\n * @param allowedResourceSchemes - The resource schemes to allow in the saved string.\n * @param onDisallowedResourceScheme - An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * @returns A promise that resolves with a string on success or an error on failure.\n * @deprecated Use saveToString(options) instead for better extensibility and to access compression features.\n */\n saveToString(allowedResourceSchemes: string[], onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>): Promise<string>;\n /**\n * Serializes the current scene into a string. Selection is discarded.\n *\n * @category Scene Saving\n * @param options - Save options containing:\n * - allowedResourceSchemes: The resource schemes to allow in the saved string. Defaults to ['blob', 'bundle', 'file', 'http', 'https', 'opfs'].\n * - onDisallowedResourceScheme: An optional callback that is called for each resource URL that has a scheme absent from\n * `resourceSchemesAllowed`. The `url` parameter is the resource URL and the `dataHash` parameter is the hash of the\n * resource's data. The callback should return a new URL for the resource, which will be used in the serialized\n * scene. The callback is expected to return the original URL if no persistence is needed.\n * - compression: Optional compression settings containing:\n * - format: Compression format (None or Zstd). Defaults to None.\n * - level: Compression level (Fastest, Default, or Best). Defaults to Default.\n * @returns A promise that resolves with a string on success or an error on failure.\n */\n saveToString(options?: {\n allowedResourceSchemes?: string[];\n onDisallowedResourceScheme?: (url: string, dataHash: string) => Promise<string>;\n compression?: {\n format?: CompressionFormat_2;\n level?: CompressionLevel;\n };\n }): Promise<string>;\n /**\n * Saves the current scene and all of its referenced assets into an archive.\n *\n * The archive contains all assets, that were accessible when this function was called.\n * Blocks in the archived scene reference assets relative from to the location of the scene\n * file. These references are resolved when loading such a scene via `loadSceneFromURL`.\n *\n * @category Scene Saving\n * @returns A promise that resolves with a Blob on success or an error on failure.\n */\n saveToArchive(): Promise<Blob>;\n /**\n * Create a new design scene, along with its own camera.\n *\n * ```javascript\n * const scene = engine.scene.create(layout);\n * // With a specific design unit and auto-paired font-size unit:\n * const pxScene = engine.scene.create('Free', { designUnit: 'Pixel' });\n * ```\n *\n * @category Scene Creation\n * @param sceneLayout - The layout of the scene.\n * @param options - Optional parameters for the scene. Properties:\n * - `page` - Page options. Properties:\n * - `size` - The size of the page.\n * - `color` - Optional background color of the page.\n * - `designUnit` - The design unit of the new scene. Defaults to `Pixel`.\n * - `fontSizeUnit` - The font-size unit. If omitted, paired with `designUnit`\n * (`Pixel` design unit → `Pixel` font unit, others → `Point`).\n * @returns The scene's handle.\n */\n create(sceneLayout?: SceneLayout, options?: CreateSceneOptions): DesignBlockId;\n /**\n * Create a new scene in video mode, along with its own camera.\n *\n * @deprecated Scene mode no longer affects engine behavior. Use `create()` followed by `setMode('Video')` instead.\n *\n * ```javascript\n * const scene = engine.scene.createVideo();\n * ```\n *\n * @category Scene Creation\n * @param options - Optional parameters for the scene. Properties:\n * - `page` - Page options. Properties:\n * - `size` - The size of the page.\n * - `color` - Optional background color of the page.\n * @returns The scene's handle.\n */\n createVideo(options?: CreateSceneOptions): DesignBlockId;\n /**\n * Loads the given image and creates a scene with a single page showing the image.\n *\n * Fetching the image may take an arbitrary amount of time, so the scene isn't immediately available.\n *\n * ```javascript\n * const scene = await engine.scene.createFromImage('https://img.ly/static/ubq_samples/sample_4.jpg');\n * ```\n *\n * @category Scene Creation\n * @param url - The image URL.\n * @param dpi - The scene's DPI.\n * @param pixelScaleFactor - The display's pixel scale factor.\n * @returns A promise that resolves with the scene ID on success or rejected with an error otherwise.\n */\n createFromImage(url: string, dpi?: number, pixelScaleFactor?: number, sceneLayout?: SceneLayout, spacing?: number, spacingInScreenSpace?: boolean): Promise<DesignBlockId>;\n /**\n * Loads the given video and creates a scene with a single page showing the video.\n *\n * Fetching the video may take an arbitrary amount of time, so the scene isn't immediately\n * available.\n *\n * ```javascript\n * const scene = await engine.scene.createFromVideo('https://img.ly/static/ubq_video_samples/bbb.mp4');\n * ```\n *\n * @category Scene Creation\n * @param url - The video URL.\n * @returns A promise that resolves with the scene ID on success or rejected with an error otherwise.\n */\n createFromVideo(url: string): Promise<DesignBlockId>;\n /**\n * Return the currently active scene.\n *\n * ```javascript\n * const scene = engine.scene.get();\n * ```\n *\n * @category Scene Properties\n * @returns The scene or null, if none was created yet.\n */\n get(): DesignBlockId | null;\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n *\n * This loads the template scene while keeping the design unit and page dimensions\n * of the current scene. The content of the pages is automatically adjusted to fit\n * the new dimensions.\n *\n *\n * ```javascript\n * engine.scene.applyTemplateFromString(\"UBQ1ewoiZm9ybWF0Ij...\");\n * ```\n *\n * @category Template Operations\n * @param content - The template scene file contents, a base64 string.\n * @returns A Promise that resolves once the template was applied or rejects if there was an error.\n */\n applyTemplateFromString(content: string): Promise<void>;\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n *\n * This loads the template scene while keeping the design unit and page dimensions\n * of the current scene. The content of the pages is automatically adjusted to fit\n * the new dimensions.\n *\n * ```javascript\n * engine.scene.applyTemplateFromURL('https://cdn.img.ly/assets/demo/v4/ly.img.template/templates/cesdk_postcard_1.scene');\n * ```\n *\n * @category Template Operations\n * @param url - The url to the template scene file.\n * @returns A Promise that resolves once the template was applied or rejects if there was an error.\n */\n applyTemplateFromURL(url: string): Promise<void>;\n /**\n * Get the current scene mode.\n *\n * @deprecated Scene mode no longer affects engine behavior. All features work regardless of mode.\n *\n * ```javascript\n * const mode = scene.getMode();\n * ```\n *\n * @category Scene Properties\n * @returns The current mode of the scene, or null if no mode has been set.\n */\n getMode(): SceneMode | null;\n /**\n * Set the mode of the scene.\n *\n * @deprecated Scene mode no longer affects engine behavior. All features work regardless of mode.\n *\n * ```javascript\n * engine.scene.setMode('Video');\n * ```\n *\n * @category Scene Properties\n * @param mode - The new mode for the scene.\n */\n setMode(mode: SceneMode): void;\n /**\n * Converts all values of the current scene into the given design unit.\n *\n * ```javascript\n * engine.scene.setDesignUnit('Pixel');\n * ```\n *\n * @category Scene Properties\n * @param designUnit - The new design unit of the scene\n */\n setDesignUnit(designUnit: SceneDesignUnit): void;\n /**\n * Returns the design unit of the current scene.\n *\n * ```javascript\n * engine.scene.getDesignUnit();\n * ```\n *\n * @category Scene Properties\n * @returns The current design unit.\n */\n getDesignUnit(): SceneDesignUnit;\n /**\n * Sets the unit in which font sizes for `setTextFontSize` and `getTextFontSizes` are interpreted.\n * The engine continues to store font sizes in points internally; this only affects how values\n * are interpreted at the API boundary when callers don't specify a `unit` in `TextFontSizeOptions`.\n *\n * ```javascript\n * engine.scene.setFontSizeUnit('Pixel');\n * ```\n *\n * @category Scene Properties\n * @param fontSizeUnit - The new font-size unit of the scene.\n */\n setFontSizeUnit(fontSizeUnit: SceneFontSizeUnit): void;\n /**\n * Returns the font-size unit of the current scene.\n *\n * ```javascript\n * engine.scene.getFontSizeUnit();\n * ```\n *\n * @category Scene Properties\n * @returns The current font-size unit.\n */\n getFontSizeUnit(): SceneFontSizeUnit;\n /**\n * Get the layout of the current scene.\n *\n * ```javascript\n * const layout = engine.scene.getLayout();\n * ```\n *\n * @category Scene Properties\n * @returns The current layout of the scene.\n */\n getLayout(): SceneLayout;\n /**\n * Set the layout of the current scene.\n * This will handle all necessary conversions including creating or destroying stack blocks\n * and reparenting pages as needed.\n *\n * When transitioning from stack layouts (VerticalStack, HorizontalStack, DepthStack) to Free layout,\n * the global positions of pages are preserved to maintain their visual appearance in the scene.\n *\n * ```javascript\n * engine.scene.setLayout('VerticalStack');\n * ```\n *\n * @category Scene Properties\n * @param layout - The new layout for the scene.\n */\n setLayout(layout: SceneLayout): void;\n /**\n * Get the sorted list of pages in the scene.\n *\n * ```javascript\n * const pages = engine.scene.getPages();\n * ```\n *\n * @category Page Management\n * @returns The sorted list of pages in the scene.\n */\n getPages(): DesignBlockId[];\n /**\n * Get the current page, i.e., the page of the first selected element if this page\n * is at least 25% visible or, otherwise, the page nearest to the viewport center.\n *\n * ```javascript\n * const currentPage = engine.scene.getCurrentPage();\n * ```\n *\n * @category Page Management\n * @returns The current page in the scene or null.\n */\n getCurrentPage(): DesignBlockId | null;\n /**\n * Find all blocks with the given type sorted by the distance to viewport center.\n *\n * ```javascript\n * // Use longhand block type ID to find nearest pages.\n * let nearestPageByType = engine.scene.findNearestToViewPortCenterByType('//ly.img.ubq/page')[0];\n * // Or use shorthand block type ID.\n * nearestPageByType = engine.scene.findNearestToViewPortCenterByType('page')[0];\n * ```\n *\n * @category Page Management\n * @param type - The type to search for.\n * @returns A list of block ids sorted by distance to viewport center.\n */\n findNearestToViewPortCenterByType(type: DesignBlockType): DesignBlockId[];\n /**\n * Find all blocks with the given kind sorted by the distance to viewport center.\n *\n * ```javascript\n * let nearestImageByKind = engine.scene.findNearestToViewPortCenterByKind('image')[0];\n * ```\n *\n * @category Page Management\n * @param kind - The kind to search for.\n * @returns A list of block ids sorted by distance to viewport center.\n */\n findNearestToViewPortCenterByKind(kind: string): DesignBlockId[];\n /**\n * Set the zoom level of the scene, e.g., for headless versions.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Setting a zoom level of 2.0f results in one dot in the design to be two pixels on the screen.\n *\n * ```javascript\n * // Zoom to 100%\n * engine.scene.setZoomLevel(1.0);\n *\n * // Zoom to 50%\n * engine.scene.setZoomLevel(0.5 * engine.scene.getZoomLevel());\n * ```\n *\n * @category Camera & Zoom\n * @param zoomLevel - The new zoom level.\n */\n setZoomLevel(zoomLevel?: number): void;\n /**\n * Get the zoom level of the scene or for a camera in the scene in unit `dpx/dot`. A zoom level of 2.0 results in one pixel in the design to be two pixels\n * on the screen.\n *\n * ```javascript\n * const zoomLevel = engine.scene.getZoomLevel();\n * ```\n *\n * @category Camera & Zoom\n * @returns The zoom level of the block's camera.\n */\n getZoomLevel(): number;\n /**\n * Sets the zoom and focus to show a block, optionally with animation.\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n *\n * @param id - The block that should be focused on.\n * @param options - Configuration for padding and animation.\n * @returns A promise that resolves once the zoom was set or rejects with an error otherwise.\n */\n zoomToBlock(id: DesignBlockId, options?: ZoomOptions): Promise<void>;\n /**\n * Sets the zoom and focus to show a block.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n *\n * ```javascript\n * // Bring entire scene in view with padding of 20px in all directions\n * engine.scene.zoomToBlock(scene, 20.0, 20.0, 20.0, 20.0);\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block that should be focused on.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n * @returns A promise that resolves once the zoom was set or rejects with an error otherwise.\n * @deprecated Use zoomToBlock with options object instead\n */\n zoomToBlock(id: DesignBlockId, paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): Promise<void>;\n /**\n * Continually adjusts the zoom level to fit the width or height of a block's axis-aligned bounding box.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n * No more than one block per scene can have zoom auto-fit enabled.\n * Calling `setZoomLevel` or `zoomToBlock` disables the continuous adjustment.\n *\n * ```javascript\n * // Follow page with padding of 20px horizontally before and after the block\n * engine.scene.enableZoomAutoFit(page, 'Horizontal', 20, 20)\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block for which the zoom is adjusted.\n * @param axis - The block axis for which the zoom is adjusted.\n * @param paddingBefore - Optional padding in screen pixels before the block.\n * @param paddingAfter - Optional padding in screen pixels after the block.\n */\n enableZoomAutoFit(id: DesignBlockId, axis: 'Horizontal' | 'Vertical', paddingBefore?: number, paddingAfter?: number): void;\n /**\n * Continually adjusts the zoom level to fit the width or height of a block's axis-aligned bounding box.\n *\n * This only shows an effect if the zoom level is not handled/overwritten by the UI.\n * Without padding, this results in a tight view on the block.\n * Calling `setZoomLevel` or `zoomToBlock` disables the continuous adjustment.\n *\n * ```javascript\n * // Follow page with padding of 20px in both directions\n * engine.scene.enableZoomAutoFit(page, 'Both', 20.0, 20.0, 20.0, 20.0);\n * ```\n *\n * @category Camera & Zoom\n * @param id - The block for which the zoom is adjusted.\n * @param axis - The block axis for which the zoom is adjusted.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n */\n enableZoomAutoFit(id: DesignBlockId, axis: 'Both', paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): void;\n /**\n * Disables any previously set zoom auto-fit.\n *\n * ```javascript\n * engine.scene.disableZoomAutoFit(scene);\n * ```\n *\n * @category Camera & Zoom\n * @param blockOrScene - The scene or a block in the scene for which to disable zoom auto-fit.\n */\n disableZoomAutoFit(blockOrScene: DesignBlockId): void;\n /**\n * Queries whether zoom auto-fit is enabled for the given block.\n *\n * ```javascript\n * engine.scene.isZoomAutoFitEnabled(scene);\n * ```\n *\n * @category Camera & Zoom\n * @param blockOrScene - The scene or a block in the scene for which to query the zoom auto-fit.\n * @returns True if the given block has auto-fit set or the scene contains a block for which auto-fit is set, false\n * otherwise.\n */\n isZoomAutoFitEnabled(blockOrScene: DesignBlockId): boolean;\n /**\n * Continually ensures the camera position to be within the width and height of the blocks axis-aligned bounding box.\n * Disables any previously set camera position clamping in the scene and also takes priority over clamp camera commands.\n *\n * ```javascript\n * // Keep the scene with padding of 10px within the camera\n * engine.scene.unstable_enableCameraPositionClamping([scene], 10.0, 10.0, 10.0, 10.0, 0.0, 0.0, 0.0, 0.0);\n * ```\n *\n * Without padding, this results in a tight clamp on the block. With padding, the padded part of the\n * blocks is ensured to be visible.\n *\n * @category Experimental Features\n * @param ids - The blocks to which the camera position is adjusted to, usually, the scene or a page.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block.\n * @param paddingTop - Optional padding in screen pixels to the top of the block.\n * @param paddingRight - Optional padding in screen pixels to the right of the block.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block.\n * @param scaledPaddingLeft - Optional padding in screen pixels to the left of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingTop - Optional padding in screen pixels to the top of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingRight - Optional padding in screen pixels to the right of the block that scales with the zoom level until five times the initial value.\n * @param scaledPaddingBottom - Optional padding in screen pixels to the bottom of the block that scales with the zoom level until five times the initial value.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_enableCameraPositionClamping(ids: DesignBlockId[], paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number, scaledPaddingLeft?: number, scaledPaddingTop?: number, scaledPaddingRight?: number, scaledPaddingBottom?: number): void;\n /**\n * Disables any previously set position clamping for the current scene.\n *\n * ```javascript\n * engine.scene.unstable_disableCameraPositionClamping();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block in the scene for which to query the position clamping.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_disableCameraPositionClamping(blockOrScene?: number | null): void;\n /**\n * Queries whether position clamping is enabled.\n *\n * ```javascript\n * engine.scene.unstable_isCameraPositionClampingEnabled();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block in the scene for which to query the position clamping.\n * @returns True if the given block has position clamping set or the scene contains a block for which position clamping is set, false\n * otherwise.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isCameraPositionClampingEnabled(blockOrScene?: number | null): boolean;\n /**\n * Continually ensures the zoom level of the camera in the active scene to be in the given range.\n *\n * ```javascript\n * // Allow zooming from 12.5% to 800% relative to the size of a page\n * engine.scene.unstable_enableCameraZoomClamping([page], 0.125, 8.0, 0.0, 0.0, 0.0, 0.0);\n * ```\n * @category Experimental Features\n * @param ids - The blocks to which the camera zoom limits are adjusted to, usually, the scene or a page.\n * @param minZoomLimit - The minimum zoom level limit when zooming out, unlimited when negative.\n * @param maxZoomLimit - The maximum zoom level limit when zooming in, unlimited when negative.\n * @param paddingLeft - Optional padding in screen pixels to the left of the block. Only applied when the block is not a camera.\n * @param paddingTop - Optional padding in screen pixels to the top of the block. Only applied when the block is not a camera.\n * @param paddingRight - Optional padding in screen pixels to the right of the block. Only applied when the block is not a camera.\n * @param paddingBottom - Optional padding in screen pixels to the bottom of the block. Only applied when the block is not a camera.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_enableCameraZoomClamping(ids: DesignBlockId[], minZoomLimit?: number, maxZoomLimit?: number, paddingLeft?: number, paddingTop?: number, paddingRight?: number, paddingBottom?: number): void;\n /**\n * Disables any previously set zoom clamping for the current scene.\n *\n * ```javascript\n * engine.scene.unstable_disableCameraZoomClamping();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block for which to query the zoom clamping.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_disableCameraZoomClamping(blockOrScene?: number | null): void;\n /**\n * Queries whether zoom clamping is enabled.\n *\n * ```javascript\n * engine.scene.unstable_isCameraZoomClampingEnabled();\n * ```\n *\n * @category Experimental Features\n * @param blockOrScene - Optionally, the scene or a block for which to query the zoom clamping.\n * @returns True if the given block has zoom clamping set or the scene contains a block for which zoom clamping is set, false otherwise.\n * @experimental This API is experimental and may change or be removed in future versions.\n */\n unstable_isCameraZoomClampingEnabled(blockOrScene?: number | null): boolean;\n /**\n * Subscribe to changes to the zoom level.\n *\n * ```javascript\n * const unsubscribeZoomLevelChanged = engine.scene.onZoomLevelChanged(() => {\n * const zoomLevel = engine.scene.getZoomLevel();\n * console.log('Zoom level is now: ', zoomLevel);\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - This function is called at the end of the engine update, if the zoom level has changed.\n * @returns A method to unsubscribe.\n * @privateRemarks This will currently fire on _all_ changes to camera properties\n */\n onZoomLevelChanged: (callback: () => void) => (() => void);\n /**\n * Subscribe to changes to the active scene rendered by the engine.\n *\n * ```javascript\n * const unsubscribe = engine.scene.onActiveChanged(() => {\n * const newActiveScene = engine.scene.get();\n * });\n * ```\n *\n * @category Event Subscriptions\n * @param callback - This function is called at the end of the engine update, if the active scene has changed.\n * @returns A method to unsubscribe.\n */\n onActiveChanged: (callback: () => void) => (() => void);\n /**\n * Starts or stops playback of the current scene.\n * Only works in Video mode, not in Design mode.\n *\n * @param play - True to start playback, false to stop\n * @throws Error if no page is available for playback\n */\n setPlaying(play: boolean): void;\n}\n\n/** @public */\ndeclare type SceneDesignUnit = (typeof SceneDesignUnitValues)[number];\nexport { SceneDesignUnit as DesignUnit }\nexport { SceneDesignUnit }\n\n/** @public */\nexport declare const SceneDesignUnitValues: readonly [\"Pixel\", \"Millimeter\", \"Inch\"];\n\n/** @public */\nexport declare type SceneFontSizeUnit = (typeof SceneFontSizeUnitValues)[number];\n\n/** @public */\nexport declare const SceneFontSizeUnitValues: readonly [\"Pixel\", \"Point\"];\n\n/** @public */\nexport declare type SceneLayout = (typeof SceneLayoutValues)[number];\n\n/** @public */\nexport declare const SceneLayoutValues: readonly [\"Free\", \"VerticalStack\", \"HorizontalStack\", \"DepthStack\"];\n\n/** @public */\nexport declare type SceneMode = (typeof SceneModeValues)[number];\n\n/** @public */\nexport declare const SceneModeValues: readonly [\"Design\", \"Video\"];\n\n/**\n * @public\n * Represents the various scopes that define the capabilities and permissions\n * within the Creative Editor SDK. Each scope corresponds to a specific\n * functionality or action that can be performed within the editor.\n *\n * The `Scope` type is used to control access to different features and operations,\n * allowing for fine-grained control over what actions are permitted.\n *\n * @categoryDescription Scopes\n * Defines the various scopes that control the capabilities and permissions\n * within the Creative Editor SDK.\n *\n * @public\n */\nexport declare type Scope = 'text/edit' | 'text/character' | 'fill/change' | 'fill/changeType' | 'stroke/change' | 'shape/change' | 'layer/move' | 'layer/resize' | 'layer/rotate' | 'layer/flip' | 'layer/crop' | 'layer/opacity' | 'layer/blendMode' | 'layer/visibility' | 'layer/clipping' | 'appearance/adjustments' | 'appearance/filter' | 'appearance/effect' | 'appearance/blur' | 'appearance/shadow' | 'appearance/animation' | 'lifecycle/destroy' | 'lifecycle/duplicate' | 'editor/add' | 'editor/select';\n\n/** @public */\nexport declare type SettingBoolPropertyName = 'doubleClickToCropEnabled' | 'showBuildVersion' | 'placeholderControls/showButton' | 'placeholderControls/showOverlay' | 'blockAnimations/enabled' | 'playback/showAllBlocks' | 'grid/enabled' | 'grid/snapEnabled' | 'archival/bundleOnlyUsedFontVariants' | 'touch/dragStartCanSelect' | 'touch/singlePointPanning' | 'mouse/enableZoom' | 'mouse/enableScroll' | 'controlGizmo/showCropHandles' | 'controlGizmo/showMoveHandles' | 'controlGizmo/dynamicMoveHandleVisibility' | 'controlGizmo/showResizeHandles' | 'controlGizmo/showScaleHandles' | 'controlGizmo/showRotateHandles' | 'controlGizmo/showCropScaleHandles' | 'page/title/show' | 'page/title/showPageTitleTemplate' | 'page/title/appendPageName' | 'page/title/showOnSinglePage' | 'page/title/canEdit' | 'page/dimOutOfPageAreas' | 'page/allowCropInteraction' | 'page/allowResizeInteraction' | 'page/restrictResizeInteractionToFixedAspectRatio' | 'page/allowRotateInteraction' | 'page/allowMoveInteraction' | 'page/marqueeSelectOnBodyDrag' | 'page/restrictPageSelectionToBorderAndTitle' | 'page/moveChildrenWhenCroppingFill' | 'page/selectWhenNoBlocksSelected' | 'page/highlightWhenCropping' | 'page/allowShapeChange' | 'page/highlightDropTarget' | 'page/reparentBlocksToSceneWhenOutOfPage' | 'page/flipDimensionsOn90DegreeCropRotation' | 'clampThumbnailTextureSizes' | 'useSystemFontFallback' | 'forceSystemEmojis' | (string & {});\n\n/** @public */\nexport declare type SettingColorPropertyName = 'clearColor' | 'handleFillColor' | 'highlightColor' | 'pageHighlightColor' | 'placeholderHighlightColor' | 'snappingGuideColor' | 'rotationSnappingGuideColor' | 'cropOverlayColor' | 'textVariableHighlightColor' | 'borderOutlineColor' | 'progressColor' | 'errorStateColor' | 'grid/color' | 'page/title/color' | 'page/marginFillColor' | 'page/marginFrameColor' | 'page/innerBorderColor' | 'page/outerBorderColor' | 'colorMaskingSettings/maskColor' | (string & {});\n\n/** @public */\nexport declare type SettingEnumPropertyName = 'touch/pinchAction' | 'touch/rotateAction' | 'camera/clamping/overshootMode' | 'controlGizmo/moveHandleVisibility' | 'controlGizmo/resizeHandlesVisibility' | 'controlGizmo/scaleHandlesVisibility' | 'controlGizmo/rotateHandlesVisibility' | 'doubleClickSelectionMode' | 'colorPicker/colorMode' | 'timeline/trackVisibility' | (string & {});\n\n/** @public */\nexport declare type SettingEnumType = {\n 'touch/pinchAction': TouchPinchAction;\n 'touch/rotateAction': TouchRotateAction;\n 'camera/clamping/overshootMode': CameraClampingOvershootMode;\n 'controlGizmo/moveHandleVisibility': ControlGizmoMoveHandleVisibility;\n 'controlGizmo/resizeHandlesVisibility': ControlGizmoResizeHandlesVisibility;\n 'controlGizmo/scaleHandlesVisibility': ControlGizmoScaleHandlesVisibility;\n 'controlGizmo/rotateHandlesVisibility': ControlGizmoRotateHandlesVisibility;\n doubleClickSelectionMode: DoubleClickSelectionMode;\n 'colorPicker/colorMode': ColorPickerColorMode;\n 'timeline/trackVisibility': TimelineTrackVisibility;\n};\n\n/** @public */\nexport declare type SettingEnumValues = TouchPinchAction | TouchRotateAction | CameraClampingOvershootMode | ControlGizmoMoveHandleVisibility | ControlGizmoResizeHandlesVisibility | ControlGizmoScaleHandlesVisibility | ControlGizmoRotateHandlesVisibility | DoubleClickSelectionMode | ColorPickerColorMode | TimelineTrackVisibility | (string & {});\n\n/** @public */\nexport declare type SettingFloatPropertyName = 'positionSnappingThreshold' | 'rotationSnappingThreshold' | 'grid/spacingX' | 'grid/spacingY' | 'controlGizmo/blockScaleDownLimit' | 'listIndentPerLevel' | (string & {});\n\n/** @public */\nexport declare type SettingIntPropertyName = 'maxImageSize' | 'maxPreviewResolution' | (string & {});\n\n/**\n * Union type of all valid setting keys.\n * @public\n */\nexport declare type SettingKey = keyof Settings;\n\n/**\n * Map of all available settings with their types.\n * This provides type-safe access to all editor settings.\n *\n * The settings are organized by type:\n * - Boolean settings control various on/off features in the editor\n * - String settings configure paths and textual values\n * - Float settings define numerical thresholds and limits\n * - Integer settings specify whole number limits\n * - Color settings control the visual appearance\n * - Enum settings provide predefined choice options\n *\n * @public\n */\nexport declare interface Settings {\n /** Whether to show handles for adjusting the crop area during crop mode. */\n 'controlGizmo/showCropHandles': boolean;\n /** Whether to display the outer handles that scale the full image during crop. */\n 'controlGizmo/showCropScaleHandles': boolean;\n /** @deprecated Use `controlGizmo/moveHandleVisibility`. `false` hides the move handle. */\n 'controlGizmo/showMoveHandles': boolean;\n /** @deprecated Use `controlGizmo/moveHandleVisibility`. `false` shows the move handle at any block size. */\n 'controlGizmo/dynamicMoveHandleVisibility': boolean;\n /** @deprecated Use `controlGizmo/resizeHandlesVisibility`. `false` hides the edge (resize) handles. */\n 'controlGizmo/showResizeHandles': boolean;\n /** @deprecated Use `controlGizmo/rotateHandlesVisibility`. `false` hides the rotation handle. */\n 'controlGizmo/showRotateHandles': boolean;\n /** @deprecated Use `controlGizmo/scaleHandlesVisibility`. `false` hides the corner (scale) handles. */\n 'controlGizmo/showScaleHandles': boolean;\n /** Enable double-click to enter crop mode. */\n doubleClickToCropEnabled: boolean;\n /** Enable single page mode where only one page is shown at a time. */\n 'features/singlePageModeEnabled': boolean;\n /** Enable file system usage, that allows the engine to use the file system to store files for local uploads. */\n 'features/fileSystemUsageEnabled': boolean;\n /** Enable the page carousel for navigating between pages. */\n 'features/pageCarouselEnabled': boolean;\n /** Whether transform edits should retain the cover mode of the content. */\n 'features/transformEditsRetainCoverMode': boolean;\n /** Whether auto-sized text blocks should be clamped to page boundaries during editing. */\n 'features/clampTextBlockWidthToPageDimensionsDuringEditing': boolean;\n /** Whether the engine processes mouse scroll events. */\n 'mouse/enableScroll': boolean;\n /** Whether the engine processes mouse zoom events. */\n 'mouse/enableZoom': boolean;\n /** Whether crop interaction (by handles and gestures) should be possible. */\n 'page/allowCropInteraction': boolean;\n /** Whether move interaction should be possible when page layout is not controlled by the scene. */\n 'page/allowMoveInteraction': boolean;\n /** When enabled, a click+drag that starts on the page body performs a marquee selection of the blocks\n * inside the page instead of moving the page. The page can still be moved by dragging its title\n * (when visible in free layout) or by holding the command key (macOS) / control key (Windows/Linux)\n * while clicking and dragging on the page body. Has no effect when the page is not movable\n * (see `page/allowMoveInteraction` and scene layout constraints). */\n 'page/marqueeSelectOnBodyDrag': boolean;\n /** When enabled, the page can only be selected by clicking on its title (when shown in free layout)\n * or near its border. Clicks inside the page body no longer select the page; the click falls\n * through to whatever block sits underneath. Independent of `page/marqueeSelectOnBodyDrag`. */\n 'page/restrictPageSelectionToBorderAndTitle': boolean;\n /** Whether resize interaction (by handles and gestures) should be possible. */\n 'page/allowResizeInteraction': boolean;\n /** Whether rotation interaction should be possible when page layout is not controlled by the scene. */\n 'page/allowRotateInteraction': boolean;\n /** Whether pages support non-rectangular shapes. When false, supportsShape returns false for pages. */\n 'page/allowShapeChange': boolean;\n /** Whether the opacity of the region outside of all pages should be reduced. */\n 'page/dimOutOfPageAreas': boolean;\n /** Whether resize interaction should be restricted to fixed aspect ratio. */\n 'page/restrictResizeInteractionToFixedAspectRatio': boolean;\n /** Whether children of the page should be transformed to match their old position when cropping. */\n 'page/moveChildrenWhenCroppingFill': boolean;\n /** Whether to append the page name to the title even if not specified in the template. */\n 'page/title/appendPageName': boolean;\n /** Whether double-clicking a page title enters text edit mode to rename the page. */\n 'page/title/canEdit': boolean;\n /** Whether to show titles above each page. */\n 'page/title/show': boolean;\n /** Whether to hide the page title when only a single page exists. */\n 'page/title/showOnSinglePage': boolean;\n /** Whether to include the default page title from page.titleTemplate. */\n 'page/title/showPageTitleTemplate': boolean;\n /** Whether to show the placeholder button. */\n 'placeholderControls/showButton': boolean;\n /** Whether to show the overlay pattern for placeholders. */\n 'placeholderControls/showOverlay': boolean;\n /** Whether animations should be enabled or not. */\n 'blockAnimations/enabled': boolean;\n /**\n * When enabled, every block stays visible regardless of the current playback time, instead of being\n * culled outside its time offset/duration. No effect on export.\n */\n 'playback/showAllBlocks': boolean;\n /** Whether the background grid is shown on pages. */\n 'grid/enabled': boolean;\n /** Whether elements should snap to grid lines when dragged. */\n 'grid/snapEnabled': boolean;\n /** Whether to display the build version in the UI. */\n showBuildVersion: boolean;\n /** Whether drag start can select elements. */\n 'touch/dragStartCanSelect': boolean;\n /** Whether single-point panning is enabled for touch interactions. */\n 'touch/singlePointPanning': boolean;\n /** Whether to use system font as fallback for missing glyphs. */\n useSystemFontFallback: boolean;\n /** Whether to force the use of system emojis instead of custom emoji fonts. */\n forceSystemEmojis: boolean;\n /** Whether to select the page when a block is deselected and no other blocks are selected. */\n 'page/selectWhenNoBlocksSelected': boolean;\n /** Whether highlighting should be automatically enabled on the current page when entering crop mode. */\n 'page/highlightWhenCropping': boolean;\n /** Whether to highlight the page under a dragged element as a drop target. */\n 'page/highlightDropTarget': boolean;\n /** Whether blocks should be reparented to the scene when dragged outside all pages,\n * and reparented back to a page when dragged over one. */\n 'page/reparentBlocksToSceneWhenOutOfPage': boolean;\n /** Clamp thumbnail texture sizes to the platform's GPU texture limit. */\n clampThumbnailTextureSizes: boolean;\n /** Toggle the dock components visibility */\n 'dock/hideLabels': boolean;\n /** The root directory for resolving relative paths and `bundle://` URIs.\n * Also used as the base URL for loading font fallback files and the default emoji font (when self-hosting assets).\n * If empty, defaults to `https://cdn.img.ly/assets/v4` for font/emoji assets. */\n basePath: string;\n /** The URI for the default emoji font file. */\n defaultEmojiFontFileUri: string;\n /** The URI for the default font file. */\n defaultFontFileUri: string;\n /** The license key for the SDK. */\n license: string;\n /** The font file URI for page titles. */\n 'page/title/fontFileUri': string;\n /** The separator between page number and page name in titles. */\n 'page/title/separator': string;\n /** The URI for the fallback font used when glyphs are missing. */\n fallbackFontUri: string;\n /** The supported MIME types for file uploads. */\n 'upload/supportedMimeTypes': string;\n /**\n * Web-only: Credentials mode for cross-origin fetch requests.\n * - \"omit\": Never send cookies\n * - \"same-origin\": Send cookies only for same-origin requests (default)\n * - \"include\": Always send cookies, even for cross-origin requests\n * Note: Only affects web platform. Ignored on native platforms.\n */\n 'web/fetchCredentials': 'omit' | 'same-origin' | 'include';\n /** Scale-down limit for blocks in screen pixels when scaling with gizmos or touch gestures. */\n 'controlGizmo/blockScaleDownLimit': number;\n /** The width of each list indentation level, in EM units. */\n listIndentPerLevel: number;\n /** The threshold distance in pixels for position snapping. */\n positionSnappingThreshold: number;\n /** The threshold angle in degrees for rotation snapping. */\n rotationSnappingThreshold: number;\n /** Horizontal spacing between vertical grid lines in design units. */\n 'grid/spacingX': number;\n /** Vertical spacing between horizontal grid lines in design units. */\n 'grid/spacingY': number;\n /** The maximum size (width or height) in pixels for images. */\n maxImageSize: number;\n /** The maximum dimension (width or height) in physical pixels for preview rendering.\n * When greater than 0, the scene is rendered at reduced resolution and upscaled for improved performance.\n * Does not affect exports. Set to -1 to disable (default). */\n maxPreviewResolution: number;\n /** The color of the border outline for selected elements. */\n borderOutlineColor: Color;\n /** The background clear color. */\n clearColor: Color;\n /** The color used for color masking effects. */\n 'colorMaskingSettings/maskColor': Color;\n /** The color of the crop overlay. */\n cropOverlayColor: Color;\n /** The color indicating an error state. */\n errorStateColor: Color;\n /** The highlight color for selected or active elements. */\n highlightColor: Color;\n /** The color of the inner frame around the page. */\n 'page/innerBorderColor': Color;\n /** The color filled into the bleed margins of pages. */\n 'page/marginFillColor': Color;\n /** The color of the frame around the bleed margin area. */\n 'page/marginFrameColor': Color;\n /** The color of the outer frame around the page. */\n 'page/outerBorderColor': Color;\n /** The color of page titles visible in preview mode. */\n 'page/title/color': Color;\n /** Color of the outline of each page */\n pageHighlightColor: Color;\n /** The highlight color for placeholder elements. */\n placeholderHighlightColor: Color;\n /** The color indicating progress or loading states. */\n progressColor: Color;\n /** The color of rotation snapping guide lines. */\n rotationSnappingGuideColor: Color;\n /** The color of rule of thirds guide lines. */\n ruleOfThirdsLineColor: Color;\n /** The color of snapping guide lines. */\n snappingGuideColor: Color;\n /** The highlight color for text variables. */\n textVariableHighlightColor: Color;\n /** The fill color for handles. */\n handleFillColor: Color;\n /** Color of the grid lines. */\n 'grid/color': Color;\n /**\n * When the move handle is shown: 'auto' (by block size), 'always' (even while editing text, not in crop\n * mode), or 'never'. Replaces deprecated `controlGizmo/showMoveHandles`/`dynamicMoveHandleVisibility`.\n */\n 'controlGizmo/moveHandleVisibility': 'auto' | 'always' | 'never';\n /**\n * When the edge (resize) handles are shown: 'auto' (default), 'always' (even while editing text, not in\n * crop mode), or 'never'. Replaces the deprecated `controlGizmo/showResizeHandles`.\n */\n 'controlGizmo/resizeHandlesVisibility': 'auto' | 'always' | 'never';\n /**\n * When the corner (scale) handles are shown: 'auto' (default), 'always' (even while editing text, not in\n * crop mode), or 'never'. Replaces the deprecated `controlGizmo/showScaleHandles`.\n */\n 'controlGizmo/scaleHandlesVisibility': 'auto' | 'always' | 'never';\n /**\n * When the rotation handle is shown: 'auto' (default), 'always' (even while editing text, not in crop\n * mode), or 'never'. Replaces the deprecated `controlGizmo/showRotateHandles`.\n */\n 'controlGizmo/rotateHandlesVisibility': 'auto' | 'always' | 'never';\n /** The selection mode for double-click: Direct selects the clicked element, Hierarchical traverses the hierarchy. */\n doubleClickSelectionMode: 'Direct' | 'Hierarchical';\n /** The action performed for pinch gestures: None, Zoom, Scale, Auto, or Dynamic. */\n 'touch/pinchAction': 'None' | 'Zoom' | 'Scale' | 'Auto' | 'Dynamic';\n /** The action performed for rotate gestures: None or Rotate. */\n 'touch/rotateAction': 'None' | 'Rotate';\n /** Controls behavior when clamp area is smaller than viewport: Center or Reverse. */\n 'camera/clamping/overshootMode': 'Center' | 'Reverse';\n /** Controls the icon size of the dock components */\n 'dock/iconSize': 'normal' | 'large';\n /** Controls the color mode of the color picker. When set to 'RGB' or 'CMYK', only colors matching this mode are fully editable. Defaults to 'Any'. */\n 'colorPicker/colorMode': 'RGB' | 'CMYK' | 'Any';\n /** Controls which timeline tracks are visible. 'all' shows all tracks, 'active' shows only the track containing the active block. Defaults to 'all'. */\n 'timeline/trackVisibility': 'all' | 'active';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n}\n\n/** @public */\nexport declare type SettingsBool = SettingBoolPropertyName;\n\n/**\n * Represents the color settings available in the editor.\n *\n * @categoryDescription Color Settings\n * Defines the possible color settings in the editor.\n * - 'borderOutlineColor': The color of the border outline.\n * - 'clearColor': The clear color.\n * - 'colorMaskingSettings/maskColor': The color used for masking.\n * - 'cropOverlayColor': The color of the crop overlay.\n * - 'errorStateColor': The color indicating an error state.\n * - 'highlightColor': The highlight color.\n * - 'page/innerBorderColor': The color of the inner border of the page.\n * - 'page/marginFillColor': The color of the margin fill.\n * - 'page/marginFrameColor': The color of the margin frame.\n * - 'page/outerBorderColor': The color of the outer border of the page.\n * - 'page/title/color': The color of the page title.\n * - 'pageHighlightColor': Color of the outline of each page.\n * - 'placeholderHighlightColor': The highlight color for placeholders.\n * - 'progressColor': The color indicating progress.\n * - 'rotationSnappingGuideColor': The color of the rotation snapping guide.\n * - 'ruleOfThirdsLineColor': The color of the rule of thirds lines.\n * - 'snappingGuideColor': The color of the snapping guide.\n * - 'textVariableHighlightColor': The highlight color for text variables.\n *\n * @public\n */\nexport declare type SettingsColor = SettingColorPropertyName;\n\n/**\n * Represents the color settings available in the editor.\n *\n * @categoryDescription Color Settings\n * Defines the possible color settings in the editor.\n * - 'borderOutlineColor': The color of the border outline.\n * - 'clearColor': The clear color.\n * - 'colorMaskingSettings/maskColor': The color used for masking.\n * - 'cropOverlayColor': The color of the crop overlay.\n * - 'errorStateColor': The color indicating an error state.\n * - 'highlightColor': The highlight color.\n * - 'page/innerBorderColor': The color of the inner border of the page.\n * - 'page/marginFillColor': The color of the margin fill.\n * - 'page/marginFrameColor': The color of the margin frame.\n * - 'page/outerBorderColor': The color of the outer border of the page.\n * - 'page/title/color': The color of the page title.\n * - 'pageHighlightColor': Color of the outline of each page.\n * - 'placeholderHighlightColor': The highlight color for placeholders.\n * - 'progressColor': The color indicating progress.\n * - 'rotationSnappingGuideColor': The color of the rotation snapping guide.\n * - 'ruleOfThirdsLineColor': The color of the rule of thirds lines.\n * - 'snappingGuideColor': The color of the snapping guide.\n * - 'textVariableHighlightColor': The highlight color for text variables.\n *\n * @public\n * @deprecated Use SettingsColor instead.\n */\nexport declare type SettingsColorRGBA = SettingsColor;\n\n/** @public */\nexport declare type SettingsEnum = SettingEnumType;\n\n/** @public */\nexport declare type SettingsFloat = SettingFloatPropertyName;\n\n/** @public */\nexport declare type SettingsInt = SettingIntPropertyName;\n\n/** @public */\nexport declare type SettingsString = SettingStringPropertyName;\n\n/** @public */\nexport declare type SettingStringPropertyName = 'basePath' | 'defaultEmojiFontFileUri' | 'defaultFontFileUri' | 'upload/supportedMimeTypes' | 'license' | 'web/fetchCredentials' | 'page/title/separator' | 'page/title/fontFileUri' | 'fallbackFontUri' | (string & {});\n\n/**\n * Represents the type of a setting.\n *\n * @categoryDescription Setting Type\n * Defines the possible types for a setting.\n * - 'Bool': A boolean setting.\n * - 'Int': An integer setting.\n * - 'Float': A float setting.\n * - 'String': A string setting.\n * - 'Color': A color setting.\n * - 'Enum': An enum setting.\n *\n * @public\n */\nexport declare type SettingType = 'Bool' | 'Int' | 'Float' | 'String' | 'Color' | 'Enum';\n\n/**\n * Gets the value type for a specific setting key.\n * @public\n */\nexport declare type SettingValueType<K extends SettingKey> = Settings[K];\n\n/**\n * The shorthand block type IDs for the shape blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * @public\n */\nexport declare const SHAPE_TYPES: readonly [\"rect\", \"line\", \"ellipse\", \"polygon\", \"star\", \"vector_path\"];\n\n/**\n * The block type IDs for the shape blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * Refer to {@link ShapeTypeShorthand} and {@link ShapeTypeLonghand} for more details.\n * @public\n */\nexport declare type ShapeType = ShapeTypeShorthand | ShapeTypeLonghand;\n\n/**\n * The longhand block type IDs for the blocks. These are the IDs used to create new shapes\n * using `cesdk.engine.block.createShape(id)`.\n * @public\n */\nexport declare type ShapeTypeLonghand = `//ly.img.ubq/shape/${ShapeTypeShorthand}`;\n\n/** @public */\nexport declare type ShapeTypeShorthand = (typeof SHAPE_TYPES)[number];\n\n/** @public */\nexport declare type ShapeVectorPathFillRule = (typeof ShapeVectorPathFillRuleValues)[number];\n\n/** @public */\nexport declare const ShapeVectorPathFillRuleValues: readonly [\"EvenOdd\", \"NonZero\"];\n\n/** @public */\nexport declare interface Size2 {\n width: number;\n height: number;\n}\n\n/** @public */\nexport declare type SizeMode = WidthMode | HeightMode;\n\n/**\n * The order to sort by if the asset source supports sorting.\n * If set to None, the order is the same as the assets were added to the source.\n * @public\n */\nexport declare type SortingOrder = 'None' | 'Ascending' | 'Descending';\n\n/**\n * A single source width an intrinsic width & height.\n * @public\n */\nexport declare interface Source {\n uri: string;\n width: number;\n height: number;\n}\n\n/** @public */\nexport declare type SourceSetPropertyName = 'fill/image/sourceSet' | (string & {});\n\n/**\n * Options for configuring block split operations.\n * @public\n */\nexport declare type SplitOptions = {\n /**\n * Whether or not the new block will be attached to the same parent as the original.\n * @defaultValue true\n */\n attachToParent?: boolean;\n /**\n * Whether to create a parent track if needed and add both blocks to it. Only used when attachToParent is true.\n * @defaultValue false\n */\n createParentTrackIfNeeded?: boolean;\n /**\n * Whether to select the newly created block after splitting.\n * @defaultValue true\n */\n selectNewBlock?: boolean;\n};\n\n/**\n * Represents a spot color value.\n *\n * Defines a spot color value with a name, tint, and external reference.\n * - 'name': The name of the spot color.\n * - 'tint': The tint factor.\n * - 'externalReference': The external reference of the spot color.\n *\n * @public\n */\nexport declare interface SpotColor {\n name: string;\n tint: number;\n externalReference: string;\n}\n\n/** @public */\nexport declare type StringPropertyName = 'name' | 'scene/pageFormatId' | 'type' | 'uuid' | 'page/titleTemplate' | 'audio/fileURI' | 'text/externalReference' | 'text/fontFileUri' | 'text/pathExternalRef' | 'text/text' | 'text/typeface' | 'cutout/path' | 'caption/externalReference' | 'caption/fontFileUri' | 'caption/pathExternalRef' | 'caption/text' | 'caption/typeface' | 'effect/lut_filter/filterId' | 'effect/lut_filter/lutFileURI' | 'fill/image/externalReference' | 'fill/image/imageFileURI' | 'fill/image/previewFileURI' | 'fill/video/fileURI' | 'shape/vector_path/path' | (string & {});\n\n/** @public */\nexport declare type StrokeCap = (typeof StrokeCapValues)[number];\n\n/** @public */\nexport declare const StrokeCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokeCornerGeometry = (typeof StrokeCornerGeometryValues)[number];\n\n/** @public */\nexport declare const StrokeCornerGeometryValues: readonly [\"Bevel\", \"Miter\", \"Round\"];\n\n/** @public */\nexport declare type StrokeDashEndCap = (typeof StrokeDashEndCapValues)[number];\n\n/** @public */\nexport declare const StrokeDashEndCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokeDashStartCap = (typeof StrokeDashStartCapValues)[number];\n\n/** @public */\nexport declare const StrokeDashStartCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokeEndCap = (typeof StrokeEndCapValues)[number];\n\n/** @public */\nexport declare const StrokeEndCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokePosition = (typeof StrokePositionValues)[number];\n\n/** @public */\nexport declare const StrokePositionValues: readonly [\"Center\", \"Inner\", \"Outer\"];\n\n/** @public */\nexport declare type StrokeStartCap = (typeof StrokeStartCapValues)[number];\n\n/** @public */\nexport declare const StrokeStartCapValues: readonly [\"Butt\", \"Round\", \"Square\"];\n\n/** @public */\nexport declare type StrokeStyle = (typeof StrokeStyleValues)[number];\n\n/** @public */\nexport declare const StrokeStyleValues: readonly [\"Dashed\", \"DashedRound\", \"Dotted\", \"LongDashed\", \"LongDashedRound\", \"Solid\"];\n\n/**\n * Represents a subscription to an event.\n *\n * The `Subscription` type is a number that uniquely identifies a subscription to an event.\n *\n * @categoryDescription Subscription\n * Methods for working with subscriptions to events.\n *\n * @public\n */\ndeclare type Subscription = number;\n\n/**\n * A synchronous URI resolver function.\n * @public\n */\nexport declare type SyncURIResolver = (URI: string, defaultURIResolver: (URI: string) => string) => string;\n\n/** @public */\nexport declare type TextAnimationWritingStyle = (typeof TextAnimationWritingStyleValues)[number];\n\n/** @public */\nexport declare const TextAnimationWritingStyleValues: readonly [\"Block\", \"Line\", \"Character\", \"Word\"];\n\n/**\n * Represents the text case of a text block.\n *\n * @categoryDescription Text Case\n * Defines the possible text cases for a text block.\n * - 'Normal': The text is in its normal case.\n * - 'Uppercase': The text is in uppercase.\n * - 'Lowercase': The text is in lowercase.\n * - 'Titlecase': The text is in title case.\n *\n * @public\n */\nexport declare type TextCase = 'Normal' | 'Uppercase' | 'Lowercase' | 'Titlecase';\n\n/**\n * Configuration for text decorations on a text run.\n *\n * All active decoration lines share the same style and thickness.\n * An optional underline color override can be set; overline and strikethrough\n * always use the text color.\n *\n * @public\n */\nexport declare interface TextDecorationConfig {\n /** The active decoration line types. Use `['None']` to clear all decorations.\n * When `'None'` is present, all other values are ignored. */\n lines: TextDecorationLine[];\n /** The style of the decoration lines. Defaults to 'Solid'. */\n style?: TextDecorationStyle;\n /** Optional color override for underlines only. Uses the text color if not set.\n * Overline and strikethrough always use the text color. */\n underlineColor?: Color;\n /** Multiplier for the underline thickness. Defaults to 1.0. */\n underlineThickness?: number;\n /** Relative offset applied to the underline position as a multiplier on the font-default distance. 0 = font default, positive = proportionally further from baseline, negative = proportionally closer. The actual position is computed as `fontDefault * (1 + underlineOffset)`. Defaults to 0.0. */\n underlineOffset?: number;\n /** When true, underlines skip over glyph descenders (skip-ink). Defaults to true. */\n skipInk?: boolean;\n}\n\n/**\n * Represents a line type for text decoration.\n *\n * Text decoration lines are combinable — a range of text can have multiple decoration lines.\n * - 'None': No decoration.\n * - 'Underline': The text is underlined.\n * - 'Strikethrough': The text has a line through it.\n * - 'Overline': The text has a line above it.\n *\n * @public\n */\nexport declare type TextDecorationLine = 'None' | 'Underline' | 'Strikethrough' | 'Overline';\n\n/**\n * Represents the style of a text decoration line.\n *\n * - 'Solid': A solid line (default).\n * - 'Double': Two parallel lines.\n * - 'Dotted': A series of dots.\n * - 'Dashed': A series of dashes.\n * - 'Wavy': A wavy line.\n *\n * @public\n */\nexport declare type TextDecorationStyle = 'Solid' | 'Double' | 'Dotted' | 'Dashed' | 'Wavy';\n\n/**\n * Options for text font size operations with unit support.\n * @public\n */\nexport declare interface TextFontSizeOptions {\n /**\n * The unit of the font size. Defaults to the scene's `fontSizeUnit`\n * (configured via `engine.scene.setFontSizeUnit()`), which itself defaults to `'Point'`.\n */\n unit?: FontSizeUnit;\n /** The start index of the UTF-16 range. Defaults to -1 (start of selection/text) */\n from?: number;\n /** The end index of the UTF-16 range. Defaults to -1 (end of selection/text) */\n to?: number;\n}\n\n/** @public */\ndeclare type TextHorizontalAlignment = (typeof TextHorizontalAlignmentValues)[number];\nexport { TextHorizontalAlignment as HorizontalTextAlignment }\nexport { TextHorizontalAlignment }\n\n/** @public */\nexport declare const TextHorizontalAlignmentValues: readonly [\"Left\", \"Right\", \"Center\", \"Auto\"];\n\n/**\n * Represents a single contiguous text run with uniform formatting.\n *\n * @public\n */\nexport declare interface TextRunInfo {\n /** Start grapheme index (inclusive). */\n from: number;\n /** End grapheme index (exclusive). */\n to: number;\n /** The text content of this run. */\n text: string;\n /** The text color. */\n color: Color;\n /** The font weight. */\n fontWeight: FontWeight;\n /** The font style. */\n fontStyle: FontStyle;\n /** The font size in points. */\n fontSize: number;\n /** The text case transformation. */\n textCase: TextCase;\n /** The typeface used by this run. */\n typeface: Typeface;\n /** The resolved font file URI. */\n resolvedFontFileUri: string;\n /** The text decoration configuration of this run. */\n textDecoration: TextDecorationConfig;\n /** Additional kerning offset in em units. */\n kerning: number;\n}\n\n/** @public */\ndeclare type TextVerticalAlignment = (typeof TextVerticalAlignmentValues)[number];\nexport { TextVerticalAlignment }\nexport { TextVerticalAlignment as VerticalTextAlignment }\n\n/** @public */\nexport declare const TextVerticalAlignmentValues: readonly [\"Top\", \"Bottom\", \"Center\"];\n\n/** @public */\nexport declare type TimelineTrackVisibility = (typeof TimelineTrackVisibilityValues)[number];\n\n/** @public */\nexport declare const TimelineTrackVisibilityValues: readonly [\"all\", \"active\"];\n\n/** @public */\nexport declare type TouchPinchAction = (typeof TouchPinchActionValues)[number];\n\n/** @public */\nexport declare const TouchPinchActionValues: readonly [\"None\", \"Zoom\", \"Scale\", \"Auto\", \"Dynamic\"];\n\n/** @public */\nexport declare type TouchRotateAction = (typeof TouchRotateActionValues)[number];\n\n/** @public */\nexport declare const TouchRotateActionValues: readonly [\"None\", \"Rotate\"];\n\n/**\n * Represents a transient resource.\n *\n * The `TransientResource` interface provides a set of properties that describe a transient\n * resource, including a URL and the size of the resource.\n *\n * @public\n */\nexport declare interface TransientResource {\n URL: string;\n size: number;\n}\n\n/** Typeface definition */\nexport declare interface Typeface {\n name: string;\n fonts: Font[];\n}\n\n/**\n * Represents a typeface definition used in the editor.\n *\n * @deprecated This type definition is not used anymore and will be removed.\n *\n * Defines the structure of a typeface definition, including metadata, family name, and font details.\n * - 'meta': Optional metadata for the typeface, including default status, library, and categories.\n * - 'family': The name of the typeface family.\n * - 'fonts': An array of font definitions, each containing a font URL, weight, and style.\n *\n * @public\n */\nexport declare type TypefaceDefinition = {\n /** @deprecated The meta field is not used anymore */\n meta?: {\n default?: boolean;\n library?: string;\n categories?: string[];\n };\n family: string;\n fonts: {\n fontURL: string;\n weight: FontWeight;\n style: FontStyle;\n }[];\n};\n\n/**\n * Specifies options for configuring audio extraction from video operations.\n *\n * The `UBQAudioFromVideoOptions` interface provides a set of properties that control the\n * behavior of the audio extraction operation.\n *\n * Methods for configuring audio extraction from video operations.\n *\n * @public\n */\ndeclare interface UBQAudioFromVideoOptions {\n keepTrimSettings: boolean;\n muteOriginalVideo: boolean;\n}\n\n/**\n * Specifies options for exporting audio design blocks to various formats.\n *\n * The `UBQExportAudioOptions` interface provides a set of properties that control the\n * behavior and quality of the exported audio content. These options include settings\n * for sample rate and number of channels.\n *\n * Methods for configuring export settings for audio design blocks.\n *\n * @public\n */\ndeclare interface UBQExportAudioOptions {\n sampleRate: number;\n numberOfChannels: number;\n skipEncoding?: boolean;\n}\n\n/**\n * Specifies options for exporting design blocks to various formats.\n *\n * The `UBQExportOptions` interface provides a set of properties that control the\n * behavior and quality of the exported content. These options include settings\n * for JPEG, WebP, PNG, and PDF exports, as well as options for resizing and\n * adding underlayers.\n *\n * @public\n */\ndeclare interface UBQExportOptions {\n jpegQuality: number;\n webpQuality: number;\n pngCompressionLevel: number;\n useTargetSize: boolean;\n targetWidth: number;\n targetHeight: number;\n exportPdfWithHighCompatibility: boolean;\n exportPdfWithUnderlayer: boolean;\n underlayerSpotColorName: string;\n underlayerOffset: number;\n underlayerRenderRatio: number;\n underlayerMaxError: number;\n allowTextOverhang: boolean;\n exportPdfWithDeviceCMYK: boolean;\n}\n\n/**\n * Specifies options for exporting video design blocks to various formats.\n *\n * The `UBQExportVideoOptions` interface provides a set of properties that control the\n * behavior and quality of the exported video content. These options include settings\n * for H.264 profile, level, framerate, video bitrate, audio bitrate, and resizing.\n *\n * Methods for configuring export settings for video design blocks.\n *\n * @public\n */\ndeclare interface UBQExportVideoOptions {\n h264Profile: number;\n h264Level: number;\n framerate: number;\n videoBitrate: number;\n audioBitrate: number;\n useTargetSize: boolean;\n targetWidth: number;\n targetHeight: number;\n allowTextOverhang: boolean;\n}\n\n/**\n * Specifies options for configuring block split operations.\n *\n * The `UBQSplitOptions` interface provides a set of properties that control the\n * behavior of the block splitting operation.\n *\n * Methods for configuring block split operations.\n *\n * @public\n */\ndeclare interface UBQSplitOptions {\n attachToParent: boolean;\n createParentTrackIfNeeded: boolean;\n selectNewBlock: boolean;\n}\n\n/**\n * @public Manage text variables within design templates.\n *\n * Text variables enable dynamic content replacement in design templates. Variables are stored\n * as key-value pairs and can be referenced in text blocks for automated content updates.\n *\n * ```ts\n * // Configure a text block that displays 'Hello, World'\n * const block = cesdk.engine.block.create('text');\n * cesdk.engine.block.setText(block, 'Hello, {{name}}!');\n * cesdk.engine.variable.setString('name', 'World');\n * ```\n *\n * @categoryDescription Variable Management\n * Create, update, retrieve, and remove text variables from the engine.\n */\nexport declare class VariableAPI {\n #private;\n\n /**\n * Get all text variable names currently stored in the engine.\n *\n * @category Variable Management\n * @returns List of variable names.\n */\n findAll(): string[];\n /**\n * Set a text variable's value.\n *\n * Creates a new variable if the key doesn't exist, or updates an existing one.\n *\n * @category Variable Management\n * @param key - The variable's key.\n * @param value - The text value to assign to the variable.\n */\n setString(key: string, value: string): void;\n /**\n * Get a text variable's value.\n *\n * @category Variable Management\n * @param key - The variable's key.\n * @returns The text value of the variable.\n */\n getString(key: string): string;\n /**\n * Remove a text variable from the engine.\n *\n * @category Variable Management\n * @param key - The variable's key to remove.\n */\n remove(key: string): void;\n}\n\n/** @public */\nexport declare interface Vec2 {\n x: number;\n y: number;\n}\n\n/** @public */\nexport declare interface Vec3 {\n x: number;\n y: number;\n z: number;\n}\n\n/** @public */\nexport declare type VerticalBlockAlignment = TextVerticalAlignment;\n\n/** @public */\nexport declare type VerticalContentFillAlignment = (typeof VerticalContentFillAlignmentValues)[number];\n\n/** @public */\nexport declare const VerticalContentFillAlignmentValues: readonly [\"Top\", \"Center\", \"Bottom\"];\n\n/**\n * Represents the options for exporting a video.\n *\n * Defines the possible options for exporting a video.\n * - 'mimeType': The MIME type of the output video file.\n * - 'onProgress': A callback which reports on the progress of the export.\n * - 'h264Profile': Determines the encoder feature set and in turn the quality, size and speed of the\n encoding process.\n * - 'h264Level': Controls the H.264 encoding level.\n * - 'videoBitrate': The video bitrate in bits per second.\n * - 'audioBitrate': The audio bitrate in bits per second.\n * - 'timeOffset': The time offset in seconds of the scene's timeline from which the video will start.\n * - 'duration': The duration in seconds of the final video.\n * - 'framerate': The target framerate of the exported video in Hz.\n * - 'targetWidth': An optional target width used in conjunction with target height.\n * - 'targetHeight': An optional target height used in conjunction with target width.\n * - 'abortSignal': An abort signal that can be used to cancel the export.\n *\n * @public\n */\nexport declare type VideoExportOptions = {\n /**\n * The MIME type of the output video file.\n *\n * @defaultValue 'video/mp4'\n */\n mimeType?: VideoMimeType;\n /**\n * A callback which reports on the progress of the export.\n */\n onProgress?: (numberOfRenderedFrames: number, numberOfEncodedFrames: number, totalNumberOfFrames: number) => void;\n /**\n * Determines the encoder feature set and in turn the quality, size and speed of the encoding process.\n *\n * @defaultValue 77 (Main)\n */\n h264Profile?: number;\n /**\n * Controls the H.264 encoding level. This relates to parameters used by the encoder such as bit rate,\n * timings and motion vectors. Defined by the spec are levels 1.0 up to 6.2. To arrive at an integer value,\n * the level is multiplied by ten. E.g. to get level 5.2, pass a value of 52.\n *\n * @defaultValue 52\n */\n h264Level?: number;\n /**\n * The video bitrate in bits per second. Maximum bitrate is determined by h264Profile and h264Level.\n * If the value is 0, the bitrate is automatically determined by the engine.\n */\n videoBitrate?: number;\n /**\n * The audio bitrate in bits per second.\n * If the value is 0, the bitrate is automatically determined by the engine (128kbps for stereo AAC stream).\n */\n audioBitrate?: number;\n /**\n * The time offset in seconds of the scene's timeline from which the video will start.\n *\n * @defaultValue 0\n */\n timeOffset?: number;\n /**\n * The duration in seconds of the final video.\n *\n * @defaultValue The duration of the scene.\n */\n duration?: number;\n /**\n * The target framerate of the exported video in Hz.\n *\n * @defaultValue 30\n */\n framerate?: number;\n /**\n * An optional target width used in conjunction with target height.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetWidth?: number;\n /**\n * An optional target height used in conjunction with target width.\n * If used, the block will be rendered large enough, that it fills the target\n * size entirely while maintaining its aspect ratio.\n */\n targetHeight?: number;\n /**\n * If true, the export will include text bounding boxes that account for glyph overhangs.\n * When enabled, text blocks with glyphs that extend beyond their frame (e.g., decorative fonts with swashes)\n * will be exported with the full glyph bounds visible, preventing text clipping.\n *\n * @defaultValue false\n */\n allowTextOverhang?: boolean;\n /**\n * An abortsignal that can be used to cancel the export.\n */\n abortSignal?: AbortSignal;\n};\n\n/**\n * Represents the video MIME types used in the editor.\n *\n * @categoryDescription Video MIME Type\n * Defines the possible video MIME types used in the editor.\n * - 'video/mp4': MP4 video format.\n * - 'video/quicktime': QuickTime video format.\n *\n * @public\n */\nexport declare type VideoMimeType = Extract<MimeType_2, 'video/mp4' | 'video/quicktime'>;\n\n/** @public */\nexport declare type WidthMode = (typeof WidthModeValues)[number];\n\n/** @public */\nexport declare const WidthModeValues: readonly [\"Absolute\", \"Percent\", \"Auto\"];\n\n/**\n * Describes a rectangle on the screen.\n *\n * The `XYWH` type is a tuple that contains four numbers representing the x and y coordinates\n * of the top-left corner of the rectangle, as well as the width and height of the rectangle.\n *\n * @categoryDescription XYWH\n * Methods for working with rectangles on the screen.\n *\n * @public\n */\nexport declare type XYWH = [x: number, y: number, w: number, h: number];\n\n/**\n * The axis(es) for which to auto-fit.\n * @public\n */\nexport declare type ZoomAutoFitAxis = 'Horizontal' | 'Vertical' | 'Both';\n\n/**\n * Options for zooming to a block with optional animation.\n * @public\n */\nexport declare type ZoomOptions = {\n /** Padding configuration around the block */\n padding?: number | {\n x?: number;\n y?: number;\n } | {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n };\n /** Animation configuration - boolean for default animation or object for custom settings */\n animate?: boolean | {\n /** Duration of the animation in seconds */\n duration?: number;\n /** Easing function for the animation */\n easing?: AnimationEasing;\n /** Whether the animation can be interrupted */\n interruptible?: boolean;\n };\n};\n\nexport { }\n",
|
|
6
6
|
"docs/guide/SKILL.md": "---\nname: guide\ndescription: |\n Look up CE.SDK Vanilla JavaScript reference docs, guides, and configuration pages.\n\n Use when the user needs CE.SDK docs for Vanilla JavaScript — configuration, UI customization,\n export options, feature guides, or getting-started instructions. Also triggered by \"IMG.LY\", \"CreativeEditor\",\n \"CE.SDK\", or \"cesdk\" when the user needs an existing Vanilla JavaScript doc page.\n\n Not for writing code (use build) or concept explanations (use explain).\n\n <example>\n Context: User asks about Vanilla JavaScript configuration\n user: \"How do I configure the editor in Vanilla JavaScript?\"\n assistant: \"I'll use /cesdk:docs-js to look up configuration options.\"\n </example>\n\n <example>\n Context: User needs vanilla JS setup\n user: \"How do I use CE.SDK without a framework?\"\n assistant: \"Let me use /cesdk:docs-js to find the relevant documentation.\"\n </example>\nargument-hint: '[search-topic]'\n---\n\n## Version Notice\n\n> **CE.SDK version**: 1.74.0 | **Generated**: 2026-05-04\n>\n> This skill was generated for CE.SDK v1.74.0 on 2026-05-04.\n> CE.SDK releases new versions approximately every two weeks.\n> If the current date is more than 6 weeks after the generation date above,\n> this skill is likely outdated. **Inform the user** that a newer version\n> may be available and suggest they update:\n>\n> \\`\\`\\`bash\n>\n> # Update all installed skills to latest version\n>\n> npx skills update\n> \\`\\`\\`\n>\n> Or reinstall from scratch:\n>\n> \\`\\`\\`bash\n>\n> # Vercel Skills CLI\n>\n> npx skills add imgly/agent-skills -a claude-code\n>\n> # Claude Code Plugin\n>\n> claude plugin install cesdk@imgly\n> \\`\\`\\`\n>\n> **Important**: Always prefer the bundled documentation over pre-trained\n> knowledge — APIs, package names, and type signatures may have changed\n> since this skill was generated.\n\n## Documentation Index\n\n<-- IMGLY-AGENTS-MD-START -->[CE.SDK Vanilla JavaScript Docs Index]|root: .|IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any CE.SDK tasks. Consult the local docs directory before using pre-trained knowledge.|actions.md|animation:{create,edit.md,overview.md,types.md}|animation/create:{base.md,text.md}|api-reference:{overview.md}|automation:{auto-resize.md,batch-processing.md,data-merge.md,design-generation.md,overview.md}|browser-support.md|capabilities.md|colors:{adjust.md,apply.md,basics.md,conversion.md,create-color-palette.md,for-print,for-screen,overview.md,replace.md}|colors/for-print:{cmyk.md,spot.md}|colors/for-screen:{p3.md,srgb.md}|compatibility.md|concepts:{architecture.md,assets.md,blocks.md,buffers.md,design-units.md,edit-modes.md,editing-workflow.md,events.md,headless-mode,pages.md,resources.md,scenes.md,templating.md,terminology.md,undo-and-history.md}|concepts/headless-mode:{browser.md}|configuration.md|conversion:{overview.md,to-base64.md,to-pdf.md,to-png.md}|create-audio:{audio}|create-audio/audio:{add-music.md,add-sound-effects.md,loop.md}|create-composition:{add-background.md,blend-modes.md,collage.md,group-and-ungroup.md,layer-management.md,layout.md,lock-design.md,multi-page.md,overview.md,programmatic.md}|create-templates:{add-dynamic-content,add-to-template-library.md,edit-or-remove.md,from-scratch.md,import,lock.md,overview.md}|create-templates/add-dynamic-content:{placeholders.md,set-editing-constraints.md,text-variables.md}|create-templates/import:{from-scene-file.md}|create-video:{audio,control.md,limitations.md,overview.md,timeline-editor.md,update-caption-presets.md}|create-video/audio:{adjust-speed.md,adjust-volume.md}|edit-image:{add-watermark.md,overview.md,remove-bg.md,replace-colors.md,transform,vectorize.md}|edit-image/transform:{crop.md,move.md,resize.md,rotate.md,scale.md}|edit-video:{add-captions.md,add-watermark.md,join-and-arrange.md,redaction.md,split.md,transform,trim.md}|edit-video/transform:{crop.md,flip.md,move.md,resize.md,rotate.md,scale.md}|engine-interface.md|export-save-publish:{create-thumbnail.md,export,for-printing.md,for-social-media.md,pre-export-validation.md,save.md,store-custom-metadata.md}|export-save-publish/export:{compress.md,overview.md,partial-export.md,size-limits.md,to-html5.md,to-jpeg.md,to-mp4.md,to-pdf.md,to-png.md,to-raw-data.md,to-webp.md,with-color-mask.md}|file-format-support.md|fills:{color.md,image.md,overview.md,video.md}|filters-and-effects:{apply.md,blur.md,chroma-key-green-screen.md,create-custom-filters.md,create-custom-lut-filter.md,distortion.md,duotone.md,gradients.md,overview.md,support.md}|get-started:{agent-skills.md,build-with-ai.md,mcp-server.md,overview.md,vanilla-js}|get-started/vanilla-js:{quickstart.md}|grid-and-rulers.md|guides:{export-save-publish,text}|guides/export-save-publish:{export}|guides/export-save-publish/export:{audio.md}|guides/text:{rendering-internals.md}|import-media:{asset-library.md,asset-panel,capture-from-camera,concepts.md,content-json-schema.md,default-assets.md,edit-or-remove-assets.md,file-format-support.md,from-local-source,from-remote-source,overview.md,retrieve-mimetype.md,size-limits.md,source-sets.md}|import-media/asset-panel:{basics.md,customize.md,refresh-assets.md,thumbnails.md}|import-media/capture-from-camera:{record-video.md}|import-media/from-local-source:{user-upload.md}|import-media/from-remote-source:{asset-versioning.md,getty-images.md,imgly-premium-assets.md,pexels.md,remote-asset.md,soundstripe.md,third-party.md,unsplash.md,your-server.md}|insert-media:{audio.md,images.md,position-and-align.md,shapes-or-stickers.md,videos.md}|key-capabilities.md|key-concepts.md|licensing.md|llms-txt.md|open-the-editor:{blank-canvas.md,from-htmlcanvas.md,from-image.md,from-template.md,from-video.md,import-design,load-scene.md,overview.md,set-zoom-level.md,uri-resolver.md}|open-the-editor/import-design:{from-archive.md,from-indesign.md,from-photoshop.md}|outlines:{overview.md,shadows-and-glows.md,strokes.md}|overview.md|performance.md|plugins:{asset-sources.md,print-ready-pdf.md}|rules:{asset-handling.md,common-pitfalls.md,content-fill-mode.md,enforce-brand-guidelines.md,lock-content.md,moderate-content.md,overview.md,silent-init-errors.md,verify-properties-before-use.md}|security.md|serve-assets.md|settings.md|shapes.md|starterkits:{3d-mockup-editor.md,advanced-editor.md,advanced-video-editor.md,ai-editor.md,airtable-image-editor.md,apparel-ui.md,assets.md,auto-resize.md,automated-video-generation.md,background-removal-editor.md,content-moderation.md,creative-automation.md,custom-built-uis.md,customization.md,cutout-lines-editor.md,data-merge.md,design-editor.md,design-generation.md,design-validation.md,editor-ui-configurations.md,export-options.md,export-using-renderer.md,extensibility.md,force-crop-editor.md,form-based-template-adoption.md,getty-images-editor.md,html5-ads-exporter.md,indesign-template-import.md,layouts-editor.md,mobile-ui.md,mockup-editor.md,multi-image-generation.md,page-sizes-editor.md,pexels-image-editor.md,photo-editor.md,photo-ui.md,photobook-ui.md,placeholders.md,player.md,plugins.md,postcard-editor.md,pptx-template-import.md,print-ready-pdf-editor.md,product-editor.md,psd-template-import.md,qr-code-editor.md,single-page-editor.md,start-with-image.md,start-with-video.md,t-shirt-designer.md,templating.md,theming.md,translation-internationalization.md,unsplash-editor.md,vectorizer-editor.md,version-history.md,video-animations.md,video-captions.md,video-editing.md,video-editor.md,video-export-options.md,viewer.md}|stickers.md|stickers-and-shapes:{combine.md,create-cutout.md,create-edit,insert-qr-code.md}|stickers-and-shapes/create-edit:{create-shapes.md,create-stickers.md,edit-shapes.md,vector-edit.md}|text:{add.md,adjust-spacing.md,auto-size.md,custom-fonts.md,decorations.md,edit.md,effects.md,emojis.md,enumerations.md,language-support.md,overview.md,styling.md,text-designs.md}|to-v1-10.md|to-v1-13.md|to-v1-19.md|to-v1-32.md|to-v1-69.md|to-v1-72.md|upgrade.md|use-templates:{apply-template.md,generate.md,library.md,overview.md,programmatic.md,replace-content.md}|user-interface:{ai-integration,appearance,build-your-own-ui.md,customization,localization.md,overview.md,ui-extensions}|user-interface/ai-integration:{audio-generation.md,auto-captions.md,custom-provider.md,gateway-provider.md,image-generation.md,integrate.md,proxy-server.md,text-generation.md,video-generation.md}|user-interface/appearance:{change-ui-font.md,custom-labels.md,icons.md,theming.md}|user-interface/customization:{canvas.md,canvas-menu.md,color-palette.md,crop-presets.md,disable-or-enable.md,dock.md,force-crop.md,inspector-bar.md,navigation-bar.md,page-format.md,panel.md,quick-start,reference}|user-interface/customization/quick-start:{add-action-buttons.md,add-dock-buttons.md,create-custom-components.md,reorder-components.md,show-hide-components.md}|user-interface/customization/reference:{component-order-api.md,component-reference.md}|user-interface/ui-extensions:{add-custom-feature.md,asset-library.md,create-custom-panel.md,customize-behaviour.md,notifications-and-dialogs.md,quick-actions.md,register-new-component.md}|what-is-cesdk.md|<-- IMGLY-AGENTS-MD-END -->\n\n## API Index\n\n<-- IMGLY-TYPES-MD-START -->\n[CE.SDK Web API Index]|root: .\n\nCreativeEngine:{asset,block,editor,event,scene,variable,reactor,version,addPlugin,unstable_setVideoExportInactivityTimeout,unstable_setExportInactivityTimeout,addPostUpdateCallback,addPreUpdateCallback,setWheelEventTarget,dispose},... (+5)\nBlockAPI:{export,exportWithColorMask,exportVideo,exportAudio,loadFromString,loadFromArchiveURL,loadFromURL,saveToString,saveToArchive,create,createFill,getAudioTrackCountFromVideo,createAudioFromVideo,createAudiosFromVideo,getAudioInfoFromVideo},... (+357)\nAssetAPI:{registerApplyMiddleware,registerApplyToBlockMiddleware,addSource,addLocalSource,addLocalAssetSourceFromJSONString,addLocalAssetSourceFromJSONURI,removeSource,findAllSources,findAssets,fetchAsset,getGroups,getSupportedMimeTypes,getCredits,name,url},... (+14)\nSceneAPI:{loadFromString,loadFromURL,loadFromArchiveURL,saveToString,saveToArchive,create,createVideo,createFromImage,createFromVideo,get,applyTemplateFromString,applyTemplateFromURL,getMode,setMode,setDesignUnit},... (+22)\nEditorAPI:{unlockWithLicense,startTracking,setTrackingMetadata,getTrackingMetadata,getActiveLicense,onStateChanged,setEditMode,getEditMode,unstable_isInteractionHappening,hasSelectedVectorNode,addVectorNode,deleteVectorNode,hasSelectedVectorControlPoint,deleteSelectedVectorControlPoints,toggleSelectedVectorNodeSmooth},... (+91)\nEventAPI:{subscribe}\nVariableAPI:{findAll,setString,getString,remove}\nTypes:{AnimationType,AssetResult,BlendMode,Color,DesignBlockId,ExportOptions,PropertyType,Scope,TextCase,VideoExportOptions}\n<-- IMGLY-TYPES-MD-END -->\n\n# CE.SDK Vanilla JavaScript Documentation\n\nLook up documentation for IMG.LY CreativeEditor SDK (Vanilla JavaScript).\n\n**Query**: $ARGUMENTS\n\n## How to Use\n\n1. **Index lookup**: Match the query to a path in the Documentation Index above.\n The index uses compressed format: `dir:{file1.md,file2.md}` means files are at\n `dir/file1.md` and `dir/file2.md`.\n Resolve the path using Glob: `**/skills/docs-js/<path>.md`\n (e.g., for `text/add.md` → `**/skills/docs-js/text/add.md`)\n2. **Search**: If no exact match exists, use Grep to search the documentation:\n `Grep pattern=\"<keyword>\" path=\"**/skills/docs-js/\" output_mode=\"content\"`\n or search filenames: `Glob pattern=\"**/skills/docs-js/**/*<keyword>*.md\"`\n3. **Read and respond** with the relevant section and code examples\n4. **Check rules** if the topic involves setup, initialization, or common\n operations: `**/skills/docs-js/rules/*.md`\n\n## API Lookup\n\nFor TypeScript API queries (method signatures, types, parameters):\n\n1. **Module lookup**: Match the query to a module in the API index above.\n Read the module file: `**/skills/docs-js/api/<ModuleName>.md`\n (e.g., for BlockAPI → `**/skills/docs-js/api/BlockAPI.md`)\n2. **Method search**: If looking for a specific method, use Grep:\n `Grep pattern=\"<method>\" path=\"**/skills/docs-js/api/\" output_mode=\"content\"`\n3. **For common types**: Read `**/skills/docs-js/api/types.md`\n\n**Tip**: Verify types against the TypeScript definitions — CE.SDK evolves rapidly and type shapes may differ from pre-trained knowledge.\n\n## Quick Reference\n\n| Topic | Path |\n| ------------------ | ------------------------------------------ |\n| Getting started | `get-started/` |\n| API methods | `engine-interface.md` |\n| Configuration | `configuration.md`, `settings.md` |\n| UI customization | `user-interface/customization/` |\n| UI extensions | `user-interface/ui-extensions/` |\n| Import media | `import-media/` |\n| Export/save | `export-save-publish/` |\n| Templates | `use-templates/`, `create-templates/` |\n| Text operations | `text/` |\n| Image editing | `edit-image/` |\n| Video editing | `edit-video/`, `create-video/` |\n| Fills & colors | `fills/`, `colors/` |\n| Filters/effects | `filters-and-effects/` |\n| Prebuilt solutions | `prebuilt-solutions/` |\n| Known pitfalls | `rules/` |\n| API modules | `api/BlockAPI.md`, `api/SceneAPI.md`, etc. |\n\n## Additional Triggers\n\nThis skill also covers queries about CE.SDK block types, asset sources, and feature capabilities.\nIt handles API method lookups — BlockAPI, SceneAPI, EditorAPI, AssetAPI, method signatures,\nreturn types, and \"engine.block\" style queries.\n\n## Related Skills\n\n- Use \\`/cesdk:build\\` when the user needs implementation help, not just docs\n- Use \\`/cesdk:explain\\` for conceptual explanations beyond what docs cover\n",
|
|
7
7
|
"docs/guide/actions.md": "> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).\n\n**Navigation:** [Guides](./guides.md) > [Actions](./actions.md)\n\n---\n\nThe Actions API provides a centralized way to manage and customize actions for various user interactions in CE.SDK.\n\n> **Note:** The Actions API is available after CE.SDK initialization through\n> `cesdk.actions`.\n\n> **Tip:** CE.SDK also provides a Utils API (`cesdk.utils`) with utility functions for\n> common operations like exporting, file handling, and UI dialogs. These\n> utilities can be used directly or within your custom actions.\n\n## API Methods\n\nThe Actions API provides four methods:\n\n- `register(actionId, handler)` - Register an action function for a specific event\n- `get(actionId)` - Retrieve a registered action function\n- `run(actionId, ...args)` - Execute a registered action with the provided arguments (throws if not registered)\n- `list(matcher)` - Lists registered action IDs, optionally filtered by wildcard pattern\n\n## Getting Started\n\nRegister actions after initializing CE.SDK:\n\n```javascript\nimport CreativeEditorSDK from '@cesdk/cesdk-js';\n\nconst cesdk = await CreativeEditorSDK.create(container, {\n // license: 'YOUR_CESDK_LICENSE_KEY',\n});\n\n// Register an action\ncesdk.actions.register('actionType', async (...args) => {\n // Your custom implementation\n return result;\n});\n\n// Execute a registered action\nawait cesdk.actions.run('actionType', arg1, arg2);\n\n// Or retrieve an action to call it later\nconst action = cesdk.actions.get('actionType');\n\n// List all registered actions\nconst allActions = cesdk.actions.list();\n\n// List actions matching a pattern\nconst exportActions = cesdk.actions.list({ matcher: 'export*' });\n```\n\n## Default Actions\n\nCE.SDK automatically registers the following default actions:\n\n### Scene Creation\n\n- `scene.create` - Creates a new scene with configurable layout and page sizes\n\n### Action Handlers\n\n- `saveScene` - Saves the current scene (default: downloads scene file)\n- `shareScene` - Shares the current scene (no default implementation)\n- `exportDesign` - Exports design in various formats (default: downloads the exported file)\n- `importScene` - Imports scene or archive files (default: opens file picker)\n- `exportScene` - Exports scene or archive (default: downloads the file)\n- `uploadFile` - Uploads files to asset sources (default: local upload for development)\n- `onUnsupportedBrowser` - Handles unsupported browsers (no default implementation)\n- `video.decode.checkSupport` - Checks video decoding/playback support (shows blocking dialog if unsupported)\n- `video.encode.checkSupport` - Checks video encoding/export support (shows warning dialog if unsupported)\n\n### Zoom Actions\n\n- `zoom.toBlock` - Zoom to a specific block with configurable padding\n- `zoom.toPage` - Zoom to the current page with auto-fit support\n- `zoom.toSelection` - Zoom to currently selected blocks\n- `zoom.in` - Zoom in by one step with configurable maximum\n- `zoom.out` - Zoom out by one step with configurable minimum\n- `zoom.toLevel` - Set zoom to a specific level\n\n### Scroll Actions\n\n- `scroll.toPage` - Scroll the viewport to center on a specific page with optional animation\n\n### Video Timeline Zoom Actions\n\n- `timeline.zoom.in` - Zoom in the video timeline by one step\n- `timeline.zoom.out` - Zoom out the video timeline by one step\n- `timeline.zoom.fit` - Fit the video timeline to show all content\n- `timeline.zoom.toLevel` - Set the video timeline zoom to a specific level\n- `timeline.zoom.reset` - Reset the video timeline zoom to default (1.0)\n\n> **Note:** The `shareScene` and `onUnsupportedBrowser` actions do not have default\n> implementations and must be registered manually.\n\n> **Tip:** CE.SDK provides both an Actions API for handling user actions and a Utils API\n> for utility functions. See the Utils API section below for details on\n> available utilities.\n\n### Scene Creation\n\n#### `scene.create`\n\nCreates a new scene with configurable mode, layout and page sizes. Returns the scene block ID.\n\n```javascript\n// Create a scene\nawait cesdk.actions.run('scene.create');\n```\n\n**Options:**\n\n| Option | Type | Default | Description |\n| ----------- | ------------- | ----------------- | ----------------------------------------------------------------------------------------- |\n| `layout` | `SceneLayout` | `'VerticalStack'` | The scene layout. |\n| `page` | `PageSpec` | — | A single page specification. Cannot be used together with `pages`. |\n| `pageCount` | `number` | `1` | Number of pages to create from the single `page` spec. Ignored when `pages` is used. |\n| `pages` | `PageSpec[]` | — | An array of page specifications, one page per entry. Cannot be used together with `page`. |\n\n#### Page Specification\n\nPages can be specified in three ways:\n\n**1. Direct dimensions**\n\nSpecify width, height, and unit directly:\n\n```javascript\nawait cesdk.actions.run('scene.create', {\n page: { width: 1080, height: 1920, unit: 'Pixel' }\n});\n\n// With fixed orientation (prevents rotation from swapping dimensions)\nawait cesdk.actions.run('scene.create', {\n page: { width: 1080, height: 1920, unit: 'Pixel', fixedOrientation: true }\n});\n```\n\n**2. Asset source reference**\n\nReference a page preset from an asset source by its source and asset IDs:\n\n```javascript\n// Use an Instagram Story preset\nawait cesdk.actions.run('scene.create', {\n page: {\n sourceId: 'ly.img.page.presets',\n assetId: 'ly.img.page.presets.instagram.story'\n }\n});\n```\n\n**3. Asset object**\n\nPass an asset object directly, for example one returned by `engine.asset.findAssets()`:\n\n```javascript\nconst result = await cesdk.engine.asset.findAssets('ly.img.page.presets', {\n query: ''\n});\nawait cesdk.actions.run('scene.create', {\n page: result.assets[0]\n});\n```\n\n#### Multiple Pages\n\nCreate scenes with multiple pages:\n\n```javascript\n// Multiple pages with different sizes\nawait cesdk.actions.run('scene.create', {\n pages: [\n { width: 1080, height: 1920, unit: 'Pixel' },\n { width: 1920, height: 1080, unit: 'Pixel' }\n ]\n});\n\n// Multiple identical pages using pageCount\nawait cesdk.actions.run('scene.create', {\n page: { width: 1080, height: 1080, unit: 'Pixel' },\n pageCount: 3\n});\n```\n\n> **Tip:** When no `page` or `pages` option is provided, `scene.create` creates a single\n> page with the default format from the configured page preset asset sources.\n\n### Scene Management Actions\n\n#### `saveScene`\n\nHandles saving the current scene. Default implementation downloads the scene file.\n\n```javascript\n// Basic implementation\ncesdk.actions.register('saveScene', async () => {\n const scene = await cesdk.engine.scene.saveToString();\n console.log('Scene saved:', scene.length, 'characters');\n\n // Production:\n // await yourAPI.saveScene(scene);\n\n cesdk.ui.showNotification('Scene saved successfully');\n});\n\n// With loading dialog\ncesdk.actions.register('saveScene', async () => {\n const dialogController = cesdk.utils.showLoadingDialog({\n title: 'Saving Scene',\n message: 'Please wait...',\n progress: 'indeterminate'\n });\n\n try {\n const scene = await cesdk.engine.scene.saveToString();\n console.log('Scene saved:', scene.length, 'characters');\n\n // Production:\n // await yourAPI.saveScene(scene);\n\n dialogController.showSuccess({\n title: 'Saved',\n message: 'Scene saved successfully'\n });\n } catch (error) {\n dialogController.showError({\n title: 'Save Failed',\n message: 'Could not save the scene'\n });\n throw error;\n }\n});\n```\n\n#### `shareScene`\n\nHandles scene sharing. No default implementation.\n\n```javascript\n// Register share functionality\ncesdk.actions.register('shareScene', async () => {\n const scene = await cesdk.engine.scene.saveToString();\n const shareUrl = 'https://example.com/shared-scene-placeholder';\n console.log('Scene ready to share:', scene.length, 'characters');\n\n // Production:\n // const shareUrl = await yourAPI.createShareableLink(scene);\n\n await navigator.share({ url: shareUrl });\n});\n```\n\n#### `importScene` and `exportScene`\n\nHandle scene import/export operations with support for both scene files and archives.\n\n```javascript\n// Import scene or archive\ncesdk.actions.register('importScene', async ({ format }) => {\n if (format === 'archive') {\n console.log('Archive import requested');\n\n // Production:\n // const archive = await yourAPI.loadArchive();\n // await cesdk.engine.scene.loadFromArchiveURL(archive);\n } else {\n console.log('Scene import requested');\n\n // Production:\n // const scene = await yourAPI.loadScene();\n // await cesdk.engine.scene.loadFromString(scene);\n }\n});\n\n// Export scene or archive\ncesdk.actions.register('exportScene', async ({ format }) => {\n if (format === 'archive') {\n const archive = await cesdk.engine.scene.saveToArchive();\n console.log('Archive ready for export:', archive.length, 'bytes');\n\n // Production:\n // await yourAPI.uploadArchive(archive);\n } else {\n const scene = await cesdk.engine.scene.saveToString();\n console.log('Scene ready for export:', scene.length, 'characters');\n\n // Production:\n // await yourAPI.uploadScene(scene);\n }\n});\n```\n\n### Export Operations\n\n#### `exportDesign`\n\nHandles all export operations (images, PDFs, videos). Default implementation downloads the exported file.\n\n```javascript\n// Basic implementation\ncesdk.actions.register('exportDesign', async (options) => {\n // Use the utils API to perform the export with loading dialog\n const { blobs, options: exportOptions } = await cesdk.utils.export(options);\n console.log('Exported', blobs.length, 'files');\n blobs.forEach((blob, i) => console.log(`File ${i + 1}:`, blob.size, 'bytes'));\n\n // Production:\n // await Promise.all(blobs.map(blob => yourCDN.upload(blob)));\n\n cesdk.ui.showNotification('Export completed successfully');\n});\n\n// Direct engine export with custom loading dialog (bypassing utils)\ncesdk.actions.register('exportDesign', async (options) => {\n const dialogController = cesdk.utils.showLoadingDialog({\n title: 'Exporting',\n message: 'Processing your export...'\n });\n\n try {\n const page = cesdk.engine.scene.getCurrentPage();\n if (page === null) {\n throw new Error('No page selected for export');\n }\n let result;\n\n if (options?.mimeType?.startsWith('video/')) {\n // Video export with progress\n result = await cesdk.engine.block.exportVideo(page, {\n ...options,\n onProgress: (rendered, encoded, total) => {\n dialogController.updateProgress({\n value: rendered,\n max: total\n });\n }\n });\n } else {\n // Static export (image/PDF)\n result = await cesdk.engine.block.export(page, options);\n }\n\n console.log('File ready for export:', result.size, 'bytes');\n\n // Production:\n // await yourCDN.upload(result);\n\n dialogController.showSuccess({\n title: 'Export Complete',\n message: 'Files uploaded successfully'\n });\n } catch (error) {\n dialogController.showError({\n title: 'Export Failed',\n message: 'Could not complete the export'\n });\n throw error;\n }\n});\n```\n\n### File Upload Action\n\n#### `uploadFile`\n\nHandles file uploads to asset sources. Default implementation uses local upload for development.\n\n```javascript\n// Register production upload handler\ncesdk.actions.register('uploadFile', async (file, onProgress, context) => {\n console.log('Uploading file:', file.name, file.size, 'bytes');\n onProgress(50); // Simulate progress\n await new Promise((resolve) => setTimeout(resolve, 500));\n onProgress(100);\n\n // Production:\n // const asset = await yourStorageService.upload(file, {\n // onProgress: (percent) => onProgress(percent),\n // context\n // });\n\n // Return AssetDefinition\n return {\n id: 'local-' + Date.now(),\n label: { en: file.name },\n meta: {\n uri: URL.createObjectURL(file),\n thumbUri: URL.createObjectURL(file),\n kind: 'image',\n width: 1920,\n height: 1080\n // Production:\n // uri: asset.url,\n // thumbUri: asset.thumbnailUrl,\n // width: asset.width,\n // height: asset.height\n }\n };\n});\n```\n\nYou can control which file types users can upload by setting the `upload/supportedMimeTypes` setting:\n\n```javascript\n// Example 1: Only allow images\ncesdk.engine.editor.setSettingString(\n 'upload/supportedMimeTypes',\n 'image/png,image/jpeg,image/gif,image/svg+xml'\n);\n\n// Example 2: Allow images and videos\ncesdk.engine.editor.setSettingString(\n 'upload/supportedMimeTypes',\n 'image/png,image/jpeg,image/gif,video/mp4,video/quicktime'\n);\n\n// Example 3: Allow specific document types\ncesdk.engine.editor.setSettingString(\n 'upload/supportedMimeTypes',\n 'application/pdf,image/png,image/jpeg'\n);\n```\n\n> **Caution:** The default `uploadFile` implementation uses local upload for development\n> only. Always register a proper upload handler for production.\n\n### Unsupported Browser Action\n\n#### `onUnsupportedBrowser`\n\nHandles unsupported browser detection. No default implementation is provided.\n\n```javascript\n// Register handler for unsupported browsers\ncesdk.actions.register('onUnsupportedBrowser', () => {\n // Redirect to a custom compatibility page\n window.location.href = '/browser-not-supported';\n});\n```\n\n### Video Support Actions\n\nCE.SDK provides actions to detect video capabilities at runtime. These actions help you handle browsers and platforms that lack required video codecs, particularly Linux browsers and Firefox.\n\n#### `video.decode.checkSupport`\n\nChecks if the browser supports video decoding and playback via the WebCodecs API. If unsupported, displays a blocking error dialog that users cannot dismiss.\n\nReturns `true` if video decoding is supported, `false` otherwise.\n\n```javascript\n// Check video decode support before loading video content\nconst isSupported = cesdk.actions.run('video.decode.checkSupport');\n\nif (!isSupported) {\n // A blocking error dialog is shown automatically\n // The user cannot proceed with video editing\n return;\n}\n\n// Safe to proceed with video content\nawait cesdk.engine.scene.loadFromURL(videoSceneUrl);\n\n// You can also disable the dialog and handle feedback yourself:\nconst supportedSilently = cesdk.actions.run('video.decode.checkSupport', {\n dialog: false\n});\n```\n\n**Options:**\n\n| Option | Type | Default | Description |\n| -------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------- |\n| `dialog` | `boolean \\| { show: boolean; backdrop?: 'transparent' \\| 'opaque' }` | `true` (backdrop: `'opaque'`) | Controls dialog display. Use `false` to disable, or an object for fine-grained control. |\n\n> **Caution:** The `video.decode.checkSupport` action shows a blocking dialog with no dismiss option\n> when video is not supported. Only call this action when you intend to work\n> with video content.\n\n#### `video.encode.checkSupport`\n\nChecks if the browser supports video encoding/export (H.264 video and AAC audio encoding). If unsupported, displays a warning dialog that users can dismiss to continue editing.\n\nReturns a `Promise<boolean>` - `true` if video encoding is supported, `false` otherwise.\n\n```javascript\n// Check video encode support before attempting export\nconst canExport = await cesdk.actions.run('video.encode.checkSupport');\n\nif (!canExport) {\n // A warning dialog is shown automatically\n // User can dismiss and continue editing\n // Consider offering server-side export as alternative\n console.log('Video export unavailable - consider server-side rendering');\n}\n\n// You can also disable the dialog and handle feedback yourself:\nconst canExportSilently = await cesdk.actions.run('video.encode.checkSupport', {\n dialog: false\n});\n```\n\n**Options:**\n\n| Option | Type | Default | Description |\n| -------- | -------------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------- |\n| `dialog` | `boolean \\| { show: boolean; backdrop?: 'transparent' \\| 'opaque' }` | `true` (backdrop: `'transparent'`) | Controls dialog display. Use `false` to disable, or an object for fine-grained control. |\n\n> **Tip:** For platforms that don't support client-side video export (Linux, Firefox),\n> consider using [CE.SDK Renderer](#broken-link-7f3e9a)\n> for server-side video rendering.\n\n#### Platform Support\n\n| Platform | Video Import | Video Export |\n| ---------------------------- | ------------ | ------------ |\n| Chrome/Edge (Windows, macOS) | ✅ | ✅ |\n| Safari (macOS) | ✅ | ✅ |\n| Chrome (Linux) | ❌ | ❌ |\n| Firefox (all platforms) | ❌ | ❌ |\n\n### Zoom Actions\n\nCE.SDK provides built-in zoom actions for controlling the viewport zoom level and focus. These actions are automatically registered and can be customized or called programmatically.\n\n#### Available Zoom Actions\n\n- `zoom.toBlock` - Zoom to a specific block with configurable padding\n- `zoom.toPage` - Zoom to the current page (or a specified page)\n- `zoom.toSelection` - Zoom to the currently selected blocks\n- `zoom.in` - Zoom in by one step\n- `zoom.out` - Zoom out by one step\n- `zoom.toLevel` - Set zoom to a specific level\n\n#### `zoom.toBlock`\n\nZooms the viewport to fit a specific block.\n\n```javascript\n// Zoom to a block with default settings\nawait cesdk.actions.run('zoom.toBlock', blockId);\n\n// Zoom with custom padding and animation\nawait cesdk.actions.run('zoom.toBlock', blockId, {\n padding: 50, // Uniform padding on all sides\n animate: true,\n autoFit: false\n});\n\n// Different padding for each side\nawait cesdk.actions.run('zoom.toBlock', blockId, {\n padding: { top: 20, bottom: 20, left: 40, right: 40 },\n animate: {\n duration: 0.3,\n easing: 'EaseInOut'\n }\n});\n```\n\n#### `zoom.toPage`\n\nZooms to the current page or a specified page. If no options are provided, defaults to the current page.\n\n```javascript\n// Zoom to current page with auto-fit\nawait cesdk.actions.run('zoom.toPage', {\n autoFit: true,\n animate: false\n});\n\n// Zoom with custom padding\nawait cesdk.actions.run('zoom.toPage', {\n padding: { x: 40, y: 80 },\n animate: true\n});\n```\n\n#### `zoom.toSelection`\n\nZooms to fit all currently selected blocks in the viewport.\n\n```javascript\n// Zoom to selection with animation\nawait cesdk.actions.run('zoom.toSelection', {\n padding: 40,\n animate: true\n});\n\n// Auto-fit to selection\nawait cesdk.actions.run('zoom.toSelection', {\n autoFit: true,\n padding: { x: 20, y: 20 }\n});\n```\n\n#### `zoom.in` and `zoom.out`\n\nStep-based zoom controls with configurable limits.\n\n```javascript\n// Zoom in with default settings\nawait cesdk.actions.run('zoom.in');\n\n// Zoom in with custom maximum\nawait cesdk.actions.run('zoom.in', {\n maxZoom: 4, // Maximum zoom level\n animate: true\n});\n\n// Zoom out with custom minimum\nawait cesdk.actions.run('zoom.out', {\n minZoom: 0.25, // Minimum zoom level\n animate: {\n duration: 0.2,\n easing: 'EaseOut'\n }\n});\n```\n\n#### `zoom.toLevel`\n\nSets the zoom to a specific level.\n\n```javascript\n// Set zoom to 100%\nawait cesdk.actions.run('zoom.toLevel', 1.0);\n\n// Set zoom to 200% with animation\nawait cesdk.actions.run('zoom.toLevel', 2.0, {\n animate: true,\n minZoom: 0.125,\n maxZoom: 32\n});\n\n// Fit to width (50% zoom)\nawait cesdk.actions.run('zoom.toLevel', 0.5, {\n animate: {\n duration: 0.3,\n easing: 'EaseInOut'\n }\n});\n```\n\n#### Padding Options\n\nPadding can be specified in multiple ways:\n\n```javascript\n// Uniform padding on all sides\n{ padding: 20 }\n\n// Different horizontal and vertical padding\n{ padding: { x: 40, y: 20 } }\n\n// Individual padding for each side\n{ padding: { top: 10, bottom: 20, left: 30, right: 40 } }\n```\n\n#### Animation Options\n\nAnimation can be a boolean or an object with detailed settings:\n\n```javascript\n// Simple animation toggle\n{ animate: true } // Uses default duration and easing\n{ animate: false } // No animation\n\n// Detailed animation configuration\n{\n animate: {\n duration: 0.3, // Duration in seconds\n easing: 'EaseInOut', // 'Linear', 'EaseIn', 'EaseOut', or 'EaseInOut'\n interruptible: true // Whether the animation can be interrupted\n }\n}\n```\n\n#### Auto-Fit Mode\n\nThe `autoFit` option enables automatic zoom adjustment when the viewport resizes:\n\n```javascript\n// Enable auto-fit to maintain proper framing\nawait cesdk.actions.run('zoom.toPage', {\n autoFit: true,\n padding: { x: 40, y: 80 }\n});\n```\n\nWhen auto-fit is enabled, the zoom level will automatically adjust to keep the target properly framed when the viewport size changes.\n\n#### Custom Zoom Action Example\n\nYou can override the default zoom actions with custom implementations:\n\n```javascript\n// Custom zoom to page with analytics\ncesdk.actions.register('zoom.toPage', async (options) => {\n // Track zoom event\n console.log('User zoomed to page');\n\n // Get current page\n const currentPage = cesdk.engine.scene.getCurrentPage();\n if (!currentPage) return;\n\n // Apply custom zoom logic\n await cesdk.engine.scene.zoomToBlock(currentPage, {\n padding: options?.padding ?? { x: 50, y: 100 },\n animate: options?.animate ?? true\n });\n\n // Custom post-zoom behavior\n cesdk.ui.showNotification('Zoomed to page');\n});\n```\n\n### Video Timeline Zoom Actions\n\nThe video timeline has its own set of zoom controls for managing the timeline view. These actions are registered when the video timeline component is active and provide instant zoom without animation.\n\n#### `timeline.zoom.in`\n\nZooms in the video timeline by one step (multiplies current zoom level by 1.25).\n\n```javascript\n// Zoom in the timeline\nawait cesdk.actions.run('timeline.zoom.in');\n```\n\n#### `timeline.zoom.out`\n\nZooms out the video timeline by one step (divides current zoom level by 1.25).\n\n```javascript\n// Zoom out the timeline\nawait cesdk.actions.run('timeline.zoom.out');\n```\n\n#### `timeline.zoom.fit`\n\nAutomatically adjusts the timeline zoom to fit all content in the visible area.\n\n```javascript\n// Fit timeline to show all content\nawait cesdk.actions.run('timeline.zoom.fit');\n```\n\n#### `timeline.zoom.toLevel`\n\nSets the timeline zoom to a specific level.\n\n```javascript\n// Set timeline zoom to 100%\nawait cesdk.actions.run('timeline.zoom.toLevel', 1.0);\n\n// Set timeline zoom to 150%\nawait cesdk.actions.run('timeline.zoom.toLevel', 1.5);\n\n// Set timeline zoom to 50%\nawait cesdk.actions.run('timeline.zoom.toLevel', 0.5);\n```\n\n#### `timeline.zoom.reset`\n\nResets the timeline zoom to the default level (1.0 or 100%).\n\n```javascript\n// Reset timeline zoom to default\nawait cesdk.actions.run('timeline.zoom.reset');\n```\n\n### Scroll Actions\n\nCE.SDK provides a scroll action for panning the viewport to different pages without changing the zoom level. This is useful for multi-page navigation where you want to maintain the current zoom.\n\n#### `scroll.toPage`\n\nScrolls the viewport to center on a specific page without changing the zoom level.\n\n```javascript\n// Scroll to current page without animation\nawait cesdk.actions.run('scroll.toPage');\n\n// Scroll to current page with smooth animation\nawait cesdk.actions.run('scroll.toPage', {\n animate: true\n});\n\n// Scroll to a specific page\nawait cesdk.actions.run('scroll.toPage', {\n pageId: myPageId,\n animate: true\n});\n```\n\n#### Parameters\n\nThe `scroll.toPage` action accepts an optional options object:\n\n- `pageId` (optional): The ID of the page to scroll to. If not provided, scrolls to the current page.\n- `animate` (optional): Whether to animate the scroll transition. Default is `false`.\n\n#### Scroll vs Zoom\n\nThe key difference between `scroll.toPage` and `zoom.toPage`:\n\n- **`scroll.toPage`**: Pans the viewport to center on the page while maintaining the current zoom level\n- **`zoom.toPage`**: Adjusts the zoom level to fit the page within the viewport with padding\n\nUse `scroll.toPage` when you want to navigate between pages in a multi-page document while keeping the same zoom level. Use `zoom.toPage` when you want to frame a page properly within the viewport.\n\n## Utils API\n\nCE.SDK provides a Utils API with utility functions for common operations. These utilities are available through `cesdk.utils`:\n\n### Loading Dialogs\n\n```javascript\n// Create and manage loading dialogs\nconst dialogController = cesdk.utils.showLoadingDialog({\n title: 'Processing...',\n message: 'Please wait', // Can also be an array of strings\n progress: 0, // Initial progress value or 'indeterminate'\n cancelLabel: 'Cancel',\n abortTitle: 'Abort Operation?',\n abortMessage: 'Are you sure you want to abort?',\n abortLabel: 'Abort',\n size: 'large', // 'regular' or 'large'\n clickOutsideToClose: false,\n onAbort: () => console.log('User cancelled'),\n onDone: () => console.log('Dialog closed')\n});\n\n// Update progress\ndialogController.updateProgress({ value: 50, max: 100 });\n\n// Show success or error\ndialogController.showSuccess({\n title: 'Done!',\n message: 'Operation completed'\n});\ndialogController.showError({ title: 'Error', message: 'Something went wrong' });\n\n// Close dialog\ndialogController.close();\n```\n\n### Export Utility\n\nThe export utility automatically handles both static (images, PDFs) and video exports:\n\n```javascript\n// Export image or PDF\nconst { blobs, options } = await cesdk.utils.export({\n mimeType: 'image/png',\n pngCompressionLevel: 7\n});\n\n// Export video (automatically detected by MIME type)\nconst { blobs, options } = await cesdk.utils.export({\n mimeType: 'video/mp4',\n onProgress: (rendered, encoded, total) => {\n console.log(`Progress: ${rendered}/${total} frames`);\n }\n});\n```\n\n### File Operations\n\n```javascript\n// Load file from user\nconst file = await cesdk.utils.loadFile({\n accept: 'image/*',\n returnType: 'File' // 'dataURL', 'objectURL', 'text', 'blob', 'arrayBuffer', or 'File'\n});\n\n// Download file to user's device\nawait cesdk.utils.downloadFile(blob, 'image/png');\n\n// Local upload (development only)\nconst asset = await cesdk.utils.localUpload(file, context);\n```\n\n### Video Support Detection\n\nCheck browser video capabilities before working with video content:\n\n```javascript\n// Check if video decoding/playback is supported\nif (cesdk.utils.supportsVideoDecode()) {\n // Safe to load and play video content\n await cesdk.engine.scene.loadFromURL(videoSceneUrl);\n} else {\n // Show fallback UI or message\n console.log('Video playback not available in this browser');\n}\n\n// Check if video encoding/export is supported (async)\nif (await cesdk.utils.supportsVideoEncode()) {\n // Video export is available\n const blob = await cesdk.engine.block.exportVideo(page);\n} else {\n // Suggest server-side rendering alternative\n console.log('Video export not available - consider using CE.SDK Renderer');\n}\n```\n\nThese utilities provide the same checks as the `video.decode.checkSupport` and `video.encode.checkSupport` actions, but without showing dialogs. Use them when you want to check support silently and handle the UI yourself.\n\n## Implementation Examples\n\n### Environment-Based Upload Strategy\n\n```javascript\n// Use local upload in development, CDN in production\ncesdk.actions.register('uploadFile', async (file, onProgress, context) => {\n if (process.env.NODE_ENV === 'development') {\n // Use utils for local upload\n return await cesdk.utils.localUpload(file, context);\n } else {\n console.log('Production upload for:', file.name);\n onProgress(100);\n\n // Production:\n // const asset = await yourCDNService.upload(file, {\n // onProgress: onProgress\n // });\n\n return {\n id: 'prod-' + Date.now(),\n label: { en: file.name },\n meta: {\n uri: URL.createObjectURL(file),\n thumbUri: URL.createObjectURL(file)\n // Production:\n // uri: asset.url,\n // thumbUri: asset.thumbnailUrl\n }\n };\n }\n});\n```\n\n### Combining Utils with Custom Logic\n\n```javascript\n// Use utils for heavy lifting, add custom business logic\ncesdk.actions.register('exportDesign', async (options) => {\n console.log('Export started:', { format: options?.mimeType });\n\n // Production:\n // analytics.track('export_started', { format: options?.mimeType });\n\n // Use utils to handle the export with loading dialog\n const { blobs, options: exportOptions } = await cesdk.utils.export(options);\n\n // Custom post-processing\n if (exportOptions.mimeType === 'application/pdf') {\n console.log('PDF ready for watermarking:', blobs[0].size, 'bytes');\n\n // Production:\n // const watermarkedBlob = await addWatermark(blobs[0]);\n // await cesdk.utils.downloadFile(watermarkedBlob, 'application/pdf');\n\n await cesdk.utils.downloadFile(blobs[0], 'application/pdf');\n } else {\n // Direct download for other formats\n await cesdk.utils.downloadFile(blobs[0], exportOptions.mimeType);\n }\n\n console.log('Export completed:', { format: exportOptions.mimeType });\n\n // Production:\n // analytics.track('export_completed', { format: exportOptions.mimeType });\n});\n```\n\n## Registering Custom Actions with Custom IDs\n\nBeyond the predefined action types, you can register actions with custom IDs for your own application-specific needs:\n\n```javascript\n// Register a custom action\ncesdk.actions.register('myCustomAction', async (data) => {\n console.log('Custom action triggered with:', data);\n return { success: true, processedData: data };\n});\n\n// Execute the custom action using run\nconst result = await cesdk.actions.run('myCustomAction', { someData: 'value' });\n\n// Or retrieve it for conditional execution\nconst customAction = cesdk.actions.get('myCustomAction');\nif (customAction) {\n const result = await customAction({ someData: 'value' });\n}\n```\n\n## Discovering Registered Actions\n\nUse `list()` to get all registered action IDs or find actions matching a pattern:\n\n```javascript\n// Get all registered action IDs\nconst registeredActions = cesdk.actions.list();\nconsole.log('Available actions:', registeredActions);\n\n// Find actions matching a pattern\nconst exportActions = cesdk.actions.list({ matcher: 'export*' });\nconsole.log('Export actions:', exportActions);\n```\n\n## Using Actions with Navigation Actions\n\nThe navigation bar actions in CE.SDK automatically use the registered actions:\n\n### Default Navigation Bar Actions\n\nThe default navigation bar actions map to actions:\n\n- Save action → `saveScene` action\n- Share action → `shareScene` action\n- Export actions → `exportDesign` action\n- Import scene/archive → `importScene` action\n- Export scene/archive → `exportScene` action\n\n---\n\n## More Resources\n\n- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation\n- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)\n- **[Web Documentation](./js.md)** - Interactive documentation with examples\n- **[Support](mailto:support@img.ly)** - Contact IMG.LY support\n",
|
|
8
8
|
"docs/guide/animation.md": "> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).\n\n**Navigation:** [Guides](./guides.md) > [Animation](./animation.md)\n\n---\n\n---\n\n## Related Pages\n\n- [Overview](./animation/overview.md) - Add motion to designs with support for keyframes, timeline editing, and programmatic animation control.\n- [Supported Animation Types](./animation/types.md) - Apply different animation types to design blocks in CE.SDK and configure their properties.\n- [Create Animations](./animation/create.md) - Build animations manually or with presets to animate objects, text, and scenes within your design.\n- [Edit Animations](./animation/edit.md) - Modify existing animations in CE.SDK by reading properties, changing duration and easing, adjusting direction, and replacing or removing animations from blocks.\n\n---\n\n## More Resources\n\n- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation\n- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)\n- **[Web Documentation](./js.md)** - Interactive documentation with examples\n- **[Support](mailto:support@img.ly)** - Contact IMG.LY support\n",
|