@cesdk/node-native 1.77.0-rc.3 → 1.77.0
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/README.md +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
package/lib/index.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../ts/src/index.ts", "../ts/src/CreativeEngine.ts", "../../shared/ts/src/types.ts", "../../shared/ts/src/blockTypes.ts", "../../shared/ts/src/color-guards.ts", "../../shared/ts/src/Logger.ts", "../../shared/ts/src/defaultLogger.ts", "../../shared/ts/src/api/VariableAPI.ts", "../ts/src/platform-packages.ts", "../ts/src/builtin-typeface.ts", "../ts/src/addDefaultAssetSources.ts", "../ts/src/configureEngine.ts", "../ts/src/license.ts", "../ts/src/types.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @cesdk/node-native - Native Node.js bindings for CE.SDK Creative Engine\n *\n * This package provides native Node.js bindings that match the API of @cesdk/node\n * (WASM version) but with native performance.\n */\n\nimport CreativeEngine from './CreativeEngine';\nimport {\n MimeType,\n LogLevel,\n defaultLogger,\n isRGBAColor,\n isCMYKColor,\n isSpotColor,\n ANIMATION_TYPES,\n DESIGN_BLOCK_TYPES,\n SHAPE_TYPES,\n FILL_TYPES,\n EFFECT_TYPES,\n BLUR_TYPES\n} from '@cesdk/shared';\nimport { CompressionFormat, CompressionLevel } from './types';\n\nexport default CreativeEngine;\n\n// UMD/CJS Compatibility\n// module.exports = CreativeEngine makes the class the default CJS export.\n// We then attach named exports as properties so CJS consumers can access them\n// via destructuring: const { MimeType } = require('@cesdk/node-native')\n//\n// Using `Object.defineProperty` (not plain assignment) so cjs-module-lexer\n// can recognize the named exports for ESM consumers doing\n// `import { MimeType } from '@cesdk/node-native'`. Mirrors @cesdk/node's\n// pattern in `bindings/wasm/js_node/src/index.ts, 96-108`.\nmodule.exports = CreativeEngine;\nObject.defineProperty(module.exports, '__esModule', { value: true });\nObject.defineProperty(module.exports, 'default', { value: CreativeEngine });\nObject.defineProperties(module.exports, {\n MimeType: { value: MimeType, enumerable: true },\n LogLevel: { value: LogLevel, enumerable: true },\n defaultLogger: { value: defaultLogger, enumerable: true },\n isRGBAColor: { value: isRGBAColor, enumerable: true },\n isCMYKColor: { value: isCMYKColor, enumerable: true },\n isSpotColor: { value: isSpotColor, enumerable: true },\n ANIMATION_TYPES: { value: ANIMATION_TYPES, enumerable: true },\n DESIGN_BLOCK_TYPES: { value: DESIGN_BLOCK_TYPES, enumerable: true },\n SHAPE_TYPES: { value: SHAPE_TYPES, enumerable: true },\n FILL_TYPES: { value: FILL_TYPES, enumerable: true },\n EFFECT_TYPES: { value: EFFECT_TYPES, enumerable: true },\n BLUR_TYPES: { value: BLUR_TYPES, enumerable: true },\n CompressionFormat: { value: CompressionFormat, enumerable: true },\n CompressionLevel: { value: CompressionLevel, enumerable: true }\n});\n\n// Re-export all types from @cesdk/shared\nexport type {\n // Core IDs\n DesignBlockId,\n HistoryId,\n SubscriptionId,\n\n // Configuration\n Configuration,\n ExportOptions,\n VideoExportOptions,\n AudioExportOptions,\n\n // Color types\n RGBAColor,\n CMYKColor,\n SpotColor,\n Color,\n ColorInternal,\n RGBColor,\n HexColorString,\n PaletteColor,\n ColorSpace,\n\n // Geometry types\n Source,\n XYWH,\n CharacterInkBox,\n Range,\n Insets,\n Vec2,\n Vec3,\n Size2,\n ZoomAutoFitAxis,\n EditMode,\n TrackingMetadata,\n\n // Typography types\n Typeface,\n Font,\n FontStyle,\n FontWeight,\n GradientColorStop,\n TypefaceDefinition,\n\n // Asset types\n Asset,\n AssetFilter,\n AssetPropertyFilter,\n AssetPropertyPath,\n AssetsQuery,\n AssetQueryData,\n AssetsQueryResult,\n AssetSourceLicense,\n AssetSourceCredits,\n AssetSource,\n AssetDefinition,\n AssetResult,\n CompleteAssetResult,\n AssetMetaData,\n AssetPayload,\n AssetRGBColor,\n AssetCMYKColor,\n AssetSpotColor,\n AssetColor,\n AssetFixedAspectRatio,\n AssetFreeAspectRatio,\n AssetContentAspectRatio,\n AssetFixedSize,\n AssetTransformPreset,\n AssetProperty,\n AssetStringProperty,\n AssetNumberProperty,\n AssetBooleanProperty,\n AssetEnumProperty,\n AssetColorProperty,\n AudioTrackInfo,\n Locale,\n Groups,\n SortingOrder,\n ApplyAssetOptions,\n\n // Mode and unit types\n SceneMode,\n DesignUnit,\n SceneDesignUnit,\n FontSizeUnit,\n PositionMode,\n SizeMode,\n BlendMode,\n\n // Stroke types\n StrokeStyle,\n StrokePosition,\n StrokeCornerGeometry,\n\n // Text types\n TextHorizontalAlignment,\n TextVerticalAlignment,\n TextCase,\n ListStyle,\n TextFontSizeOptions,\n HorizontalBlockAlignment,\n VerticalBlockAlignment,\n\n // Block / shape / fill / effect / blur / animation\n DesignBlockType,\n DesignBlockTypeShorthand,\n DesignBlockTypeLonghand,\n ShapeType,\n ShapeTypeShorthand,\n ShapeTypeLonghand,\n FillType,\n FillTypeShorthand,\n FillTypeLonghand,\n EffectType,\n EffectTypeShorthand,\n EffectTypeLonghand,\n BlurType,\n BlurTypeShorthand,\n BlurTypeLonghand,\n AnimationType,\n AnimationTypeShorthand,\n AnimationTypeLonghand,\n ObjectType,\n ObjectTypeShorthand,\n ObjectTypeLonghand,\n\n // Block options\n SplitOptions,\n DominantColor,\n DominantColorsOptions,\n AnimationEntry,\n AnimationOptions,\n DropShadowOptions,\n AddImageOptions,\n AddVideoOptions,\n AudioFromVideoOptions,\n BooleanOperation,\n\n // Property and event types\n PropertyType,\n BlockEvent,\n BlockEventType,\n SceneLayout,\n PageDuration,\n CutoutOperation,\n\n // Misc\n RoleString,\n Scope,\n MimeType as MimeTypeString,\n ImageMimeType,\n AudioMimeType,\n VideoMimeType,\n ApplicationMimeType,\n\n // Editor settings\n SettingType,\n SettingsBool,\n SettingsInt,\n SettingsFloat,\n SettingsString,\n SettingsColor,\n SettingsColorRGBA,\n SettingsEnum,\n OptionalPrefix,\n SyncURIResolver,\n AsyncURIResolver,\n\n // Logger\n Logger\n} from '@cesdk/shared';\n\n// Export constants (runtime values)\nexport {\n MimeType,\n LogLevel,\n defaultLogger,\n isRGBAColor,\n isCMYKColor,\n isSpotColor,\n ANIMATION_TYPES,\n DESIGN_BLOCK_TYPES,\n SHAPE_TYPES,\n FILL_TYPES,\n EFFECT_TYPES,\n BLUR_TYPES\n};\n\n// Export native-specific types\nexport type {\n AnimationEasing,\n FontMetrics,\n MovementConstraintRule,\n MovementConstraintScope,\n ResolvedMovementConstraint,\n TextDecorationConfig,\n TextDecorationLine,\n TextDecorationStyle,\n ZoomOptions\n} from './types';\n\n// Native-specific enums (value-side exports for runtime use)\nexport { CompressionFormat, CompressionLevel };\n\n// Default / demo asset source IDs (mirrors @cesdk/node)\nexport type {\n DefaultAssetSourceId,\n DemoAssetSourceId\n} from './addDefaultAssetSources';\n\n// Render-device selector (PyTorch-style strings). Mirrored on Configuration.device.\nexport type { Device } from '@cesdk/shared';\n\n// Backward-compat aliases (deprecated; mirror @cesdk/node renamings)\nexport type {\n /** @deprecated Use TextHorizontalAlignment instead */\n TextHorizontalAlignment as HorizontalTextAlignment,\n /** @deprecated Use TextVerticalAlignment instead */\n TextVerticalAlignment as VerticalTextAlignment\n} from '@cesdk/shared';\n\n// API class type re-exports \u2014 mirrors the WASM binding's\n// `bindings/wasm/js_node/src/index.ts` so consumers that did\n// `import type { BlockAPI } from '@cesdk/node'` keep compiling under\n// `@cesdk/node-native`.\nexport type {\n BlockAPI,\n SceneAPI,\n EditorAPI,\n AssetAPI,\n EventAPI,\n VariableAPI,\n} from './CreativeEngine';\n\n// History-update event payload \u2014 used by `editor.onHistoryUpdated` and\n// the `block.onUpdated` family. WASM re-exports it from its `EditorAPI`\n// module; here we pass it through `@cesdk/shared`.\nexport type { HistoryUpdate } from '@cesdk/shared';\n", "/**\n * Native Node.js CreativeEngine implementation\n *\n * This class wraps the native Node-API addon and provides the same\n * API as the WASM version (@cesdk/node).\n */\n\nimport * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport * as crypto from 'node:crypto';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport type {\n Configuration,\n DesignBlockId,\n HistoryId,\n SubscriptionId,\n ExportOptions,\n VideoExportOptions,\n AudioExportOptions,\n Color,\n BlockEvent,\n SceneLayout,\n RGBAColor,\n CMYKColor,\n SpotColor,\n Source,\n XYWH,\n CharacterInkBox,\n StrokeCap,\n Range,\n Insets,\n Typeface,\n GradientColorStop,\n Asset,\n AssetsQuery,\n AssetsQueryResult,\n AssetSourceLicense,\n AssetSourceCredits,\n AssetSource,\n AssetDefinition,\n AssetResult,\n CompleteAssetResult,\n AssetProperty,\n SplitOptions,\n AnimationOptions,\n AnimationEntry,\n DropShadowOptions,\n AddImageOptions,\n AddVideoOptions,\n FontSizeUnit,\n TextFontSizeOptions,\n SyncURIResolver,\n AsyncURIResolver,\n HistoryUpdate,\n HorizontalContentFillAlignment,\n VerticalContentFillAlignment,\n IBlockAPI,\n ISceneAPI,\n IEditorAPI,\n IAssetAPI,\n IEventAPI,\n ICreativeEngine\n} from '@cesdk/shared';\n// VariableAPI is a runtime class (not a type) \u2014 must be imported separately.\nimport { VariableAPI } from '@cesdk/shared';\nimport { platformPackageFor } from './platform-packages';\nimport { BUILTIN_TYPEFACE_JSON } from './builtin-typeface';\nimport {\n loadDefaultAssetSources,\n loadDemoAssetSources,\n type DefaultAssetSourceId,\n type DemoAssetSourceId\n} from './addDefaultAssetSources';\nimport { configureEngine } from './configureEngine';\nimport { downloadAndCheckLicense } from './license';\nimport type {\n AnimationEasing,\n CompressionFormat,\n CompressionLevel,\n CreateSceneOptions,\n FontMetrics,\n MovementConstraintRule,\n MovementConstraintScope,\n ResolvedMovementConstraint,\n TextDecorationConfig,\n TextDecorationLine,\n TextDecorationStyle,\n ZoomOptions\n} from './types';\n\n// Type guards for Color types\nfunction isRGBAColor(color: Color): color is RGBAColor {\n return (\n 'r' in color &&\n 'a' in color &&\n (color as RGBAColor).r !== undefined &&\n (color as RGBAColor).a !== undefined\n );\n}\n\nfunction isSpotColor(color: Color): color is SpotColor {\n return 'name' in color && (color as SpotColor).name !== undefined;\n}\n\nfunction isCMYKColor(color: Color): color is CMYKColor {\n return (\n 'c' in color &&\n 'm' in color &&\n 'y' in color &&\n 'k' in color &&\n (color as CMYKColor).c !== undefined &&\n (color as CMYKColor).m !== undefined &&\n (color as CMYKColor).y !== undefined &&\n (color as CMYKColor).k !== undefined\n );\n}\n\n/**\n * Internal color representation used by the node native binding.\n * Converts between the internal format (colorSpace, components) and\n * the user-friendly format (r,g,b,a or c,m,y,k or spotColorName).\n */\ninterface NativeColorInternal {\n colorSpace: number;\n components: {\n x: number;\n y: number;\n z: number;\n w: number;\n };\n spotColorName: string;\n tint: number;\n externalReference: string;\n}\n\nnamespace NativeColorInternal {\n export enum ColorSpace {\n sRGB = 0,\n CMYK = 1,\n SpotColor = 2\n }\n\n export function toColor(color: NativeColorInternal): Color {\n switch (color.colorSpace) {\n case ColorSpace.sRGB:\n return {\n r: color.components.x,\n g: color.components.y,\n b: color.components.z,\n a: color.components.w\n };\n case ColorSpace.SpotColor: {\n return {\n name: color.spotColorName,\n tint: color.tint,\n externalReference: color.externalReference\n };\n }\n case ColorSpace.CMYK:\n return {\n c: color.components.x,\n m: color.components.y,\n y: color.components.z,\n k: color.components.w,\n tint: color.tint\n };\n default:\n throw new Error('Unknown color space!');\n }\n }\n\n export function fromColor(color: Color): NativeColorInternal {\n if (isRGBAColor(color)) {\n return {\n colorSpace: ColorSpace.sRGB,\n components: { x: color.r, y: color.g, z: color.b, w: color.a },\n spotColorName: '',\n tint: 1,\n externalReference: ''\n };\n } else if (isCMYKColor(color)) {\n return {\n colorSpace: ColorSpace.CMYK,\n components: { x: color.c, y: color.m, z: color.y, w: color.k },\n spotColorName: '',\n tint: color.tint ?? 1,\n externalReference: ''\n };\n } else if (isSpotColor(color)) {\n return {\n colorSpace: ColorSpace.SpotColor,\n components: { x: 0, y: 0, z: 0, w: 0 },\n spotColorName: color.name,\n tint: color.tint,\n externalReference: color.externalReference\n };\n }\n throw new Error('Unknown color space!');\n }\n}\n\n/**\n * Convert a UTF-16 code-unit range to the grapheme range the engine expects.\n * Negative values pass through unchanged (the engine reads them as \"fall back\n * to current selection / full text\").\n */\nfunction convertUTF16ToGraphemeRange(\n text: string,\n from: number,\n to: number\n): { from: number; to: number } {\n if (from < 0 && to < 0) {\n return { from, to };\n }\n // Positions inside a multi-code-unit grapheme round UP to the next grapheme,\n // matching the engine's `convertUTF16ToGraphemeRange` semantics.\n // 'en' matches the engine's ICU break-iterator locale; using the host\n // locale (default) drifts on Thai/Indic/Khmer text where grapheme cluster\n // boundaries differ across locales.\n const segmenter = new Intl.Segmenter('en');\n const codeUnitToGrapheme: number[] = new Array(text.length + 1);\n let codeUnit = 0;\n let graphemeIdx = 0;\n for (const seg of segmenter.segment(text)) {\n for (let i = codeUnit; i <= seg.index; i++) {\n codeUnitToGrapheme[i] = graphemeIdx;\n }\n codeUnit = seg.index + 1;\n graphemeIdx++;\n }\n for (let i = codeUnit; i <= text.length; i++) {\n codeUnitToGrapheme[i] = graphemeIdx;\n }\n\n const fromGrapheme =\n from < 0 ? from : codeUnitToGrapheme[Math.min(from, text.length)];\n const toGrapheme =\n to < 0 ? to : codeUnitToGrapheme[Math.min(to, text.length)];\n return { from: fromGrapheme, to: toGrapheme };\n}\n\n/** Reverse of {@link convertUTF16ToGraphemeRange}. */\nfunction convertGraphemeToUTF16Range(\n text: string,\n from: number,\n to: number\n): { from: number; to: number } {\n if (from < 0 && to < 0) {\n return { from, to };\n }\n // 'en' matches the engine's ICU break-iterator locale; using the host\n // locale (default) drifts on Thai/Indic/Khmer text where grapheme cluster\n // boundaries differ across locales.\n const segmenter = new Intl.Segmenter('en');\n const graphemeStarts: number[] = [];\n for (const seg of segmenter.segment(text)) {\n graphemeStarts.push(seg.index);\n }\n graphemeStarts.push(text.length);\n\n const fromUtf16 =\n from < 0\n ? from\n : from >= graphemeStarts.length\n ? text.length\n : graphemeStarts[from];\n const toUtf16 =\n to < 0\n ? to\n : to >= graphemeStarts.length\n ? text.length\n : graphemeStarts[to];\n return { from: fromUtf16, to: toUtf16 };\n}\n\n// Interface for the native addon module\ninterface NativeAddon {\n createEngine(basePath?: string, device?: string): NativeEngine;\n}\n\n// Load the native addon with platform-aware binary resolution.\n//\n// Resolution order:\n// 0. `CESDK_NATIVE_BINARY_PATH` env var \u2014 escape hatch for air-gapped /\n// custom-distro installs and the in-tree test runner (see\n// tests/test-setup.ts). Validated: must be an absolute path, must end\n// in `.node`, and is resolved through `fs.realpathSync` so a symlink\n// pointing at a `.dylib` / `.so` / `.js` can't bypass the suffix\n// check. Bottom line: don't set this env var from untrusted input.\n// 1. Sibling `@cesdk/node-native-<platform>-<arch>` package \u2014 the npm\n// production layout (matches sharp / esbuild / @swc/core).\n// 2. In-package `cesdk_native.node` next to this module \u2014 single-package\n// distribution fallback (rare; useful for cookbook bundles).\n//\n// The actual `require()` is deferred until first `CreativeEngine.init()`\n// call (lazy load). This trims cold-start for consumers who only import\n// the module to read its TS types or constants \u2014 Lambda layers, serverless\n// platforms, scripts that gate engine usage on a runtime flag.\n//\n// Integrity: if a `cesdk_native.node.sha256` sidecar is shipped alongside\n// the .node (the release-stage layout produced by build.release.sh), we\n// verify the binary matches before `require()`-ing it. Detects post-publish\n// tampering (registry-side substitution, MITM during install). Skip via\n// `CESDK_SKIP_BINARY_VERIFY=1` for cold-start-sensitive deployments.\n//\n// Set `CESDK_DEBUG=1` or `DEBUG=cesdk:native` to log every step to stderr\n// (stdout stays clean for consumers piping JSON).\n\nconst NATIVE_DEBUG_ENABLED =\n process.env.CESDK_DEBUG === '1' ||\n /(^|,)cesdk(:native)?(,|$)/.test(process.env.DEBUG ?? '');\n\nfunction nativeDebug(message: string): void {\n if (NATIVE_DEBUG_ENABLED) {\n // eslint-disable-next-line no-console\n console.error(`[cesdk:native] ${message}`);\n }\n}\n\n// Streaming SHA-256 of the .node file. Async so the ~32 MiB read is streamed\n// off the event loop (it runs inside the already-async init() path); 64 KiB\n// chunks keep peak memory bounded.\nasync function verifyAddonSha256(addonPath: string): Promise<void> {\n if (process.env.CESDK_SKIP_BINARY_VERIFY === '1') {\n nativeDebug('SHA-256 verification disabled via CESDK_SKIP_BINARY_VERIFY=1');\n return;\n }\n const shaPath = `${addonPath}.sha256`;\n if (!fs.existsSync(shaPath)) {\n // No sidecar means no commitment to a particular hash \u2014 common in dev\n // (CMake build output has no sidecar) and on platforms we don't ship.\n // Silently skip; the binary still has to dlopen successfully below.\n return;\n }\n const shaContents = (await fs.promises.readFile(shaPath, 'utf8')).trim();\n // `shasum -a 256 cesdk_native.node` outputs `<hex> cesdk_native.node`.\n const expected = shaContents.split(/\\s+/)[0];\n if (!/^[0-9a-f]{64}$/i.test(expected)) {\n // A present-but-malformed sidecar is itself a corruption signal \u2014 fail\n // loud rather than silently skipping the integrity check.\n const err = new Error(\n `@cesdk/node-native: malformed SHA-256 sidecar at ${shaPath} \u2014 expected a ` +\n `64-char hex digest. Likely a corrupted or incomplete install. Re-install ` +\n `@cesdk/node-native (verify the package signature with ` +\n `\\`npm audit signatures\\`), or set CESDK_SKIP_BINARY_VERIFY=1 to bypass ` +\n `(not recommended in production).`\n ) as Error & { code?: string };\n err.code = 'ERR_CESDK_BINARY_TAMPERED';\n throw err;\n }\n const hasher = crypto.createHash('sha256');\n await new Promise<void>((resolve, reject) => {\n const stream = fs.createReadStream(addonPath, { highWaterMark: 64 * 1024 });\n stream.on('data', (chunk) => hasher.update(chunk));\n stream.on('error', reject);\n stream.on('end', () => resolve());\n });\n const actual = hasher.digest('hex');\n if (actual !== expected.toLowerCase()) {\n // The sidecar ships in the same tarball as the .node, so this is an\n // integrity/corruption check (truncated download, bad extraction, on-disk\n // bit-rot), NOT an anti-substitution control \u2014 anyone who can rewrite the\n // .node can rewrite the adjacent .sha256. Registry-side integrity is\n // covered by npm's registry signatures (`npm audit signatures`), not by\n // this hash.\n const err = new Error(\n `@cesdk/node-native: SHA-256 mismatch for native binary at ${addonPath}.\\n` +\n ` expected ${expected}\\n` +\n ` actual ${actual}\\n` +\n `The binary does not match its checksum sidecar \u2014 likely a corrupted or ` +\n `incomplete install. Re-install @cesdk/node-native (and verify the package ` +\n `signature with \\`npm audit signatures\\`), or set CESDK_SKIP_BINARY_VERIFY=1 ` +\n `to bypass (not recommended in production).`\n ) as Error & { code?: string };\n err.code = 'ERR_CESDK_BINARY_TAMPERED';\n throw err;\n }\n nativeDebug(`SHA-256 verified for ${addonPath}`);\n}\n\ntype LoadAttempt = { source: string; message: string; code?: string };\n\nfunction recordLoadError(\n bucket: LoadAttempt[],\n source: string,\n e: unknown\n): void {\n if (e instanceof Error) {\n const maybeCoded = e as Error & { code?: unknown };\n bucket.push({\n source,\n message: e.message,\n code: typeof maybeCoded.code === 'string' ? maybeCoded.code : undefined\n });\n } else {\n bucket.push({ source, message: String(e) });\n }\n}\n\n// A SHA-256 integrity failure must fail hard with its own message, not be\n// demoted to one line in the generic \"couldn't find the addon\" report (whose\n// recovery text \u2014 \"npm install --include=optional\" \u2014 is misleading for a\n// corrupt binary). Re-throw it so it escapes the per-path catch, matching the\n// env-override path which verifies outside any catch.\nfunction rethrowIfTampered(e: unknown): void {\n if ((e as { code?: unknown })?.code === 'ERR_CESDK_BINARY_TAMPERED') {\n throw e;\n }\n}\n\n// Refuse to run on Bun/Deno. This is a defensive guard, not a tested-and-failed\n// matrix: both runtimes document only partial node-addon-api / thread-safe-\n// function support, which the engine's async-callback lifecycle leans on\n// heavily, so loading is likely to crash confusingly rather than work. We fail\n// up-front with a pointer to @cesdk/node (WASM) instead of surfacing an opaque\n// native crash. Electron passes through to Node's loader and works untouched.\nfunction assertSupportedRuntime(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n if (typeof g.Bun !== 'undefined') {\n throw new Error(\n '@cesdk/node-native is not supported on Bun. Use @cesdk/node (WASM) instead.'\n );\n }\n if (typeof g.Deno !== 'undefined') {\n throw new Error(\n '@cesdk/node-native is not supported on Deno. Use @cesdk/node (WASM) instead.'\n );\n }\n}\n\n// Air-gapped / custom-distro override (CESDK_NATIVE_BINARY_PATH). Trusted\n// unconditionally \u2014 if it's wrong we want the error to reflect exactly what\n// was tried. Returns undefined when the env var is unset so the caller falls\n// through to the normal resolution order; throws on a set-but-invalid override.\nasync function resolveFromEnvOverride(): Promise<\n { addon: NativeAddon; addonPath: string } | undefined\n> {\n const envOverride = process.env.CESDK_NATIVE_BINARY_PATH;\n if (envOverride === undefined || envOverride === '') {\n return undefined;\n }\n nativeDebug(`CESDK_NATIVE_BINARY_PATH override -> ${envOverride}`);\n if (!path.isAbsolute(envOverride)) {\n throw new Error(\n `CESDK_NATIVE_BINARY_PATH must be an absolute path (got '${envOverride}').`\n );\n }\n if (!envOverride.endsWith('.node')) {\n throw new Error(\n `CESDK_NATIVE_BINARY_PATH must point to a .node file (got '${envOverride}').`\n );\n }\n // Resolve symlinks before the suffix check is \"trusted\" \u2014 a\n // `/tmp/evil.node -> /tmp/evil.dylib` symlink would otherwise satisfy the\n // literal `.node` suffix while pointing at arbitrary native code.\n let resolvedPath: string;\n try {\n resolvedPath = fs.realpathSync(envOverride);\n } catch (e) {\n throw new Error(\n `CESDK_NATIVE_BINARY_PATH at '${envOverride}' cannot be resolved: ${\n e instanceof Error ? e.message : String(e)\n }`\n );\n }\n if (!resolvedPath.endsWith('.node')) {\n throw new Error(\n `CESDK_NATIVE_BINARY_PATH symlink target '${resolvedPath}' is not a .node file (override path: '${envOverride}').`\n );\n }\n await verifyAddonSha256(resolvedPath);\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, import/no-dynamic-require, global-require\n const addon = require(resolvedPath);\n return { addon, addonPath: resolvedPath };\n } catch (e) {\n throw new Error(\n `Failed to load CESDK_NATIVE_BINARY_PATH override at '${resolvedPath}': ${\n e instanceof Error ? e.message : String(e)\n }`\n );\n }\n}\n\n// Sibling platform package (production install layout):\n// `@cesdk/node-native-<platform>-<arch>/cesdk_native.node`. Records the failure\n// and returns undefined so the caller can fall through.\nasync function resolveFromSiblingPackage(\n siblingPkg: string,\n errors: LoadAttempt[]\n): Promise<{ addon: NativeAddon; addonPath: string } | undefined> {\n try {\n const pkgJsonPath = require.resolve(`${siblingPkg}/package.json`);\n const loadPath = path.join(path.dirname(pkgJsonPath), 'cesdk_native.node');\n nativeDebug(`trying sibling package -> ${loadPath}`);\n await verifyAddonSha256(loadPath);\n // eslint-disable-next-line @typescript-eslint/no-require-imports, import/no-dynamic-require, global-require\n const addon = require(loadPath);\n return { addon, addonPath: loadPath };\n } catch (e) {\n rethrowIfTampered(e);\n recordLoadError(errors, `${siblingPkg}/cesdk_native.node`, e);\n return undefined;\n }\n}\n\n// In-package copy (single-package layout / dev source-tree). Only the monorepo\n// build sets this up; npm consumers never see it. Recorded into the dev bucket\n// (suppressed from production error reports).\nasync function resolveFromInPackage(\n errors: LoadAttempt[]\n): Promise<{ addon: NativeAddon; addonPath: string } | undefined> {\n const inPkgPath = path.join(__dirname, 'cesdk_native.node');\n nativeDebug(`trying in-package -> ${inPkgPath}`);\n try {\n await verifyAddonSha256(inPkgPath);\n // eslint-disable-next-line @typescript-eslint/no-require-imports, import/no-dynamic-require, global-require\n const addon = require(inPkgPath);\n return { addon, addonPath: inPkgPath };\n } catch (e) {\n rethrowIfTampered(e);\n recordLoadError(errors, inPkgPath, e);\n return undefined;\n }\n}\n\n// Assemble the user-facing \"couldn't load the addon\" error from the recorded\n// attempts. Recovery always points at the WASM package as the broader-\n// compatibility fallback \u2014 supported-platform users typically just need\n// `--include=optional`, but a missing-optional failure is still a moment where\n// switching to WASM is a viable shortcut.\nfunction buildLoadFailureError(\n key: string,\n siblingPkg: string | undefined,\n isProductionInstall: boolean,\n productionErrors: LoadAttempt[],\n devErrors: LoadAttempt[]\n): Error & { code?: string } {\n const recovery =\n siblingPkg !== undefined\n ? [\n `Recovery:`,\n ` npm install --include=optional ${siblingPkg}`,\n ` (or re-run the install with optional dependencies enabled)`,\n ` Or use @cesdk/node (WASM) for broader install coverage.`\n ].join('\\n')\n : [\n `Your platform/arch '${key}' is not supported by @cesdk/node-native.`,\n `Use @cesdk/node (WASM) for broader platform coverage.`\n ].join('\\n');\n\n const visibleErrors = isProductionInstall\n ? productionErrors\n : [...productionErrors, ...devErrors];\n\n const message = [\n `Failed to load the @cesdk/node-native addon for ${key}.`,\n ``,\n recovery,\n ``,\n `Tried:`,\n ...visibleErrors.map(\n (e) => ` - ${e.source}: ${e.message}${e.code ? ` [${e.code}]` : ''}`\n )\n ].join('\\n');\n\n // Preserve the most relevant error code (e.g. ERR_DLOPEN_FAILED when the\n // sibling exists but the .node fails to dlopen \u2014 wrong arch, missing shared\n // lib) so consumers can switch on it.\n const err = new Error(message) as Error & { code?: string };\n const codedError = visibleErrors.find((e) => e.code !== undefined);\n if (codedError?.code) {\n err.code = codedError.code;\n }\n return err;\n}\n\n// Resolution order: env override \u2192 sibling platform package \u2192 in-package copy.\n// First hit wins; if all miss, throw a single error listing every attempt.\nasync function loadNativeAddon(): Promise<{\n addon: NativeAddon;\n addonPath: string;\n}> {\n assertSupportedRuntime();\n\n const platform = process.platform;\n const arch = process.arch;\n const key = `${platform}-${arch}`;\n nativeDebug(`platform=${platform} arch=${arch} key=${key}`);\n\n // 0. Air-gapped / custom-distro override.\n const fromEnv = await resolveFromEnvOverride();\n if (fromEnv !== undefined) {\n return fromEnv;\n }\n\n // Heuristic: when our module sits inside a `node_modules/` tree we're running\n // from an npm install \u2014 the dev-tree in-package fallback is never the answer\n // there, so suppress it from the error report to keep production failures\n // readable.\n const isProductionInstall = __dirname.includes(\n `${path.sep}node_modules${path.sep}`\n );\n const productionErrors: LoadAttempt[] = [];\n const devErrors: LoadAttempt[] = [];\n\n // 1. Sibling platform package (production install layout).\n const siblingPkg = platformPackageFor(platform, arch);\n if (siblingPkg !== undefined) {\n const fromSibling = await resolveFromSiblingPackage(\n siblingPkg,\n productionErrors\n );\n if (fromSibling !== undefined) {\n return fromSibling;\n }\n }\n\n // 2. In-package copy (single-package layout / dev source-tree).\n const fromInPackage = await resolveFromInPackage(devErrors);\n if (fromInPackage !== undefined) {\n return fromInPackage;\n }\n\n throw buildLoadFailureError(\n key,\n siblingPkg,\n isProductionInstall,\n productionErrors,\n devErrors\n );\n}\n\n// Lazy load \u2014 first reader wins, subsequent readers reuse the cached\n// addon. Cold-start-sensitive consumers (Lambda, serverless) only pay\n// the dlopen cost when they actually `CreativeEngine.init()`.\nlet _loadedAddon:\n | Promise<{ addon: NativeAddon; addonPath: string }>\n | undefined;\nfunction getNativeAddon(): Promise<{\n addon: NativeAddon;\n addonPath: string;\n}> {\n if (_loadedAddon === undefined) {\n // Cache the promise so concurrent init() calls share one load. Clear it on\n // failure so a later init() can retry (a missing/tampered binary is\n // deterministic, but a transient FS error should not be sticky).\n _loadedAddon = loadNativeAddon().catch((e) => {\n _loadedAddon = undefined;\n throw e;\n });\n }\n return _loadedAddon;\n}\n\n// Resolve the engine resource bundle (`assets/ly.img.cesdk/`) when the\n// caller doesn't supply a `baseURL` to `init()`. The bundle ships in the\n// main `@cesdk/node-native` package (not the per-platform sibling\n// packages) so it dedupes across platforms on the npm registry.\n//\n// Probe order, all relative to `__dirname` of this bundled JS:\n// - `<__dirname>/../assets/` \u2192 published layout (lib/ \u2192 root/assets)\n// - `<__dirname>/../../assets/` \u2192 dev source-tree (ts/src/ \u2192 root/assets)\n// - `<addonDir>/assets/` \u2192 legacy: alongside the .node (kept so\n// older platform packages with assets\n// bundled in still work, and so the\n// in-tree test path resolves when\n// only the CMake build/ has been run)\nfunction resolveDefaultAssetsDir(addonPath: string): string | undefined {\n const candidates = [\n path.join(__dirname, '..', 'assets'),\n path.join(__dirname, '..', '..', 'assets'),\n path.join(path.dirname(addonPath), 'assets')\n ];\n for (const dir of candidates) {\n try {\n if (fs.statSync(dir).isDirectory()) {\n nativeDebug(`resolveDefaultAssetsDir -> ${dir}`);\n return dir;\n }\n } catch {\n // not present, try next\n }\n }\n return undefined;\n}\n\n// Re-export types from @cesdk/shared for consumers\nexport type {\n Source,\n XYWH,\n CharacterInkBox,\n StrokeCap,\n Range,\n Insets,\n Typeface,\n Font,\n GradientColorStop,\n Asset,\n AssetsQuery,\n AssetsQueryResult,\n AssetSourceLicense,\n AssetSourceCredits,\n AudioTrackInfo\n} from '@cesdk/shared';\n\n// `FontSizeUnit` and `TextFontSizeOptions` live in `@cesdk/shared`.\n\nfunction convertFontSizeToPoints(\n value: number,\n unit: FontSizeUnit,\n dpi: number\n): number {\n switch (unit) {\n case 'Point':\n return value;\n case 'Pixel':\n return (72 * value) / dpi;\n case 'Millimeter':\n return (value * 72) / 25.4;\n case 'Inch':\n return value * 72;\n default:\n return value;\n }\n}\n\n// Inverse of `convertFontSizeToPoints`. The engine always returns font\n// sizes in points; this scales them into the unit a caller requested via\n// `getTextFontSizes({ unit })`. Matches WASM's `convertFromPoints`\n// (`bindings/wasm/js_web/src/utils/unitConversion.ts`).\nfunction convertFontSizeFromPoints(\n valueInPoints: number,\n unit: FontSizeUnit,\n dpi: number\n): number {\n switch (unit) {\n case 'Point':\n return valueInPoints;\n case 'Pixel':\n return (valueInPoints * dpi) / 72;\n case 'Millimeter':\n return (valueInPoints * 25.4) / 72;\n case 'Inch':\n return valueInPoints / 72;\n default:\n return valueInPoints;\n }\n}\n\n/**\n * Normalize a user-supplied `baseURL` so downstream resolvers see a\n * stable shape:\n *\n * - `file:` and `http(s):` URLs get a trailing `/` if missing.\n * - Bare filesystem paths (e.g. `/tmp/assets`) are converted to\n * `file://` URLs via {@link pathToFileURL} + trailing `/`. This\n * matches `@cesdk/node`'s `normalizeBaseURL`\n * (`bindings/wasm/js_web/src/configuration/index.ts`) \u2014 without\n * it, asset-source content.json fetches concat the base and path\n * with no separator and 404.\n * - Empty strings pass through unchanged so the auto-default branch\n * in {@link CreativeEngine.init} can detect \"no baseURL configured\".\n */\nfunction normalizeBaseURL(raw: string): string {\n if (!raw) return raw;\n // Already a URL (file:/http:/https:).\n if (/^[a-z][a-z0-9+.-]*:\\/\\//i.test(raw)) {\n return raw.endsWith('/') ? raw : `${raw}/`;\n }\n // Bare path. Convert to file:// URL.\n try {\n const asUrl = pathToFileURL(raw).href;\n return asUrl.endsWith('/') ? asUrl : `${asUrl}/`;\n } catch {\n return raw.endsWith('/') ? raw : `${raw}/`;\n }\n}\n\n// Render device priority: explicit config > CESDK_FORCE_CPU env var > 'auto'.\n// The C++ binding accepts 'auto' | 'gpu' | 'cpu'; the engine auto-picks the\n// platform GPU backend, so there is no per-device selection to expose.\nfunction resolveEngineDevice(config?: Partial<Configuration>): string {\n return (\n config?.device ?? (process.env.CESDK_FORCE_CPU === '1' ? 'cpu' : 'auto')\n );\n}\n\n// Resolve the engine resource `baseURL` (URL form, matching @cesdk/node) and\n// the filesystem path the native `createEngine` actually consumes. When the\n// caller omits `baseURL` we default to the bundled engine resources in the main\n// package (deduped across platform siblings). The native engine's URI resolver\n// doesn't accept `file://` URLs (the WASM build's MEMFS does), so we convert\n// `file://` to a path before handing it over; other URLs/paths pass through.\nfunction resolveEngineBaseURL(\n config: Partial<Configuration> | undefined,\n nativeAddonPath: string\n): { baseURL: string; enginePath: string } {\n let baseURL: string;\n if (config?.baseURL !== undefined) {\n baseURL = normalizeBaseURL(config.baseURL);\n } else {\n const assetsDir = resolveDefaultAssetsDir(nativeAddonPath);\n baseURL = assetsDir ? `${pathToFileURL(assetsDir).href}/` : '';\n }\n let enginePath = baseURL;\n if (enginePath.startsWith('file://')) {\n try {\n enginePath = fileURLToPath(enginePath);\n } catch {\n // leave unchanged; engine will surface the error\n }\n }\n return { baseURL, enginePath };\n}\n\n// Register a built-in typeface so `block.create('text')` has something for the\n// engine's Text.cpp auto-assignment to find \u2014 without it, programmatically\n// created text blocks layout with an empty typeface and render as a gray\n// placeholder. The source id `ly.img.typeface.builtin` avoids colliding with\n// the full v6 `ly.img.typeface` library a user may load via\n// `addDefaultAssetSources()`. Suppressed via env var so the `findAllSources()`\n// parity check against @cesdk/node can pass cleanly. Best-effort: a failure\n// degrades text rendering to placeholder but leaves non-text scenes working.\nasync function registerBuiltinTypeface(engine: CreativeEngine): Promise<void> {\n if (process.env.CESDK_SUPPRESS_BUILTIN_TYPEFACE === '1') {\n return;\n }\n try {\n await engine.asset.addLocalAssetSourceFromJSONString(BUILTIN_TYPEFACE_JSON);\n } catch {\n // Silently fall through \u2014 see above.\n }\n}\n\n/**\n * BlockAPI provides methods for creating, manipulating, and querying design blocks.\n * Design blocks are the fundamental building blocks of a scene - they represent\n * visual elements like graphics, text, images, and containers.\n *\n * API matches Web bindings: engine.block.*\n */\nexport class BlockAPI implements IBlockAPI {\n #engine: NativeEngine;\n\n constructor(engine: NativeEngine) {\n this.#engine = engine;\n }\n\n // ==========================================================================\n // Block Lifecycle\n // ==========================================================================\n\n /**\n * Create a new block of the specified type.\n * @param type - The block type (e.g., 'graphic', 'text', 'page', 'audio').\n * @returns The ID of the newly created block.\n */\n create(type: string): DesignBlockId {\n return this.#engine.create(type);\n }\n\n /**\n * Create a new fill block of the specified type.\n * @param type - The fill type (e.g., 'color', 'gradient/linear', 'gradient/radial', 'image', 'video').\n * @returns The ID of the newly created fill block.\n */\n createFill(type: string): DesignBlockId {\n return this.#engine.createFill(type);\n }\n\n /**\n * Create a new shape block of the specified type.\n * @param type - The shape type (e.g., 'rect', 'ellipse', 'polygon', 'star', 'line').\n * @returns The ID of the newly created shape block.\n */\n createShape(type: string): DesignBlockId {\n return this.#engine.createShape(type);\n }\n\n /**\n * Create a new effect block of the specified type.\n * @param type - The effect type (e.g., 'adjustments', 'pixelize', 'glow', 'half_tone').\n * @returns The ID of the newly created effect block.\n */\n createEffect(type: string): DesignBlockId {\n return this.#engine.createEffect(type);\n }\n\n /**\n * Create a new blur block of the specified type.\n * @param type - The blur type (e.g., 'uniform', 'linear', 'mirrored', 'radial').\n * @returns The ID of the newly created blur block.\n */\n createBlur(type: string): DesignBlockId {\n return this.#engine.createBlur(type);\n }\n\n /**\n * Create a new animation block of the specified type.\n * @param type - The animation type.\n * @returns The ID of the newly created animation block.\n */\n createAnimation(type: string): DesignBlockId {\n return this.#engine.createAnimation(type);\n }\n\n /**\n * Duplicate an existing block.\n * @param block - The ID of the block to duplicate.\n * @param attachToParent - Whether to attach the duplicate to the same parent (default: true).\n * @returns The ID of the duplicated block.\n */\n duplicate(block: DesignBlockId, attachToParent = true): DesignBlockId {\n return this.#engine.duplicate(block, attachToParent);\n }\n\n /**\n * Destroy a block and release its resources.\n * @param block - The ID of the block to destroy.\n */\n destroy(block: DesignBlockId): void {\n this.#engine.destroy(block);\n }\n\n /**\n * Check if a block ID refers to a valid, existing block.\n * @param block - The ID to check.\n * @returns True if the block exists and is valid, false otherwise.\n */\n isValid(block: DesignBlockId): boolean {\n return this.#engine.isValid(block);\n }\n\n // ==========================================================================\n // Find Methods\n // ==========================================================================\n\n /**\n * Find all blocks in the scene.\n * @returns Array of all block IDs.\n */\n findAll(): DesignBlockId[] {\n return this.#engine.findAll();\n }\n\n /**\n * Find all placeholder blocks in the scene.\n * @returns Array of placeholder block IDs.\n */\n findAllPlaceholders(): DesignBlockId[] {\n return this.#engine.findAllPlaceholders();\n }\n\n /**\n * Find all blocks that are not part of the active scene tree (orphans).\n * Useful for diagnosing leaks where blocks are created with `create(...)`\n * but never appended to a parent.\n * @returns Array of unreferenced block IDs.\n */\n findAllUnused(): DesignBlockId[] {\n return this.#engine.findAllUnused();\n }\n\n /**\n * Find blocks by their name.\n * @param name - The name to search for.\n * @returns Array of matching block IDs.\n */\n findByName(name: string): DesignBlockId[] {\n return this.#engine.findByName(name);\n }\n\n /**\n * Find blocks by their type.\n * @param type - The type to search for (e.g., '//ly.img.ubq/graphic').\n * @returns Array of matching block IDs.\n */\n findByType(type: string): DesignBlockId[] {\n return this.#engine.findByType(type);\n }\n\n /**\n * Find blocks by their kind.\n * @param kind - The kind to search for (e.g., 'image', 'text', 'sticker').\n * @returns Array of matching block IDs.\n */\n findByKind(kind: string): DesignBlockId[] {\n return this.#engine.findByKind(kind);\n }\n\n /**\n * Find all currently selected blocks.\n * @returns Array of selected block IDs.\n */\n findAllSelected(): DesignBlockId[] {\n return this.#engine.findAllSelected();\n }\n\n // ==========================================================================\n // Hierarchy\n // ==========================================================================\n\n /**\n * Get the parent of a block.\n * @param block - The ID of the block.\n * @returns The ID of the parent block, or null if no parent.\n */\n getParent(block: DesignBlockId): DesignBlockId | null {\n if (!this.#engine.hasParent(block)) {\n return null;\n }\n return this.#engine.getParent(block);\n }\n\n /**\n * Check if a block has a parent.\n * @param block - The ID of the block.\n * @returns True if the block has a parent.\n */\n hasParent(block: DesignBlockId): boolean {\n return this.#engine.hasParent(block);\n }\n\n /**\n * Get all children of a block.\n * @param block - The ID of the parent block.\n * @returns Array of child block IDs.\n */\n getChildren(block: DesignBlockId): DesignBlockId[] {\n return this.#engine.getChildren(block);\n }\n\n /**\n * Insert a child block at a specific index.\n * @param parent - The ID of the parent block.\n * @param child - The ID of the child block to insert.\n * @param index - The index at which to insert the child.\n */\n insertChild(\n parent: DesignBlockId,\n child: DesignBlockId,\n index: number\n ): void {\n this.#engine.insertChild(parent, child, index);\n }\n\n /**\n * Append a child block to the end of the parent's children.\n * @param parent - The ID of the parent block.\n * @param child - The ID of the child block to append.\n */\n appendChild(parent: DesignBlockId, child: DesignBlockId): void {\n this.#engine.appendChild(parent, child);\n }\n\n // ==========================================================================\n // Properties - Generic\n // ==========================================================================\n\n /**\n * Get the type of a block.\n * @param block - The ID of the block.\n * @returns The block type string (e.g., '//ly.img.ubq/graphic').\n */\n getType(block: DesignBlockId): string {\n return this.#engine.getType(block);\n }\n\n /**\n * Get the kind of a block.\n * @param block - The ID of the block.\n * @returns The block kind string (e.g., 'image', 'text', 'sticker').\n */\n getKind(block: DesignBlockId): string {\n return this.#engine.getKind(block);\n }\n\n /**\n * Set the kind of a block.\n * @param block - The ID of the block.\n * @param kind - The new kind value.\n */\n setKind(block: DesignBlockId, kind: string): void {\n this.#engine.setKind(block, kind);\n }\n\n /**\n * Get the name of a block.\n * @param block - The ID of the block.\n * @returns The block name.\n */\n getName(block: DesignBlockId): string {\n return this.#engine.getName(block);\n }\n\n /**\n * Set the name of a block.\n * @param block - The ID of the block.\n * @param name - The new name.\n */\n setName(block: DesignBlockId, name: string): void {\n this.#engine.setName(block, name);\n }\n\n /**\n * Get the UUID of a block.\n * @param block - The ID of the block.\n * @returns The block's UUID string.\n */\n getUUID(block: DesignBlockId): string {\n return this.#engine.getUUID(block);\n }\n\n // Properties - typed\n getBool(block: DesignBlockId, property: string): boolean {\n return this.#engine.getBool(block, property);\n }\n\n setBool(block: DesignBlockId, property: string, value: boolean): void {\n this.#engine.setBool(block, property, value);\n }\n\n getInt(block: DesignBlockId, property: string): number {\n return this.#engine.getInt(block, property);\n }\n\n setInt(block: DesignBlockId, property: string, value: number): void {\n this.#engine.setInt(block, property, value);\n }\n\n getFloat(block: DesignBlockId, property: string): number {\n return this.#engine.getFloat(block, property);\n }\n\n setFloat(block: DesignBlockId, property: string, value: number): void {\n this.#engine.setFloat(block, property, value);\n }\n\n getDouble(block: DesignBlockId, property: string): number {\n return this.#engine.getDouble(block, property);\n }\n\n setDouble(block: DesignBlockId, property: string, value: number): void {\n this.#engine.setDouble(block, property, value);\n }\n\n getString(block: DesignBlockId, property: string): string {\n return this.#engine.getString(block, property);\n }\n\n setString(block: DesignBlockId, property: string, value: string): void {\n this.#engine.setString(block, property, value);\n }\n\n getColor(block: DesignBlockId, property: string): Color {\n const internalColor = this.#engine.getColor(\n block,\n property\n ) as NativeColorInternal;\n return NativeColorInternal.toColor(internalColor);\n }\n\n setColor(block: DesignBlockId, property: string, value: Color): void {\n const internalColor = NativeColorInternal.fromColor(value);\n this.#engine.setColor(block, property, internalColor);\n }\n\n getColorRGBA(block: DesignBlockId, property: string): RGBAColor {\n const color = this.getColor(block, property);\n if (!isRGBAColor(color)) {\n throw new Error(\n 'Color is not in sRGB color space. Use getColor() for non-RGBA colors.'\n );\n }\n return { r: color.r, g: color.g, b: color.b, a: color.a };\n }\n\n setColorRGBA(\n block: DesignBlockId,\n property: string,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n this.setColor(block, property, { r, g, b, a });\n }\n\n getEnum(block: DesignBlockId, property: string): string {\n return this.#engine.getEnum(block, property);\n }\n\n setEnum(block: DesignBlockId, property: string, value: string): void {\n this.#engine.setEnum(block, property, value);\n }\n\n // Transform\n getPositionX(block: DesignBlockId): number {\n return this.#engine.getPositionX(block);\n }\n\n setPositionX(block: DesignBlockId, value: number): void {\n this.#engine.setPositionX(block, value);\n }\n\n getPositionY(block: DesignBlockId): number {\n return this.#engine.getPositionY(block);\n }\n\n setPositionY(block: DesignBlockId, value: number): void {\n this.#engine.setPositionY(block, value);\n }\n\n getPositionXMode(block: DesignBlockId): string {\n return this.#engine.getPositionXMode(block);\n }\n\n setPositionXMode(block: DesignBlockId, mode: string): void {\n this.#engine.setPositionXMode(block, mode);\n }\n\n getPositionYMode(block: DesignBlockId): string {\n return this.#engine.getPositionYMode(block);\n }\n\n setPositionYMode(block: DesignBlockId, mode: string): void {\n this.#engine.setPositionYMode(block, mode);\n }\n\n getWidth(block: DesignBlockId): number {\n return this.#engine.getWidth(block);\n }\n\n setWidth(block: DesignBlockId, value: number): void {\n this.#engine.setWidth(block, value);\n }\n\n getWidthMode(block: DesignBlockId): string {\n return this.#engine.getWidthMode(block);\n }\n\n setWidthMode(block: DesignBlockId, mode: string): void {\n this.#engine.setWidthMode(block, mode);\n }\n\n getHeight(block: DesignBlockId): number {\n return this.#engine.getHeight(block);\n }\n\n setHeight(block: DesignBlockId, value: number): void {\n this.#engine.setHeight(block, value);\n }\n\n getHeightMode(block: DesignBlockId): string {\n return this.#engine.getHeightMode(block);\n }\n\n setHeightMode(block: DesignBlockId, mode: string): void {\n this.#engine.setHeightMode(block, mode);\n }\n\n getRotation(block: DesignBlockId): number {\n return this.#engine.getRotation(block);\n }\n\n setRotation(block: DesignBlockId, value: number): void {\n this.#engine.setRotation(block, value);\n }\n\n // Flip - WASM API has separate getters (no combined getFlip)\n getFlipHorizontal(block: DesignBlockId): boolean {\n return this.#engine.getFlip(block).horizontal;\n }\n\n getFlipVertical(block: DesignBlockId): boolean {\n return this.#engine.getFlip(block).vertical;\n }\n\n setFlipHorizontal(block: DesignBlockId, flip: boolean): void {\n this.#engine.setFlipHorizontal(block, flip);\n }\n\n setFlipVertical(block: DesignBlockId, flip: boolean): void {\n this.#engine.setFlipVertical(block, flip);\n }\n\n // WASM API convenience method for position\n setPosition(\n block: DesignBlockId,\n x: number,\n y: number,\n options?: { positionMode?: string }\n ): void {\n if (options?.positionMode) {\n this.#engine.setPositionXMode(block, options.positionMode);\n this.#engine.setPositionYMode(block, options.positionMode);\n }\n this.#engine.setPositionX(block, x);\n this.#engine.setPositionY(block, y);\n }\n\n // WASM API convenience method for size\n setSize(\n block: DesignBlockId,\n width: number,\n height: number,\n options?: { maintainCrop?: boolean; sizeMode?: string }\n ): void {\n if (options?.sizeMode) {\n this.#engine.setWidthMode(block, options.sizeMode);\n this.#engine.setHeightMode(block, options.sizeMode);\n }\n this.#engine.setWidth(block, width);\n this.#engine.setHeight(block, height);\n }\n\n scale(\n block: DesignBlockId,\n scale: number,\n anchorX?: number,\n anchorY?: number\n ): void {\n this.#engine.scale(block, scale, anchorX, anchorY);\n }\n\n fillParent(block: DesignBlockId): void {\n this.#engine.fillParent(block);\n }\n\n resizeContentAware(\n blocks: DesignBlockId[],\n width: number,\n height: number\n ): Promise<void> {\n return this.#engine.resizeContentAware(blocks, width, height);\n }\n\n // Global bounding box\n getGlobalBoundingBoxX(block: DesignBlockId): number {\n return this.#engine.getGlobalBoundingBoxX(block);\n }\n\n getGlobalBoundingBoxY(block: DesignBlockId): number {\n return this.#engine.getGlobalBoundingBoxY(block);\n }\n\n getGlobalBoundingBoxWidth(block: DesignBlockId): number {\n return this.#engine.getGlobalBoundingBoxWidth(block);\n }\n\n getGlobalBoundingBoxHeight(block: DesignBlockId): number {\n return this.#engine.getGlobalBoundingBoxHeight(block);\n }\n\n getScreenSpaceBoundingBoxXYWH(blocks: DesignBlockId[]): XYWH {\n return this.#engine.getScreenSpaceBoundingBoxXYWH(blocks);\n }\n\n // Fill - WASM also has hasFillColor and isFillColorEnabled\n supportsFill(block: DesignBlockId): boolean {\n return this.#engine.supportsFill(block);\n }\n\n hasFill(block: DesignBlockId): boolean {\n return this.#engine.hasFill(block);\n }\n\n hasFillColor(block: DesignBlockId): boolean {\n return this.hasFill(block);\n }\n\n isFillColorEnabled(block: DesignBlockId): boolean {\n return this.#engine.getFillEnabled(block);\n }\n\n setFillColorEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setFillEnabled(block, enabled);\n }\n\n getFillColorRGBA(block: DesignBlockId): RGBAColor {\n const color = this.getFillSolidColor(block);\n if (!isRGBAColor(color)) {\n throw new Error(\n 'Fill color is not in sRGB color space. Use getFillSolidColor() for non-RGBA colors.'\n );\n }\n return { r: color.r, g: color.g, b: color.b, a: color.a };\n }\n\n setFillColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n this.setFillSolidColor(block, r, g, b, a);\n }\n\n getFill(block: DesignBlockId): DesignBlockId {\n return this.#engine.getFill(block);\n }\n\n setFill(block: DesignBlockId, fill: DesignBlockId): void {\n this.#engine.setFill(block, fill);\n }\n\n getFillEnabled(block: DesignBlockId): boolean {\n return this.#engine.getFillEnabled(block);\n }\n\n isFillEnabled(block: DesignBlockId): boolean {\n return this.#engine.getFillEnabled(block);\n }\n\n setFillEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setFillEnabled(block, enabled);\n }\n\n getFillSolidColor(block: DesignBlockId): RGBAColor {\n // The C++ side of the node native binding already returns a flat\n // `{ r, g, b, a }` object \u2014 same shape as the node wasm binding's\n // `RGBA` \u2014 because the engine's `getFillSolidColor` returns\n // `std::array<float,4>`. Pass the value through directly so it\n // matches the node wasm binding's `BlockAPI.getFillSolidColor`\n // contract.\n return this.#engine.getFillSolidColor(block) as RGBAColor;\n }\n\n setFillSolidColor(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number = 1\n ): void {\n // Native C++ binding expects color object, convert individual args to object\n this.#engine.setFillSolidColor(block, { r, g, b, a });\n }\n\n getGradientColorStops(\n block: DesignBlockId,\n property: string\n ): GradientColorStop[] {\n // Native binding returns the internal-shape color\n // (`{ colorSpace, components, spotColorName, tint, externalReference }`);\n // convert each stop back to the user-facing `Color` tagged union so\n // callers see the same shape WASM produces.\n const raw = this.#engine.getGradientColorStops(block, property);\n return raw.map((s) => ({\n color: NativeColorInternal.toColor(s.color),\n stop: s.stop\n }));\n }\n\n setGradientColorStops(\n block: DesignBlockId,\n property: string,\n stops: GradientColorStop[]\n ): void {\n // Match WASM's `BlockAPI.setGradientColorStops`\n // (`bindings/wasm/js_web/src/BlockAPI.ts`) \u2014 convert the user-facing\n // `Color` (RGBA / CMYK / SpotColor union) into the engine's internal\n // representation before crossing the binding. Without this the\n // C++ side reads `.r/.g/.b/.a` off a CMYK stop and throws\n // \"A number was expected\".\n const engineStops = stops.map((s) => ({\n color: NativeColorInternal.fromColor(s.color),\n stop: s.stop\n }));\n this.#engine.setGradientColorStops(block, property, engineStops);\n }\n\n // Stroke\n supportsStroke(block: DesignBlockId): boolean {\n return this.#engine.supportsStroke(block);\n }\n\n hasStroke(block: DesignBlockId): boolean {\n return this.#engine.hasStroke(block);\n }\n\n getStroke(block: DesignBlockId): DesignBlockId {\n return this.#engine.getStroke(block);\n }\n\n setStroke(block: DesignBlockId, stroke: DesignBlockId): void {\n this.#engine.setStroke(block, stroke);\n }\n\n getStrokeEnabled(block: DesignBlockId): boolean {\n return this.#engine.getStrokeEnabled(block);\n }\n\n isStrokeEnabled(block: DesignBlockId): boolean {\n return this.#engine.getStrokeEnabled(block);\n }\n\n setStrokeEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setStrokeEnabled(block, enabled);\n }\n\n getStrokeColor(block: DesignBlockId): Color {\n const internalColor = this.#engine.getStrokeColor(\n block\n ) as NativeColorInternal;\n return NativeColorInternal.toColor(internalColor);\n }\n\n setStrokeColor(block: DesignBlockId, color: Color): void {\n const internalColor = NativeColorInternal.fromColor(color);\n this.#engine.setStrokeColor(block, internalColor);\n }\n\n getStrokeWidth(block: DesignBlockId): number {\n return this.#engine.getStrokeWidth(block);\n }\n\n setStrokeWidth(block: DesignBlockId, width: number): void {\n this.#engine.setStrokeWidth(block, width);\n }\n\n getStrokeStyle(block: DesignBlockId): string {\n return this.#engine.getStrokeStyle(block);\n }\n\n setStrokeStyle(block: DesignBlockId, style: string): void {\n this.#engine.setStrokeStyle(block, style);\n }\n\n getStrokePosition(block: DesignBlockId): string {\n return this.#engine.getStrokePosition(block);\n }\n\n setStrokePosition(block: DesignBlockId, position: string): void {\n this.#engine.setStrokePosition(block, position);\n }\n\n getStrokeCornerGeometry(block: DesignBlockId): string {\n return this.#engine.getStrokeCornerGeometry(block);\n }\n\n setStrokeCornerGeometry(block: DesignBlockId, geometry: string): void {\n this.#engine.setStrokeCornerGeometry(block, geometry);\n }\n\n // \u2500\u2500\u2500 Stroke caps + dash pattern (line shapes / dashed strokes) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n getStrokeCap(block: DesignBlockId): StrokeCap {\n return this.#engine.getStrokeCap(block) as StrokeCap;\n }\n\n setStrokeCap(block: DesignBlockId, cap: StrokeCap): void {\n this.#engine.setStrokeCap(block, cap);\n }\n\n getStrokeStartCap(block: DesignBlockId): StrokeCap {\n return this.#engine.getStrokeStartCap(block) as StrokeCap;\n }\n\n setStrokeStartCap(block: DesignBlockId, cap: StrokeCap): void {\n this.#engine.setStrokeStartCap(block, cap);\n }\n\n getStrokeEndCap(block: DesignBlockId): StrokeCap {\n return this.#engine.getStrokeEndCap(block) as StrokeCap;\n }\n\n setStrokeEndCap(block: DesignBlockId, cap: StrokeCap): void {\n this.#engine.setStrokeEndCap(block, cap);\n }\n\n getStrokeDashStartCap(block: DesignBlockId): StrokeCap {\n return this.#engine.getStrokeDashStartCap(block) as StrokeCap;\n }\n\n setStrokeDashStartCap(block: DesignBlockId, cap: StrokeCap): void {\n this.#engine.setStrokeDashStartCap(block, cap);\n }\n\n getStrokeDashEndCap(block: DesignBlockId): StrokeCap {\n return this.#engine.getStrokeDashEndCap(block) as StrokeCap;\n }\n\n setStrokeDashEndCap(block: DesignBlockId, cap: StrokeCap): void {\n this.#engine.setStrokeDashEndCap(block, cap);\n }\n\n getStrokeDashArray(block: DesignBlockId): number[] {\n return this.#engine.getStrokeDashArray(block);\n }\n\n setStrokeDashArray(block: DesignBlockId, dashArray: number[]): void {\n this.#engine.setStrokeDashArray(block, dashArray);\n }\n\n getStrokeDashOffset(block: DesignBlockId): number {\n return this.#engine.getStrokeDashOffset(block);\n }\n\n setStrokeDashOffset(block: DesignBlockId, dashOffset: number): void {\n this.#engine.setStrokeDashOffset(block, dashOffset);\n }\n\n isLineOrigin(block: DesignBlockId): boolean {\n return this.#engine.isLineOrigin(block);\n }\n\n getStrokeColorRGBA(block: DesignBlockId): RGBAColor {\n // Both the node native and node wasm bindings return { r, g, b, a } directly\n return this.#engine.getStrokeColorRGBA(block);\n }\n\n setStrokeColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n // Both the node native and node wasm bindings expect individual arguments\n this.#engine.setStrokeColorRGBA(block, r, g, b, a);\n }\n\n // Effects\n supportsEffects(block: DesignBlockId): boolean {\n return this.#engine.supportsEffects(block);\n }\n\n hasEffects(block: DesignBlockId): boolean {\n return this.#engine.hasEffects(block);\n }\n\n getEffects(block: DesignBlockId): DesignBlockId[] {\n return this.#engine.getEffects(block);\n }\n\n appendEffect(block: DesignBlockId, effect: DesignBlockId): void {\n this.#engine.appendEffect(block, effect);\n }\n\n insertEffect(\n block: DesignBlockId,\n effect: DesignBlockId,\n index: number\n ): void {\n this.#engine.insertEffect(block, effect, index);\n }\n\n removeEffect(block: DesignBlockId, index: number): void {\n this.#engine.removeEffect(block, index);\n }\n\n isEffectEnabled(effect: DesignBlockId): boolean {\n return this.#engine.isEffectEnabled(effect);\n }\n\n hasEffectEnabled(effect: DesignBlockId): boolean {\n return this.isEffectEnabled(effect);\n }\n\n setEffectEnabled(effect: DesignBlockId, enabled: boolean): void {\n this.#engine.setEffectEnabled(effect, enabled);\n }\n\n // Blur - WASM API uses isBlurEnabled\n supportsBlur(block: DesignBlockId): boolean {\n return this.#engine.supportsBlur(block);\n }\n\n hasBlur(block: DesignBlockId): boolean {\n return this.#engine.hasBlur(block);\n }\n\n getBlur(block: DesignBlockId): DesignBlockId {\n return this.#engine.getBlur(block);\n }\n\n setBlur(block: DesignBlockId, blur: DesignBlockId): void {\n this.#engine.setBlur(block, blur);\n }\n\n getBlurEnabled(block: DesignBlockId): boolean {\n return this.#engine.getBlurEnabled(block);\n }\n\n isBlurEnabled(block: DesignBlockId): boolean {\n return this.#engine.getBlurEnabled(block);\n }\n\n setBlurEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setBlurEnabled(block, enabled);\n }\n\n // Shape\n supportsShape(block: DesignBlockId): boolean {\n return this.#engine.supportsShape(block);\n }\n\n getShape(block: DesignBlockId): DesignBlockId {\n return this.#engine.getShape(block);\n }\n\n setShape(block: DesignBlockId, shape: DesignBlockId): void {\n this.#engine.setShape(block, shape);\n }\n\n hasShape(block: DesignBlockId): boolean {\n return this.supportsShape(block);\n }\n\n // Animation\n supportsAnimation(block: DesignBlockId): boolean {\n return this.#engine.supportsAnimation(block);\n }\n\n getInAnimation(block: DesignBlockId): DesignBlockId {\n return this.#engine.getInAnimation(block);\n }\n\n setInAnimation(block: DesignBlockId, animation: DesignBlockId): void {\n this.#engine.setInAnimation(block, animation);\n }\n\n getOutAnimation(block: DesignBlockId): DesignBlockId {\n return this.#engine.getOutAnimation(block);\n }\n\n setOutAnimation(block: DesignBlockId, animation: DesignBlockId): void {\n this.#engine.setOutAnimation(block, animation);\n }\n\n getLoopAnimation(block: DesignBlockId): DesignBlockId {\n return this.#engine.getLoopAnimation(block);\n }\n\n setLoopAnimation(block: DesignBlockId, animation: DesignBlockId): void {\n this.#engine.setLoopAnimation(block, animation);\n }\n\n // Content fill mode - WASM also has hasContentFillMode\n supportsContentFillMode(block: DesignBlockId): boolean {\n return this.#engine.supportsContentFillMode(block);\n }\n\n hasContentFillMode(block: DesignBlockId): boolean {\n return this.supportsContentFillMode(block);\n }\n\n getContentFillMode(block: DesignBlockId): string {\n return this.#engine.getContentFillMode(block);\n }\n\n setContentFillMode(block: DesignBlockId, mode: string): void {\n this.#engine.setContentFillMode(block, mode);\n }\n\n // Content-fill alignment \u2014 applies to `Contain` / `Cover` fill modes.\n // Has no visible effect in `Crop`.\n setContentFillHorizontalAlignment(\n block: DesignBlockId,\n alignment: HorizontalContentFillAlignment\n ): void {\n this.#engine.setContentFillHorizontalAlignment(block, alignment);\n }\n\n getContentFillHorizontalAlignment(\n block: DesignBlockId\n ): HorizontalContentFillAlignment {\n return this.#engine.getContentFillHorizontalAlignment(\n block\n ) as HorizontalContentFillAlignment;\n }\n\n setContentFillVerticalAlignment(\n block: DesignBlockId,\n alignment: VerticalContentFillAlignment\n ): void {\n this.#engine.setContentFillVerticalAlignment(block, alignment);\n }\n\n getContentFillVerticalAlignment(\n block: DesignBlockId\n ): VerticalContentFillAlignment {\n return this.#engine.getContentFillVerticalAlignment(\n block\n ) as VerticalContentFillAlignment;\n }\n\n // Crop - WASM also has hasCrop\n supportsCrop(block: DesignBlockId): boolean {\n return this.#engine.supportsCrop(block);\n }\n\n hasCrop(block: DesignBlockId): boolean {\n return this.supportsCrop(block);\n }\n\n resetCrop(block: DesignBlockId): void {\n this.#engine.resetCrop(block);\n }\n\n // Match @cesdk/node \u2014 accept the `minScaleRatio` argument. The C++ binding\n // already forwards it (defaults to 1.0 when omitted, see\n // engine_binding_impl/appearance.cpp). The engine returns void; the WASM\n // wrapper's `: number` declaration is a typing artefact (it forwards an\n // `unpackResult` of a `Result<void>`, which is `undefined` at runtime), so\n // native stays honest with `: void`.\n adjustCropToFillFrame(block: DesignBlockId, minScaleRatio?: number): void {\n this.#engine.adjustCropToFillFrame(block, minScaleRatio);\n }\n\n getCropRotation(block: DesignBlockId): number {\n return this.#engine.getCropRotation(block);\n }\n\n setCropRotation(block: DesignBlockId, rotation: number): void {\n this.#engine.setCropRotation(block, rotation);\n }\n\n getCropScaleX(block: DesignBlockId): number {\n return this.#engine.getCropScaleX(block);\n }\n\n setCropScaleX(block: DesignBlockId, scale: number): void {\n this.#engine.setCropScaleX(block, scale);\n }\n\n getCropScaleY(block: DesignBlockId): number {\n return this.#engine.getCropScaleY(block);\n }\n\n setCropScaleY(block: DesignBlockId, scale: number): void {\n this.#engine.setCropScaleY(block, scale);\n }\n\n getCropScaleRatio(block: DesignBlockId): number {\n return this.#engine.getCropScaleRatio(block);\n }\n\n setCropScaleRatio(block: DesignBlockId, ratio: number): void {\n this.#engine.setCropScaleRatio(block, ratio);\n }\n\n getCropTranslationX(block: DesignBlockId): number {\n return this.#engine.getCropTranslationX(block);\n }\n\n setCropTranslationX(block: DesignBlockId, translation: number): void {\n this.#engine.setCropTranslationX(block, translation);\n }\n\n getCropTranslationY(block: DesignBlockId): number {\n return this.#engine.getCropTranslationY(block);\n }\n\n setCropTranslationY(block: DesignBlockId, translation: number): void {\n this.#engine.setCropTranslationY(block, translation);\n }\n\n isCropAspectRatioLocked(block: DesignBlockId): boolean {\n return this.#engine.isCropAspectRatioLocked(block);\n }\n\n setCropAspectRatioLocked(block: DesignBlockId, locked: boolean): void {\n this.#engine.setCropAspectRatioLocked(block, locked);\n }\n\n flipCropHorizontal(block: DesignBlockId): void {\n this.#engine.flipCropHorizontal(block);\n }\n\n flipCropVertical(block: DesignBlockId): void {\n this.#engine.flipCropVertical(block);\n }\n\n // Drop shadow\n supportsDropShadow(block: DesignBlockId): boolean {\n return this.#engine.supportsDropShadow(block);\n }\n\n hasDropShadow(block: DesignBlockId): boolean {\n return this.supportsDropShadow(block);\n }\n\n isDropShadowEnabled(block: DesignBlockId): boolean {\n return this.#engine.isDropShadowEnabled(block);\n }\n\n setDropShadowEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setDropShadowEnabled(block, enabled);\n }\n\n getDropShadowColor(block: DesignBlockId): Color {\n const internalColor = this.#engine.getDropShadowColor(\n block\n ) as NativeColorInternal;\n return NativeColorInternal.toColor(internalColor);\n }\n\n setDropShadowColor(block: DesignBlockId, color: Color): void {\n const internalColor = NativeColorInternal.fromColor(color);\n this.#engine.setDropShadowColor(block, internalColor);\n }\n\n getDropShadowColorRGBA(block: DesignBlockId): RGBAColor {\n // Both the node native and node wasm bindings return { r, g, b, a } directly\n return this.#engine.getDropShadowColorRGBA(block);\n }\n\n setDropShadowColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n // Both the node native and node wasm bindings expect individual arguments\n this.#engine.setDropShadowColorRGBA(block, r, g, b, a);\n }\n\n getDropShadowOffsetX(block: DesignBlockId): number {\n return this.#engine.getDropShadowOffsetX(block);\n }\n\n setDropShadowOffsetX(block: DesignBlockId, offset: number): void {\n this.#engine.setDropShadowOffsetX(block, offset);\n }\n\n getDropShadowOffsetY(block: DesignBlockId): number {\n return this.#engine.getDropShadowOffsetY(block);\n }\n\n setDropShadowOffsetY(block: DesignBlockId, offset: number): void {\n this.#engine.setDropShadowOffsetY(block, offset);\n }\n\n getDropShadowBlurRadiusX(block: DesignBlockId): number {\n return this.#engine.getDropShadowBlurRadiusX(block);\n }\n\n setDropShadowBlurRadiusX(block: DesignBlockId, radius: number): void {\n this.#engine.setDropShadowBlurRadiusX(block, radius);\n }\n\n getDropShadowBlurRadiusY(block: DesignBlockId): number {\n return this.#engine.getDropShadowBlurRadiusY(block);\n }\n\n setDropShadowBlurRadiusY(block: DesignBlockId, radius: number): void {\n this.#engine.setDropShadowBlurRadiusY(block, radius);\n }\n\n getDropShadowClip(block: DesignBlockId): boolean {\n return this.#engine.getDropShadowClip(block);\n }\n\n setDropShadowClip(block: DesignBlockId, clip: boolean): void {\n this.#engine.setDropShadowClip(block, clip);\n }\n\n // Blend mode\n supportsBlendMode(block: DesignBlockId): boolean {\n return this.#engine.supportsBlendMode(block);\n }\n\n getBlendMode(block: DesignBlockId): string {\n return this.#engine.getBlendMode(block);\n }\n\n setBlendMode(block: DesignBlockId, mode: string): void {\n this.#engine.setBlendMode(block, mode);\n }\n\n hasBlendMode(block: DesignBlockId): boolean {\n return this.supportsBlendMode(block);\n }\n\n // Opacity\n supportsOpacity(block: DesignBlockId): boolean {\n return this.#engine.supportsOpacity(block);\n }\n\n hasOpacity(block: DesignBlockId): boolean {\n return this.supportsOpacity(block);\n }\n\n getOpacity(block: DesignBlockId): number {\n return this.#engine.getOpacity(block);\n }\n\n setOpacity(block: DesignBlockId, opacity: number): void {\n this.#engine.setOpacity(block, opacity);\n }\n\n // Visibility\n getVisible(block: DesignBlockId): boolean {\n return this.#engine.getVisible(block);\n }\n\n isVisible(block: DesignBlockId): boolean {\n return this.#engine.getVisible(block);\n }\n\n setVisible(block: DesignBlockId, visible: boolean): void {\n this.#engine.setVisible(block, visible);\n }\n\n getClipped(block: DesignBlockId): boolean {\n return this.#engine.getClipped(block);\n }\n\n isClipped(block: DesignBlockId): boolean {\n return this.#engine.getClipped(block);\n }\n\n setClipped(block: DesignBlockId, clipped: boolean): void {\n this.#engine.setClipped(block, clipped);\n }\n\n // Selection\n setSelected(block: DesignBlockId, selected: boolean): void {\n this.#engine.setSelected(block, selected);\n }\n\n isSelected(block: DesignBlockId): boolean {\n return this.#engine.isSelected(block);\n }\n\n select(block: DesignBlockId): void {\n this.#engine.select(block);\n }\n\n // Ordering\n bringToFront(block: DesignBlockId): void {\n this.#engine.bringToFront(block);\n }\n\n sendToBack(block: DesignBlockId): void {\n this.#engine.sendToBack(block);\n }\n\n bringForward(block: DesignBlockId): void {\n this.#engine.bringForward(block);\n }\n\n sendBackward(block: DesignBlockId): void {\n this.#engine.sendBackward(block);\n }\n\n setAlwaysOnTop(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setAlwaysOnTop(block, enabled);\n }\n\n setAlwaysOnBottom(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setAlwaysOnBottom(block, enabled);\n }\n\n isAlwaysOnTop(block: DesignBlockId): boolean {\n return this.#engine.isAlwaysOnTop(block);\n }\n\n isAlwaysOnBottom(block: DesignBlockId): boolean {\n return this.#engine.isAlwaysOnBottom(block);\n }\n\n // Alignment and distribution\n alignHorizontally(blocks: DesignBlockId[], alignment: string): void {\n this.#engine.alignHorizontally(blocks, alignment);\n }\n\n alignVertically(blocks: DesignBlockId[], alignment: string): void {\n this.#engine.alignVertically(blocks, alignment);\n }\n\n isAlignable(blocks: DesignBlockId[]): boolean {\n return this.#engine.isAlignable(blocks);\n }\n\n distributeHorizontally(blocks: DesignBlockId[]): void {\n this.#engine.distributeHorizontally(blocks);\n }\n\n distributeVertically(blocks: DesignBlockId[]): void {\n this.#engine.distributeVertically(blocks);\n }\n\n isDistributable(blocks: DesignBlockId[]): boolean {\n return this.#engine.isDistributable(blocks);\n }\n\n // Grouping\n group(blocks: DesignBlockId[]): DesignBlockId {\n return this.#engine.group(blocks);\n }\n\n ungroup(group: DesignBlockId): void {\n this.#engine.ungroup(group);\n }\n\n isGroupable(blocks: DesignBlockId[]): boolean {\n return this.#engine.isGroupable(blocks);\n }\n\n enterGroup(group: DesignBlockId): void {\n this.#engine.enterGroup(group);\n }\n\n exitGroup(block: DesignBlockId): void {\n this.#engine.exitGroup(block);\n }\n\n // Combine\n combine(blocks: DesignBlockId[], operation: string): DesignBlockId {\n const validOps = ['Union', 'Difference', 'Intersection', 'XOR'];\n if (!validOps.includes(operation)) {\n throw new Error(`Unknown boolean operation: ${operation}`);\n }\n return this.#engine.combine(blocks, operation);\n }\n\n isCombinable(blocks: DesignBlockId[]): boolean {\n return this.#engine.isCombinable(blocks);\n }\n\n // Duration/Timeline\n supportsDuration(block: DesignBlockId): boolean {\n return this.#engine.supportsDuration(block);\n }\n\n hasDuration(block: DesignBlockId): boolean {\n return this.supportsDuration(block);\n }\n\n getDuration(block: DesignBlockId): number {\n return this.#engine.getDuration(block);\n }\n\n setDuration(block: DesignBlockId, duration: number): void {\n this.#engine.setDuration(block, duration);\n }\n\n supportsTimeOffset(block: DesignBlockId): boolean {\n return this.#engine.supportsTimeOffset(block);\n }\n\n hasTimeOffset(block: DesignBlockId): boolean {\n return this.supportsTimeOffset(block);\n }\n\n getTimeOffset(block: DesignBlockId): number {\n return this.#engine.getTimeOffset(block);\n }\n\n setTimeOffset(block: DesignBlockId, offset: number): void {\n this.#engine.setTimeOffset(block, offset);\n }\n\n supportsTrim(block: DesignBlockId): boolean {\n return this.#engine.supportsTrim(block);\n }\n\n hasTrim(block: DesignBlockId): boolean {\n return this.supportsTrim(block);\n }\n\n getTrimOffset(block: DesignBlockId): number {\n return this.#engine.getTrimOffset(block);\n }\n\n setTrimOffset(block: DesignBlockId, offset: number): void {\n this.#engine.setTrimOffset(block, offset);\n }\n\n getTrimLength(block: DesignBlockId): number {\n return this.#engine.getTrimLength(block);\n }\n\n setTrimLength(block: DesignBlockId, length: number): void {\n this.#engine.setTrimLength(block, length);\n }\n\n // Playback\n supportsPlaybackControl(block: DesignBlockId): boolean {\n return this.#engine.supportsPlaybackControl(block);\n }\n\n hasPlaybackControl(block: DesignBlockId): boolean {\n return this.supportsPlaybackControl(block);\n }\n\n supportsPlaybackTime(block: DesignBlockId): boolean {\n return this.#engine.supportsPlaybackTime(block);\n }\n\n hasPlaybackTime(block: DesignBlockId): boolean {\n return this.supportsPlaybackTime(block);\n }\n\n getPlaybackTime(block: DesignBlockId): number {\n return this.#engine.getPlaybackTime(block);\n }\n\n setPlaybackTime(block: DesignBlockId, time: number): void {\n this.#engine.setPlaybackTime(block, time);\n }\n\n isPlaying(block: DesignBlockId): boolean {\n return this.#engine.isPlaying(block);\n }\n\n setPlaying(block: DesignBlockId, playing: boolean): void {\n this.#engine.setPlaying(block, playing);\n }\n\n isLooping(block: DesignBlockId): boolean {\n return this.#engine.isLooping(block);\n }\n\n setLooping(block: DesignBlockId, looping: boolean): void {\n this.#engine.setLooping(block, looping);\n }\n\n getPlaybackSpeed(block: DesignBlockId): number {\n return this.#engine.getPlaybackSpeed(block);\n }\n\n setPlaybackSpeed(block: DesignBlockId, speed: number): void {\n this.#engine.setPlaybackSpeed(block, speed);\n }\n\n isMuted(block: DesignBlockId): boolean {\n return this.#engine.isMuted(block);\n }\n\n setMuted(block: DesignBlockId, muted: boolean): void {\n this.#engine.setMuted(block, muted);\n }\n\n getVolume(block: DesignBlockId): number {\n return this.#engine.getVolume(block);\n }\n\n setVolume(block: DesignBlockId, volume: number): void {\n this.#engine.setVolume(block, volume);\n }\n\n isSoloPlaybackEnabled(block: DesignBlockId): boolean {\n return this.#engine.isSoloPlaybackEnabled(block);\n }\n\n setSoloPlaybackEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setSoloPlaybackEnabled(block, enabled);\n }\n\n isForceMuted(block: DesignBlockId): boolean {\n return this.#engine.isForceMuted(block);\n }\n\n getTotalSceneDuration(scene: DesignBlockId): number {\n return this.#engine.getTotalSceneDuration(scene);\n }\n\n isVisibleAtCurrentPlaybackTime(block: DesignBlockId): boolean {\n return this.#engine.isVisibleAtCurrentPlaybackTime(block);\n }\n\n // Locking\n isTransformLocked(block: DesignBlockId): boolean {\n return this.#engine.isTransformLocked(block);\n }\n\n setTransformLocked(block: DesignBlockId, locked: boolean): void {\n this.#engine.setTransformLocked(block, locked);\n }\n\n // Include in export\n isIncludedInExport(block: DesignBlockId): boolean {\n return this.#engine.isIncludedInExport(block);\n }\n\n setIncludedInExport(block: DesignBlockId, included: boolean): void {\n this.#engine.setIncludedInExport(block, included);\n }\n\n // Placeholder\n isPlaceholderEnabled(block: DesignBlockId): boolean {\n return this.#engine.isPlaceholderEnabled(block);\n }\n\n setPlaceholderEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setPlaceholderEnabled(block, enabled);\n }\n\n supportsPlaceholderBehavior(block: DesignBlockId): boolean {\n return this.#engine.supportsPlaceholderBehavior(block);\n }\n\n hasPlaceholderBehavior(block: DesignBlockId): boolean {\n return this.supportsPlaceholderBehavior(block);\n }\n\n isPlaceholderBehaviorEnabled(block: DesignBlockId): boolean {\n return this.#engine.isPlaceholderBehaviorEnabled(block);\n }\n\n setPlaceholderBehaviorEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setPlaceholderBehaviorEnabled(block, enabled);\n }\n\n supportsPlaceholderControls(block: DesignBlockId): boolean {\n return this.#engine.supportsPlaceholderControls(block);\n }\n\n hasPlaceholderControls(block: DesignBlockId): boolean {\n return this.supportsPlaceholderControls(block);\n }\n\n isPlaceholderControlsOverlayEnabled(block: DesignBlockId): boolean {\n return this.#engine.isPlaceholderControlsOverlayEnabled(block);\n }\n\n setPlaceholderControlsOverlayEnabled(\n block: DesignBlockId,\n enabled: boolean\n ): void {\n this.#engine.setPlaceholderControlsOverlayEnabled(block, enabled);\n }\n\n isPlaceholderControlsButtonEnabled(block: DesignBlockId): boolean {\n return this.#engine.isPlaceholderControlsButtonEnabled(block);\n }\n\n setPlaceholderControlsButtonEnabled(\n block: DesignBlockId,\n enabled: boolean\n ): void {\n this.#engine.setPlaceholderControlsButtonEnabled(block, enabled);\n }\n\n // Background color - WASM also has hasBackgroundColor and RGBA methods\n supportsBackgroundColor(block: DesignBlockId): boolean {\n return this.#engine.supportsBackgroundColor(block);\n }\n\n hasBackgroundColor(block: DesignBlockId): boolean {\n return this.supportsBackgroundColor(block);\n }\n\n isBackgroundColorEnabled(block: DesignBlockId): boolean {\n return this.#engine.isBackgroundColorEnabled(block);\n }\n\n setBackgroundColorEnabled(block: DesignBlockId, enabled: boolean): void {\n this.#engine.setBackgroundColorEnabled(block, enabled);\n }\n\n getBackgroundColorRGBA(block: DesignBlockId): RGBAColor {\n const internalColor = this.#engine.getColor(\n block,\n 'backgroundColor'\n ) as NativeColorInternal;\n const color = NativeColorInternal.toColor(internalColor);\n if (!isRGBAColor(color)) {\n throw new Error('Expected RGBA color for background color');\n }\n return { r: color.r, g: color.g, b: color.b, a: color.a };\n }\n\n setBackgroundColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n this.setColor(block, 'backgroundColor', { r, g, b, a });\n }\n\n // Metadata\n hasMetadata(block: DesignBlockId, key: string): boolean {\n return this.#engine.hasMetadata(block, key);\n }\n\n getMetadata(block: DesignBlockId, key: string): string {\n return this.#engine.getMetadata(block, key);\n }\n\n setMetadata(block: DesignBlockId, key: string, value: string): void {\n this.#engine.setMetadata(block, key, value);\n }\n\n removeMetadata(block: DesignBlockId, key: string): void {\n this.#engine.removeMetadata(block, key);\n }\n\n findAllMetadata(block: DesignBlockId): string[] {\n return this.#engine.findAllMetadata(block);\n }\n\n // ==========================================================================\n // Text \u2014 range-aware methods accept UTF-16 indices (`from`/`to`) like WASM.\n // The wrapper looks up the current text and converts to grapheme indices via\n // `convertUTF16ToGraphemeRange` before forwarding to the engine.\n // ==========================================================================\n\n /**\n * Resolve UTF-16 `from`/`to` to engine grapheme range. Returns the original\n * range when both ends are negative (\"fall back to current selection / full\n * text\"), so we avoid the engine round-trip when the caller didn't ask for\n * a sub-range.\n */\n #toGraphemeRange(\n block: DesignBlockId,\n from: number,\n to: number\n ): { from: number; to: number } {\n if (from < 0 && to < 0) return { from, to };\n let text = '';\n try {\n text = this.#engine.getString(block, 'text/text');\n } catch {\n return { from, to };\n }\n return convertUTF16ToGraphemeRange(text, from, to);\n }\n\n replaceText(\n block: DesignBlockId,\n text: string,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.replaceText(block, text, range.from, range.to);\n }\n\n removeText(block: DesignBlockId, from: number = -1, to: number = -1): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.removeText(block, range.from, range.to);\n }\n\n getTextFontSizes(\n block: DesignBlockId,\n options?: TextFontSizeOptions\n ): number[];\n /** @deprecated Use the options-object overload. */\n getTextFontSizes(block: DesignBlockId, from?: number, to?: number): number[];\n getTextFontSizes(\n block: DesignBlockId,\n fromOrOptions?: number | TextFontSizeOptions,\n to: number = -1\n ): number[] {\n let from = -1;\n let optTo = to;\n let unit: FontSizeUnit = 'Point';\n if (typeof fromOrOptions === 'object' && fromOrOptions !== null) {\n // Options-object overload \u2014 matches WASM `BlockAPI.getTextFontSizes`\n // at `bindings/wasm/js_web/src/BlockAPI.ts`. The engine returns\n // sizes in points; non-Point requests get scaled via the scene DPI\n // below. Without this branch, native silently dropped `{ unit }` and\n // html5-exporter received Point values when it asked for Pixel,\n // making rendered fonts \u22484.167\u00D7 smaller than baseline (DPI 300/72).\n from = fromOrOptions.from ?? -1;\n optTo = fromOrOptions.to ?? -1;\n unit = (fromOrOptions.unit ?? 'Point') as FontSizeUnit;\n } else if (typeof fromOrOptions === 'number') {\n from = fromOrOptions;\n }\n const range = this.#toGraphemeRange(block, from, optTo);\n const sizesInPoints = this.#engine.getTextFontSizes(\n block,\n range.from,\n range.to\n );\n if (unit === 'Point') return sizesInPoints;\n const scenes = this.findByType('//ly.img.ubq/scene');\n if (scenes.length === 0) {\n throw new Error('No scene found for unit conversion');\n }\n const dpi = this.getFloat(scenes[0], 'scene/dpi');\n return sizesInPoints.map((s) => convertFontSizeFromPoints(s, unit, dpi));\n }\n\n setTextFontSize(\n block: DesignBlockId,\n size: number,\n from?: number,\n to?: number\n ): void;\n setTextFontSize(\n block: DesignBlockId,\n size: number,\n options: TextFontSizeOptions\n ): void;\n setTextFontSize(\n block: DesignBlockId,\n size: number,\n fromOrOptions?: number | TextFontSizeOptions,\n to: number = -1\n ): void {\n let fontSizeInPoints = size;\n let from = -1;\n let optTo = to;\n\n if (typeof fromOrOptions === 'object' && fromOrOptions !== null) {\n // New API with options object \u2014 matches @cesdk/node:\n // bindings/wasm/js_web/src/BlockAPI.ts. The engine consumes\n // font sizes in points; convert non-Point units using the scene's DPI\n // before handing off so layout produces the size the caller intended.\n const {\n unit = 'Point',\n from: optFrom = -1,\n to: optionsTo = -1\n } = fromOrOptions;\n from = optFrom;\n optTo = optionsTo;\n if (unit !== 'Point') {\n const scenes = this.findByType('//ly.img.ubq/scene');\n if (scenes.length === 0) {\n throw new Error('No scene found for unit conversion');\n }\n const dpi = this.getFloat(scenes[0], 'scene/dpi');\n fontSizeInPoints = convertFontSizeToPoints(size, unit, dpi);\n }\n } else if (typeof fromOrOptions === 'number') {\n from = fromOrOptions;\n }\n\n const range = this.#toGraphemeRange(block, from, optTo);\n this.#engine.setTextFontSize(block, fontSizeInPoints, range.from, range.to);\n }\n\n getTextFontStyles(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): string[] {\n const range = this.#toGraphemeRange(block, from, to);\n return this.#engine.getTextFontStyles(block, range.from, range.to);\n }\n\n setTextFontStyle(\n block: DesignBlockId,\n style: string,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTextFontStyle(block, style, range.from, range.to);\n }\n\n getTextFontWeights(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): string[] {\n const range = this.#toGraphemeRange(block, from, to);\n return this.#engine.getTextFontWeights(block, range.from, range.to);\n }\n\n setTextFontWeight(\n block: DesignBlockId,\n weight: string,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTextFontWeight(block, weight, range.from, range.to);\n }\n\n getTextColors(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): Color[] {\n const range = this.#toGraphemeRange(block, from, to);\n const internalColors = this.#engine.getTextColors(\n block,\n range.from,\n range.to\n );\n return internalColors.map((c) => NativeColorInternal.toColor(c));\n }\n\n setTextColor(\n block: DesignBlockId,\n color: Color,\n from: number = -1,\n to: number = -1\n ): void {\n const internalColor = NativeColorInternal.fromColor(color);\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTextColor(block, internalColor, range.from, range.to);\n }\n\n getTextCases(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): string[] {\n const range = this.#toGraphemeRange(block, from, to);\n return this.#engine.getTextCases(block, range.from, range.to);\n }\n\n setTextCase(\n block: DesignBlockId,\n textCase: string,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTextCase(block, textCase, range.from, range.to);\n }\n\n getTypefaces(block: DesignBlockId, from?: number, to?: number): Typeface[] {\n // Match WASM's `_getTypefaces` (UBQ-emscripten.cpp): UTF-16\n // indices coming from JS get converted to grapheme indices before\n // hitting the engine. Without this conversion any caller passing\n // surrogate-pair-containing positions (emoji, scripts beyond the BMP)\n // would address the wrong run on native \u2014 mirrors the symmetric\n // setters in this file (setTypeface, setTextCase, ...).\n const range = this.#toGraphemeRange(block, from ?? -1, to ?? -1);\n return this.#engine.getTypefaces(block, range.from, range.to);\n }\n\n setTypeface(\n block: DesignBlockId,\n typeface: Typeface,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTypeface(block, typeface, range.from, range.to);\n }\n\n getTypeface(block: DesignBlockId): Typeface {\n return this.#engine.getTypeface(block);\n }\n\n /**\n * Set extra character-level kerning offset for a grapheme range. The\n * value is in em units (1.0 = one full em); 0.0 resets to no extra\n * offset. Matches the node wasm binding's `BlockAPI.setTextKerning`.\n */\n setTextKerning(\n block: DesignBlockId,\n kerning: number,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.setTextKerning(block, kerning, range.from, range.to);\n }\n\n /**\n * Return the unique kerning values seen across the grapheme range.\n * Mirrors `getTextFontSizes` / `getTextFontStyles` \u2014 `[0]` for a clean\n * block, `[v1, v2, \u2026]` when the range spans multiple distinct values.\n */\n getTextKernings(block: DesignBlockId, from?: number, to?: number): number[] {\n const range = this.#toGraphemeRange(block, from ?? -1, to ?? -1);\n return this.#engine.getTextKernings(block, range.from, range.to);\n }\n\n setFont(block: DesignBlockId, fontUri: string, typeface: Typeface): void {\n this.#engine.setFont(block, fontUri, typeface);\n }\n\n canToggleBoldFont(block: DesignBlockId): boolean {\n return this.#engine.canToggleBoldFont(block);\n }\n\n toggleBoldFont(block: DesignBlockId): void {\n this.#engine.toggleBoldFont(block);\n }\n\n canToggleItalicFont(block: DesignBlockId): boolean {\n return this.#engine.canToggleItalicFont(block);\n }\n\n toggleItalicFont(block: DesignBlockId): void {\n this.#engine.toggleItalicFont(block);\n }\n\n /**\n * The text block currently being edited, or `undefined` when not in Text\n * edit mode. Used to convert between UTF-16 and grapheme indices when\n * exposing cursor ranges.\n */\n #findActiveTextBlock(): DesignBlockId | undefined {\n try {\n const editMode = this.#engine.getEditMode();\n if (editMode !== 'Text') return undefined;\n } catch {\n return undefined;\n }\n const selected = this.#engine.findAllSelected();\n for (const block of selected) {\n try {\n if (this.#engine.getType(block) === '//ly.img.ubq/text') {\n return block;\n }\n } catch {\n continue;\n }\n }\n return undefined;\n }\n\n /**\n * Returns the current text cursor range as UTF-16 indices. When no block\n * is currently being edited, returns `{ from: -1, to: -1 }`.\n */\n getTextCursorRange(): Range {\n const grapheme = this.#engine.getTextCursorRange();\n if (grapheme.from < 0 && grapheme.to < 0) return grapheme;\n const block = this.#findActiveTextBlock();\n if (block == null) return grapheme;\n let text = '';\n try {\n text = this.#engine.getString(block, 'text/text');\n } catch {\n return grapheme;\n }\n return convertGraphemeToUTF16Range(text, grapheme.from, grapheme.to);\n }\n\n /**\n * Sets the text cursor range. `from`/`to` are UTF-16 indices. Negative\n * values mean \"from start\" / \"to end\" (so `{ from: -1, to: -1 }` selects\n * the entire text).\n */\n setTextCursorRange(range: Range): void {\n const block = this.#findActiveTextBlock();\n if (block == null) {\n throw new Error('No text block is currently being edited.');\n }\n let { from, to } = range;\n if (from >= 0 || to >= 0) {\n const text = this.#engine.getString(block, 'text/text');\n ({ from, to } = convertUTF16ToGraphemeRange(text, from, to));\n }\n this.#engine.setTextCursorRange(from, to);\n }\n\n getTextCursorPositionInScreenSpaceX(block: DesignBlockId): number {\n return this.#engine.getTextCursorPositionInScreenSpaceX(block);\n }\n\n getTextCursorPositionInScreenSpaceY(block: DesignBlockId): number {\n return this.#engine.getTextCursorPositionInScreenSpaceY(block);\n }\n\n getTextVisibleLineCount(block: DesignBlockId): number {\n return this.#engine.getTextVisibleLineCount(block);\n }\n\n getTextVisibleLineContent(block: DesignBlockId, lineIndex: number): string {\n return this.#engine.getTextVisibleLineContent(block, lineIndex);\n }\n\n getTextVisibleLineGlobalBoundingBoxXYWH(\n block: DesignBlockId,\n lineIndex: number\n ): XYWH {\n return this.#engine.getTextVisibleLineGlobalBoundingBoxXYWH(\n block,\n lineIndex\n );\n }\n\n /**\n * Returns the tight ink-paint bounding box for each grapheme in the\n * range. One entry per grapheme in [from, to). Non-printable graphemes\n * (e.g. newline) get a zero-rect entry. Coordinates are in global\n * scene space.\n *\n * @param block - The text block to query.\n * @param from - Start UTF-16 index (-1 = start of cursor selection or 0).\n * @param to - End UTF-16 index (-1 = end of cursor selection or text length).\n */\n getTextCharacterInkBoxes(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): CharacterInkBox[] {\n const range = this.#toGraphemeRange(block, from, to);\n return this.#engine.getTextCharacterInkBoxes(block, range.from, range.to);\n }\n\n getTextEffectiveHorizontalAlignment(block: DesignBlockId): string {\n return this.#engine.getTextEffectiveHorizontalAlignment(block);\n }\n\n /**\n * Returns the horizontal alignment override for a specific paragraph, or\n * the block-level alignment for negative paragraph indices. Returns\n * `undefined` when no override is set for the given paragraph.\n * @param block - The text block to query.\n * @param paragraphIndex - 0-based paragraph index. Negative values return\n * the block-level `text/horizontalAlignment` setting.\n */\n getTextHorizontalAlignment(\n block: DesignBlockId,\n paragraphIndex: number = -1\n ): string | undefined {\n return this.#engine.getTextHorizontalAlignment(block, paragraphIndex);\n }\n\n /**\n * Sets the horizontal alignment override for a specific paragraph of a text\n * block. Pass `undefined` for `alignment` to clear the paragraph-level\n * override. Negative `paragraphIndex` clears all paragraph overrides and\n * applies the alignment block-wide.\n */\n setTextHorizontalAlignment(\n block: DesignBlockId,\n alignment: string | undefined,\n paragraphIndex: number = -1\n ): void {\n this.#engine.setTextHorizontalAlignment(block, alignment, paragraphIndex);\n }\n\n /**\n * Returns the ordered list of unique text-decoration configurations within\n * the given grapheme range. `from` / `to` are UTF-16 indices and are\n * converted to grapheme indices to match WASM semantics.\n */\n getTextDecorations(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): TextDecorationConfig[] {\n const range = this.#toGraphemeRange(block, from, to);\n const raw = this.#engine.getTextDecorations(\n block,\n range.from,\n range.to\n ) as Array<{\n lines: TextDecorationLine[];\n style?: TextDecorationStyle;\n underlineColor?: NativeColorInternal;\n underlineThickness?: number;\n underlineOffset?: number;\n skipInk?: boolean;\n }>;\n return raw.map((c) => {\n const result: TextDecorationConfig = { lines: c.lines ?? [] };\n if (c.style != null) result.style = c.style;\n if (c.underlineColor != null)\n result.underlineColor = NativeColorInternal.toColor(c.underlineColor);\n if (c.underlineThickness != null)\n result.underlineThickness = c.underlineThickness;\n if (c.underlineOffset != null) result.underlineOffset = c.underlineOffset;\n if (c.skipInk != null) result.skipInk = c.skipInk;\n return result;\n });\n }\n\n /**\n * Sets the given text-decoration config for the given grapheme range. Set\n * `lines: ['None']` to clear all decorations.\n */\n setTextDecoration(\n block: DesignBlockId,\n config: TextDecorationConfig,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n const internal = {\n lines: config.lines,\n style: config.style,\n underlineColor:\n config.underlineColor != null\n ? NativeColorInternal.fromColor(config.underlineColor)\n : undefined,\n underlineThickness: config.underlineThickness,\n underlineOffset: config.underlineOffset,\n skipInk: config.skipInk\n };\n this.#engine.setTextDecoration(block, internal, range.from, range.to);\n }\n\n toggleTextDecorationUnderline(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.toggleTextDecorationUnderline(block, range.from, range.to);\n }\n\n toggleTextDecorationStrikethrough(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.toggleTextDecorationStrikethrough(block, range.from, range.to);\n }\n\n toggleTextDecorationOverline(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): void {\n const range = this.#toGraphemeRange(block, from, to);\n this.#engine.toggleTextDecorationOverline(block, range.from, range.to);\n }\n\n // Text lists\n getTextListStyle(\n block: DesignBlockId,\n paragraphIndex: number\n ): 'None' | 'Unordered' | 'Ordered' {\n return this.#engine.getTextListStyle(block, paragraphIndex) as\n | 'None'\n | 'Unordered'\n | 'Ordered';\n }\n\n setTextListStyle(\n block: DesignBlockId,\n listStyle: 'None' | 'Unordered' | 'Ordered',\n paragraphIndex: number = -1,\n listLevel?: number\n ): void {\n this.#engine.setTextListStyle(block, listStyle, paragraphIndex, listLevel);\n }\n\n getTextListLevel(block: DesignBlockId, paragraphIndex: number): number {\n return this.#engine.getTextListLevel(block, paragraphIndex);\n }\n\n setTextListLevel(\n block: DesignBlockId,\n listLevel: number,\n paragraphIndex: number = -1\n ): void {\n this.#engine.setTextListLevel(block, listLevel, paragraphIndex);\n }\n\n /**\n * Returns the 0-based paragraph indices that overlap the given UTF-16 range.\n * Range is half-open: `from` inclusive, `to` exclusive. Negative values mean\n * \"all paragraphs\". When `from === to`, returns the paragraph containing the\n * cursor at `from`.\n */\n getTextParagraphIndices(\n block: DesignBlockId,\n from: number = -1,\n to: number = -1\n ): number[] {\n const range = this.#toGraphemeRange(block, from, to);\n return this.#engine.getTextParagraphIndices(block, range.from, range.to);\n }\n\n getTextLineHeight(block: DesignBlockId, paragraphIndex: number): number {\n return this.#engine.getTextLineHeight(block, paragraphIndex);\n }\n\n setTextLineHeight(\n block: DesignBlockId,\n lineHeight: number | null,\n paragraphIndex: number = -1\n ): void {\n this.#engine.setTextLineHeight(\n block,\n lineHeight ?? undefined,\n paragraphIndex\n );\n }\n\n setTextOnPath(block: DesignBlockId, svgPath: string | null): void {\n this.#engine.setTextOnPath(block, svgPath ?? undefined);\n }\n\n getTextOnPath(block: DesignBlockId): string | null {\n return this.#engine.getTextOnPath(block) ?? null;\n }\n\n setTextOnPathOffset(block: DesignBlockId, offset: number): void {\n this.#engine.setTextOnPathOffset(block, offset);\n }\n\n getTextOnPathOffset(block: DesignBlockId): number {\n return this.#engine.getTextOnPathOffset(block);\n }\n\n setTextOnPathFlipped(block: DesignBlockId, flipped: boolean): void {\n this.#engine.setTextOnPathFlipped(block, flipped);\n }\n\n getTextOnPathFlipped(block: DesignBlockId): boolean {\n return this.#engine.getTextOnPathFlipped(block);\n }\n\n getFontMetrics(fontFileUri: string): Promise<FontMetrics> {\n return this.#engine.getFontMetrics(fontFileUri);\n }\n\n // Source sets\n getSourceSet(block: DesignBlockId, property: string): Source[] {\n return this.#engine.getSourceSet(block, property);\n }\n\n setSourceSet(\n block: DesignBlockId,\n property: string,\n sources: Source[]\n ): void {\n this.#engine.setSourceSet(block, property, sources);\n }\n\n addImageFileURIToSourceSet(\n block: DesignBlockId,\n property: string,\n uri: string\n ): Promise<void> {\n return this.#engine.addImageFileURIToSourceSet(block, property, uri);\n }\n\n addVideoFileURIToSourceSet(\n block: DesignBlockId,\n property: string,\n uri: string\n ): Promise<void> {\n return this.#engine.addVideoFileURIToSourceSet(block, property, uri);\n }\n\n // Video/Audio info\n getVideoWidth(block: DesignBlockId): number {\n return this.#engine.getVideoWidth(block);\n }\n\n getVideoHeight(block: DesignBlockId): number {\n return this.#engine.getVideoHeight(block);\n }\n\n getAudioTrackCountFromVideo(block: DesignBlockId): number {\n return this.#engine.getAudioTrackCountFromVideo(block);\n }\n\n getAVResourceTotalDuration(block: DesignBlockId): number {\n return this.#engine.getAVResourceTotalDuration(block);\n }\n\n /**\n * Splits the block at the given time. The original block keeps the\n * leading portion; the trailing portion is returned as a newly\n * created block id (matches `@cesdk/node`'s return contract).\n *\n * @remarks Matches `@cesdk/node`'s `SplitOptions` shape:\n * `attachToParent` and `selectNewBlock` default to `true`,\n * `createParentTrackIfNeeded` defaults to `false`. Non-default values\n * are accepted for shape parity but not yet plumbed to the C++ binding\n * \u2014 when set, a warning is emitted so callers can detect the gap.\n *\n * @param block - The block to split.\n * @param atTime - The time (seconds) at which to split.\n * @param options - Split-behavior overrides.\n * @returns The id of the newly created trailing block.\n * @public\n */\n split(\n block: DesignBlockId,\n atTime: number,\n options: SplitOptions = {}\n ): DesignBlockId {\n const {\n attachToParent = true,\n createParentTrackIfNeeded = false,\n selectNewBlock = true\n } = options;\n if (\n attachToParent !== true ||\n createParentTrackIfNeeded !== false ||\n selectNewBlock !== true\n ) {\n // The C++ binding currently doesn't accept SplitOptions; engine\n // gets engine defaults. Surface a warning so we don't silently\n // lose user intent.\n // eslint-disable-next-line no-console\n console.warn(\n '[@cesdk/node-native] block.split() options are accepted for shape ' +\n 'parity but not yet plumbed through the C++ binding. The engine ' +\n 'will use defaults (attachToParent: true, createParentTrackIfNeeded: ' +\n 'false, selectNewBlock: true).'\n );\n }\n return this.#engine.split(block, atTime) as unknown as DesignBlockId;\n }\n\n // Frame position/size - WASM API uses getFrameX/Y/Width/Height\n getFrameX(block: DesignBlockId): number {\n return this.#engine.getLastFrameX(block);\n }\n\n getFrameY(block: DesignBlockId): number {\n return this.#engine.getLastFrameY(block);\n }\n\n getFrameWidth(block: DesignBlockId): number {\n return this.#engine.getLastFrameWidth(block);\n }\n\n getFrameHeight(block: DesignBlockId): number {\n return this.#engine.getLastFrameHeight(block);\n }\n\n // Page duration source\n supportsPageDurationSource(\n page: DesignBlockId,\n block: DesignBlockId\n ): boolean {\n return this.#engine.supportsPageDurationSource(page, block);\n }\n\n setPageDurationSource(page: DesignBlockId, block: DesignBlockId): void {\n this.#engine.setPageDurationSource(page, block);\n }\n\n removePageDurationSource(page: DesignBlockId): void {\n this.#engine.removePageDurationSource(page);\n }\n\n isPageDurationSource(block: DesignBlockId): boolean {\n return this.#engine.isPageDurationSource(block);\n }\n\n // Scope - block-level methods only (findAllScopes, getGlobalScope, setGlobalScope are on EditorAPI)\n isScopeEnabled(block: DesignBlockId, scope: string): boolean {\n return this.#engine.isScopeEnabled(block, scope);\n }\n\n setScopeEnabled(block: DesignBlockId, scope: string, enabled: boolean): void {\n this.#engine.setScopeEnabled(block, scope, enabled);\n }\n\n isAllowedByScope(block: DesignBlockId, scope: string): boolean {\n return this.#engine.isAllowedByScope(block, scope);\n }\n\n // Properties\n findAllProperties(block: DesignBlockId): string[] {\n return this.#engine.findAllProperties(block);\n }\n\n getPropertyType(\n blockOrProperty: DesignBlockId | string,\n property?: string\n ): string {\n // UBQ API only takes property name - supports both (block, property) and (property) signatures\n const propName =\n typeof blockOrProperty === 'string' ? blockOrProperty : property!;\n return this.#engine.getPropertyType(propName);\n }\n\n isPropertyReadable(\n blockOrProperty: DesignBlockId | string,\n property?: string\n ): boolean {\n // UBQ API only takes property name - supports both (block, property) and (property) signatures\n const propName =\n typeof blockOrProperty === 'string' ? blockOrProperty : property!;\n return this.#engine.isPropertyReadable(propName);\n }\n\n isPropertyWritable(\n blockOrProperty: DesignBlockId | string,\n property?: string\n ): boolean {\n // UBQ API only takes property name - supports both (block, property) and (property) signatures\n const propName =\n typeof blockOrProperty === 'string' ? blockOrProperty : property!;\n return this.#engine.isPropertyWritable(propName);\n }\n\n getEnumValues(\n blockOrProperty: DesignBlockId | string,\n property?: string\n ): string[] {\n // UBQ API only takes property name - supports both (block, property) and (property) signatures\n const propName =\n typeof blockOrProperty === 'string' ? blockOrProperty : property!;\n return this.#engine.getEnumValues(propName);\n }\n\n // State\n getState(block: DesignBlockId): string {\n return this.#engine.getState(block);\n }\n\n // Export\n //\n // The public `export` / `exportVideo` / `exportAudio` methods return a\n // `Blob` to match `@cesdk/node` (WASM), so callers can switch the import\n // without touching the rest of their code. Both call shapes from\n // `@cesdk/node` are accepted:\n // - WASM-style options-bag (preferred): `export(block, { mimeType, ... })`\n // - Deprecated positional: `export(block, mimeType, options?)`\n // The `*ToBuffer` siblings stay as `Uint8Array` for native-side power\n // users that want raw bytes without the Blob wrapper.\n async export(block: DesignBlockId, options?: ExportOptions): Promise<Blob>;\n async export(\n block: DesignBlockId,\n mimeType: string,\n options?: ExportOptions\n ): Promise<Blob>;\n async export(\n block: DesignBlockId,\n mimeTypeOrOptions?: string | ExportOptions,\n optionsOrUndefined?: ExportOptions\n ): Promise<Blob> {\n let mimeType: string;\n let options: ExportOptions | undefined;\n if (typeof mimeTypeOrOptions === 'string') {\n mimeType = mimeTypeOrOptions;\n options = optionsOrUndefined;\n } else {\n options = mimeTypeOrOptions;\n mimeType = options?.mimeType ?? 'image/png';\n }\n const buffer = await this.exportToBuffer(block, mimeType, options);\n return new Blob([buffer], { type: mimeType });\n }\n\n exportToBuffer(\n block: DesignBlockId,\n mimeType: string,\n options?: ExportOptions\n ): Promise<Uint8Array> {\n const exportOptions = {\n targetWidth: options?.targetWidth ?? 0,\n targetHeight: options?.targetHeight ?? 0,\n useTargetSize:\n options?.targetWidth != null && options?.targetHeight != null,\n jpegQuality: options?.jpegQuality ?? 0.9,\n webpQuality: options?.webpQuality ?? 1.0,\n pngCompressionLevel: options?.pngCompressionLevel ?? 5,\n exportPdfWithHighCompatibility:\n options?.exportPdfWithHighCompatibility ?? true,\n exportPdfWithDeviceCMYK: options?.exportPdfWithDeviceCMYK ?? false,\n exportPdfWithUnderlayer: options?.exportPdfWithUnderlayer ?? false,\n underlayerSpotColorName: options?.underlayerSpotColorName ?? '',\n underlayerOffset: options?.underlayerOffset ?? 0,\n underlayerRenderRatio: options?.underlayerRenderRatio ?? 1,\n underlayerMaxError: options?.underlayerMaxError ?? 2,\n allowTextOverhang: options?.allowTextOverhang ?? false\n };\n return this.#engine.exportToBuffer(block, mimeType, exportOptions);\n }\n\n /**\n * Exports a design block and a color mask to two separate buffers.\n *\n * Removes all pixels that exactly match the given RGB color and replaces them with transparency.\n * The output includes two buffers: the masked image and the mask itself.\n *\n * @param block - The design block element to export.\n * @param maskColorR - The red component of the special color mask color (0-1).\n * @param maskColorG - The green component of the special color mask color (0-1).\n * @param maskColorB - The blue component of the special color mask color (0-1).\n * @param options - The options for exporting the block type.\n * @returns A promise that resolves with an array of two Uint8Arrays: [image, mask].\n */\n // Both call shapes from @cesdk/node are accepted:\n // - WASM-style (preferred):\n // exportWithColorMask(block, R, G, B, options?) // mimeType in options\n // - Deprecated positional:\n // exportWithColorMask(block, mimeType, R, G, B, options?)\n async exportWithColorMask(\n block: DesignBlockId,\n maskColorR: number,\n maskColorG: number,\n maskColorB: number,\n options?: ExportOptions\n ): Promise<Blob[]>;\n async exportWithColorMask(\n block: DesignBlockId,\n mimeType: string | undefined,\n maskColorR: number,\n maskColorG: number,\n maskColorB: number,\n options?: ExportOptions\n ): Promise<Blob[]>;\n async exportWithColorMask(\n block: DesignBlockId,\n arg2: number | string | undefined,\n arg3: number,\n arg4: number,\n arg5?: number | ExportOptions,\n arg6?: ExportOptions\n ): Promise<Blob[]> {\n let mimeType: string;\n let maskColorR: number;\n let maskColorG: number;\n let maskColorB: number;\n let options: ExportOptions | undefined;\n if (typeof arg2 === 'number') {\n // New form: (block, R, G, B, options?)\n maskColorR = arg2;\n maskColorG = arg3;\n maskColorB = arg4;\n options = typeof arg5 === 'number' ? undefined : (arg5 as ExportOptions);\n mimeType = options?.mimeType ?? 'image/png';\n } else {\n // Deprecated form: (block, mimeType, R, G, B, options?)\n mimeType = arg2 ?? 'image/png';\n maskColorR = arg3;\n maskColorG = arg4;\n maskColorB = (arg5 ?? 0) as number;\n options = arg6;\n }\n const exportOptions = {\n targetWidth: options?.targetWidth ?? 0,\n targetHeight: options?.targetHeight ?? 0,\n useTargetSize:\n options?.targetWidth != null && options?.targetHeight != null,\n jpegQuality: options?.jpegQuality ?? 0.9,\n webpQuality: options?.webpQuality ?? 1.0,\n pngCompressionLevel: options?.pngCompressionLevel ?? 5,\n exportPdfWithHighCompatibility:\n options?.exportPdfWithHighCompatibility ?? true,\n exportPdfWithDeviceCMYK: options?.exportPdfWithDeviceCMYK ?? false,\n exportPdfWithUnderlayer: options?.exportPdfWithUnderlayer ?? false,\n underlayerSpotColorName: options?.underlayerSpotColorName ?? '',\n underlayerOffset: options?.underlayerOffset ?? 0,\n underlayerRenderRatio: options?.underlayerRenderRatio ?? 1,\n underlayerMaxError: options?.underlayerMaxError ?? 2,\n allowTextOverhang: options?.allowTextOverhang ?? false\n };\n\n const buffers: Uint8Array[] =\n await this.#engine.exportWithColorMaskToBuffer(\n block,\n mimeType,\n maskColorR,\n maskColorG,\n maskColorB,\n exportOptions\n );\n // Return one Blob per buffer with the requested mime type (image + mask).\n return buffers.map((buf) => new Blob([buf], { type: mimeType }));\n }\n\n // Both call shapes from @cesdk/node are accepted:\n // - WASM-style options-bag (preferred):\n // exportVideo(block, { mimeType, onProgress, ...options })\n // - Deprecated positional:\n // exportVideo(block, mimeType, progressCallback?, options?)\n async exportVideo(\n block: DesignBlockId,\n options?: VideoExportOptions & {\n mimeType?: string;\n onProgress?: (rendered: number, encoded: number, total: number) => void;\n }\n ): Promise<Blob>;\n async exportVideo(\n block: DesignBlockId,\n mimeType: string,\n progressCallback?: (\n rendered: number,\n encoded: number,\n total: number\n ) => void,\n options?: VideoExportOptions\n ): Promise<Blob>;\n async exportVideo(\n block: DesignBlockId,\n mimeTypeOrOptions?:\n | string\n | (VideoExportOptions & {\n mimeType?: string;\n onProgress?: (\n rendered: number,\n encoded: number,\n total: number\n ) => void;\n }),\n progressCallbackOrUndefined?: (\n rendered: number,\n encoded: number,\n total: number\n ) => void,\n optionsOrUndefined?: VideoExportOptions\n ): Promise<Blob> {\n let mimeType: string;\n let progressCallback:\n | ((rendered: number, encoded: number, total: number) => void)\n | undefined;\n let options: VideoExportOptions | undefined;\n if (typeof mimeTypeOrOptions === 'string') {\n mimeType = mimeTypeOrOptions;\n progressCallback = progressCallbackOrUndefined;\n options = optionsOrUndefined;\n } else {\n const bag = mimeTypeOrOptions;\n mimeType = bag?.mimeType ?? 'video/mp4';\n progressCallback = bag?.onProgress;\n options = bag;\n }\n const buffer = await this.exportVideoToBuffer(\n block,\n mimeType,\n options,\n progressCallback\n );\n return new Blob([buffer], { type: mimeType });\n }\n\n exportVideoToBuffer(\n block: DesignBlockId,\n mimeType: string,\n options?: VideoExportOptions,\n progressCallback?: (\n rendered: number,\n encoded: number,\n total: number\n ) => void\n ): Promise<Uint8Array> {\n return new Promise((resolve, reject) => {\n const defaultOptions = {\n h264Profile: 77, // Main (H264VideoProfile::Main = 77)\n h264Level: 52,\n videoBitrate: 0,\n audioBitrate: 0,\n framerate: 30,\n useTargetSize:\n options?.targetWidth != null && options?.targetHeight != null,\n targetWidth: 0,\n targetHeight: 0,\n allowTextOverhang: false,\n ...options\n };\n\n this.#engine.exportVideoToBuffer(\n block,\n options?.timeOffset ?? 0,\n options?.duration ?? this.getDuration(block),\n mimeType,\n progressCallback ?? (() => {}),\n (errorOrNull: Error | null, data?: Uint8Array) => {\n if (errorOrNull) {\n reject(\n errorOrNull instanceof Error\n ? errorOrNull\n : new Error(String(errorOrNull))\n );\n } else if (data) {\n resolve(data);\n } else {\n reject(new Error('Video export returned no data'));\n }\n },\n defaultOptions\n );\n });\n }\n\n /**\n * Export an audio block to a buffer.\n *\n * Two call shapes are accepted:\n * - WASM-style (preferred): `exportAudio(block, options?)` where `options.mimeType`\n * defaults to `'audio/wav'`.\n * - Native-only positional: `exportAudio(block, mimeType, options?)`.\n *\n * The two forms produce identical bytes; the WASM-style form keeps source\n * code portable between `@cesdk/node` (WASM) and `@cesdk/node-native`.\n */\n exportAudio(\n block: DesignBlockId,\n options?: AudioExportOptions\n ): Promise<Blob>;\n exportAudio(\n block: DesignBlockId,\n mimeType: string,\n options?: AudioExportOptions\n ): Promise<Blob>;\n async exportAudio(\n block: DesignBlockId,\n mimeTypeOrOptions?: string | AudioExportOptions,\n optionsOrUndefined?: AudioExportOptions\n ): Promise<Blob> {\n let mimeType: string;\n let options: AudioExportOptions | undefined;\n if (typeof mimeTypeOrOptions === 'string') {\n mimeType = mimeTypeOrOptions;\n options = optionsOrUndefined;\n } else {\n options = mimeTypeOrOptions;\n // `mimeType` lives on the WASM-side AudioExportOptions but the shared\n // type declaration omits it. Read via cast until shared types catch up.\n mimeType =\n (options as { mimeType?: string } | undefined)?.mimeType ?? 'audio/wav';\n }\n const buffer = await this.exportAudioToBuffer(block, mimeType, options);\n return new Blob([buffer], { type: mimeType });\n }\n\n exportAudioToBuffer(\n block: DesignBlockId,\n mimeType: string,\n options?: AudioExportOptions\n ): Promise<Uint8Array> {\n return new Promise((resolve, reject) => {\n const defaultOptions = {\n sampleRate: 48000,\n numberOfChannels: 2,\n skipEncoding: false,\n ...options\n };\n\n this.#engine.exportAudioToBuffer(\n block,\n options?.timeOffset ?? 0,\n options?.duration ?? this.getDuration(block),\n mimeType,\n options?.onProgress ?? (() => {}),\n (errorOrNull: Error | null, data?: Uint8Array) => {\n if (errorOrNull) {\n reject(\n errorOrNull instanceof Error\n ? errorOrNull\n : new Error(String(errorOrNull))\n );\n } else if (data) {\n resolve(data);\n } else {\n reject(new Error('Audio export returned no data'));\n }\n },\n defaultOptions\n );\n });\n }\n\n // Loading/Saving blocks\n loadFromString(content: string): Promise<DesignBlockId[]> {\n if (content.length === 0) {\n return Promise.reject(new Error('Cannot load from empty string'));\n }\n return this.#engine.loadBlocksFromString(content);\n }\n\n loadFromURL(url: string): Promise<DesignBlockId[]> {\n return this.#engine.loadBlocksFromURL(url);\n }\n\n /**\n * Load blocks from an archive URL.\n * Also supports data URIs (data:application/zip;base64,...) which are converted to buffer:// protocol internally.\n * @param url - The URL of the archive file, or a data URI containing base64-encoded archive data.\n * @returns A promise that resolves with an array of block IDs.\n */\n async loadFromArchiveURL(url: string): Promise<DesignBlockId[]> {\n // Support data URIs by converting to buffer:// protocol\n if (url.startsWith('data:')) {\n const matches = url.match(/^data:([^;,]+)?(?:;base64)?,(.*)$/);\n if (!matches) {\n throw new Error('Invalid data URI format');\n }\n const base64Data = matches[2];\n const buffer = Buffer.from(base64Data, 'base64');\n\n // Create engine buffer and write data\n const bufferUri = this.#engine.createBuffer();\n this.#engine.setBufferData(bufferUri, 0, new Uint8Array(buffer));\n\n try {\n return await this.#engine.loadBlocksFromArchiveURL(bufferUri);\n } finally {\n this.#engine.destroyBuffer(bufferUri);\n }\n }\n\n return this.#engine.loadBlocksFromArchiveURL(url);\n }\n\n saveToString(blocks: DesignBlockId[]): Promise<string> {\n return this.#engine.saveBlocksToString(blocks);\n }\n\n // BlockAPI.saveToArchive matches @cesdk/node and returns Promise<Blob>. The\n // raw Uint8Array form remains accessible via the engine binding for\n // power-users that want to skip the wrapper.\n async saveToArchive(blocks: DesignBlockId[]): Promise<Blob> {\n const buffer = await this.#engine.saveBlocksToArchive(blocks);\n return new Blob([buffer]);\n }\n\n /**\n * Force-load the audio/video resource for an audio block or video-fill block.\n * Resolves once the asset is fully fetched and demuxed (so subsequent\n * `exportVideo` calls have data immediately available on frame 0). Without\n * this prime, the encoder can race ahead of the HTTP fetch and produce\n * silent audio / black-frame video segments.\n */\n forceLoadAVResource(block: DesignBlockId): Promise<void> {\n return this.#engine.forceLoadAVResource(block);\n }\n\n /**\n * Force-load every resource referenced by `blocks`. Useful before\n * `exportVideo` on a scene with multiple remote assets \u2014 saves N network\n * round-trips compared to calling `forceLoadAVResource` per block.\n */\n forceLoadResources(blocks: DesignBlockId[]): Promise<void> {\n return this.#engine.forceLoadResources(blocks);\n }\n\n // -------------------------------------------------------------------------\n // Composition helpers (parity with @cesdk/node's `addImage` / `addVideo` /\n // `applyAnimation` / `applyDropShadow`).\n //\n // These are TS-level convenience wrappers, not engine primitives. WASM\n // ships them on its BlockAPI; native must too so a drop-in `addImage`\n // call doesn't throw `TypeError: not a function`.\n // -------------------------------------------------------------------------\n\n /**\n * Apply an animation set (in/loop/out) to a block. Mirrors\n * `@cesdk/node`'s `BlockAPI.applyAnimation` exactly.\n *\n * @public\n */\n applyAnimation(block: DesignBlockId, animation: AnimationOptions = {}): void {\n const apply = (\n entry: AnimationEntry | undefined,\n setter: (block: DesignBlockId, anim: DesignBlockId) => void\n ): void => {\n if (entry == null) return;\n const animBlock = this.createAnimation(entry.type);\n setter(block, animBlock);\n if (entry.duration !== undefined) {\n this.setDuration(animBlock, entry.duration);\n }\n if (entry.easing != null) {\n try {\n const enumValues = this.getEnumValues('animationEasing');\n if (enumValues.includes(entry.easing)) {\n this.setEnum(animBlock, 'animationEasing', entry.easing);\n }\n } catch {\n // Animation block may not support easing; non-fatal.\n }\n }\n };\n\n apply(animation.in, (b, a) => this.setInAnimation(b, a));\n apply(animation.out, (b, a) => this.setOutAnimation(b, a));\n apply(animation.loop, (b, a) => this.setLoopAnimation(b, a));\n }\n\n /**\n * Apply a drop shadow effect to a block. Mirrors `@cesdk/node`'s\n * `BlockAPI.applyDropShadow` exactly.\n *\n * @public\n */\n applyDropShadow(block: DesignBlockId, options: DropShadowOptions = {}): void {\n this.setDropShadowEnabled(block, true);\n if (options.color != null) {\n this.setDropShadowColor(block, options.color);\n }\n if (options.offset != null) {\n if (options.offset.x != null)\n this.setDropShadowOffsetX(block, options.offset.x);\n if (options.offset.y != null)\n this.setDropShadowOffsetY(block, options.offset.y);\n }\n if (options.blur != null) {\n if (options.blur.x != null)\n this.setDropShadowBlurRadiusX(block, options.blur.x);\n if (options.blur.y != null)\n this.setDropShadowBlurRadiusY(block, options.blur.y);\n }\n }\n\n /**\n * Add an image to the current page as a graphic block with an image fill.\n * Mirrors `@cesdk/node`'s `BlockAPI.addImage` shape \u2014 same options bag,\n * same chained-call sequence.\n *\n * @remarks Unlike WASM (which uses `new Image()` to auto-detect size when\n * `options.size` is omitted), Node has no DOM `Image` global. In Node,\n * `options.size` must be supplied; calling without it throws a clear\n * error with the suggested fix.\n *\n * @public\n */\n addImage(url: string, options: AddImageOptions = {}): DesignBlockId {\n const {\n x,\n y,\n size,\n timeline,\n animation,\n shadow,\n cornerRadius,\n sizeMode = 'Absolute',\n positionMode = 'Absolute'\n } = options;\n\n let finalWidth: number | undefined;\n let finalHeight: number | undefined;\n if (size != null) {\n if (typeof size === 'number') {\n finalWidth = size;\n finalHeight = size;\n } else {\n finalWidth = size.width;\n finalHeight = size.height;\n }\n } else {\n throw new Error(\n '[@cesdk/node-native] block.addImage requires `options.size` ' +\n 'in Node (no DOM Image global for auto-sizing). Pass ' +\n '`{ size: { width, height } }` or `{ size: <px> }`.'\n );\n }\n\n // Use the current page as parent. The native scene API exposes\n // `getCurrentPage()` via `findByType('page')`; we keep this lightweight.\n const scenes = this.findByType('//ly.img.ubq/scene');\n if (scenes.length === 0) {\n throw new Error('No scene found. Call engine.scene.create() first.');\n }\n const pages = this.findByType('//ly.img.ubq/page');\n if (pages.length === 0) {\n throw new Error('No page found in scene. Create a page first.');\n }\n const page = pages[0];\n\n const graphicBlock = this.create('graphic');\n this.appendChild(page, graphicBlock);\n\n this.setPositionXMode(graphicBlock, positionMode);\n this.setPositionYMode(graphicBlock, positionMode);\n this.setWidthMode(graphicBlock, sizeMode);\n this.setHeightMode(graphicBlock, sizeMode);\n\n if (finalWidth != null) this.setWidth(graphicBlock, finalWidth);\n if (finalHeight != null) this.setHeight(graphicBlock, finalHeight);\n\n if (x != null) {\n this.setPositionX(graphicBlock, x);\n } else {\n this.alignHorizontally([graphicBlock], 'Center');\n }\n if (y != null) {\n this.setPositionY(graphicBlock, y);\n } else {\n this.alignVertically([graphicBlock], 'Center');\n }\n\n const shapeBlock = this.createShape('rect');\n this.setShape(graphicBlock, shapeBlock);\n\n if (cornerRadius != null) {\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusBL', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusBR', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusTL', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusTR', cornerRadius);\n }\n\n const fillBlock = this.createFill('image');\n this.setFill(graphicBlock, fillBlock);\n this.setString(fillBlock, 'fill/image/imageFileURI', url);\n\n if (shadow != null) this.applyDropShadow(graphicBlock, shadow);\n\n if (timeline?.timeOffset != null)\n this.setTimeOffset(graphicBlock, timeline.timeOffset);\n if (timeline?.duration != null)\n this.setDuration(graphicBlock, timeline.duration);\n\n if (animation != null) this.applyAnimation(graphicBlock, animation);\n\n return graphicBlock;\n }\n\n /**\n * Add a video to the current page as a graphic block with a video fill.\n * Mirrors `@cesdk/node`'s `BlockAPI.addVideo` shape.\n *\n * @remarks Like `addImage`, requires explicit `options.size` in Node.\n *\n * @public\n */\n addVideo(url: string, options: AddVideoOptions = {}): DesignBlockId {\n // Reuse the addImage scaffold but swap the image fill for a video fill.\n // We can't simply call addImage and replace because addImage sets\n // `fill/image/imageFileURI`; video uses `fill/video/fileURI`.\n const {\n x,\n y,\n size,\n timeline,\n animation,\n shadow,\n cornerRadius,\n sizeMode = 'Absolute',\n positionMode = 'Absolute',\n trimOffset,\n loop,\n muted\n } = options;\n\n if (size == null) {\n throw new Error(\n '[@cesdk/node-native] block.addVideo requires `options.size` ' +\n 'in Node (no auto-probe). Pass `{ size: { width, height } }`.'\n );\n }\n const finalWidth = typeof size === 'number' ? size : size.width;\n const finalHeight = typeof size === 'number' ? size : size.height;\n\n const pages = this.findByType('//ly.img.ubq/page');\n if (pages.length === 0) {\n throw new Error('No page found. Create a page first.');\n }\n const page = pages[0];\n\n const graphicBlock = this.create('graphic');\n this.appendChild(page, graphicBlock);\n this.setPositionXMode(graphicBlock, positionMode);\n this.setPositionYMode(graphicBlock, positionMode);\n this.setWidthMode(graphicBlock, sizeMode);\n this.setHeightMode(graphicBlock, sizeMode);\n this.setWidth(graphicBlock, finalWidth);\n this.setHeight(graphicBlock, finalHeight);\n\n if (x != null) this.setPositionX(graphicBlock, x);\n else this.alignHorizontally([graphicBlock], 'Center');\n if (y != null) this.setPositionY(graphicBlock, y);\n else this.alignVertically([graphicBlock], 'Center');\n\n const shapeBlock = this.createShape('rect');\n this.setShape(graphicBlock, shapeBlock);\n if (cornerRadius != null) {\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusBL', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusBR', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusTL', cornerRadius);\n this.setFloat(shapeBlock, 'shape/rect/cornerRadiusTR', cornerRadius);\n }\n\n const fillBlock = this.createFill('video');\n this.setFill(graphicBlock, fillBlock);\n this.setString(fillBlock, 'fill/video/fileURI', url);\n if (loop !== undefined) {\n try {\n this.setBool(fillBlock, 'fill/video/looping', loop);\n } catch {\n /* property may not exist on older engines */\n }\n }\n if (muted !== undefined) {\n try {\n this.setBool(fillBlock, 'fill/video/muted', muted);\n } catch {\n /* property may not exist */\n }\n }\n if (trimOffset !== undefined) {\n try {\n this.setFloat(fillBlock, 'fill/video/trimOffset', trimOffset);\n } catch {\n /* property may not exist */\n }\n }\n\n if (shadow != null) this.applyDropShadow(graphicBlock, shadow);\n if (timeline?.timeOffset != null)\n this.setTimeOffset(graphicBlock, timeline.timeOffset);\n if (timeline?.duration != null)\n this.setDuration(graphicBlock, timeline.duration);\n if (animation != null) this.applyAnimation(graphicBlock, animation);\n\n return graphicBlock;\n }\n\n /**\n * Subscribe to state changes on a set of blocks. Matches WASM's\n * `engine.block.onStateChanged(ids, callback)` contract \u2014 pass an empty\n * array to monitor every block in the scene. The native C++ side\n * already implements this via `subscribeToBlockState`; this wrapper\n * exposes it on `engine.block` so portable consumers (e.g.\n * `@imgly/psd-importer`'s transient-relocation tests) can subscribe the\n * same way on both bindings.\n *\n * @returns A function to unsubscribe.\n */\n onStateChanged(\n ids: DesignBlockId[],\n callback: (ids: DesignBlockId[]) => void\n ): () => void {\n const id = this.#engine.subscribeToBlockState(ids ?? [], callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to selection changes. Matches WASM's\n * `engine.block.onSelectionChanged(callback)` contract \u2014 fires when the\n * set of selected blocks changes. The native C++ side already implements\n * this via `subscribeToSelectionChange`; this wrapper exposes it so\n * portable consumers (selection-reactive UI) work on both bindings.\n *\n * @returns A function to unsubscribe.\n */\n onSelectionChanged(callback: () => void): () => void {\n const id = this.#engine.subscribeToSelectionChange(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to block clicks. Matches WASM's\n * `engine.block.onClicked((id) => \u2026)` contract. In a headless Node\n * context the engine never fires this event (no UI input), but the\n * subscription surface exists for API parity so the same code compiles\n * and runs against both bindings.\n *\n * @returns A function to unsubscribe.\n */\n onClicked(callback: (id: DesignBlockId) => void): () => void {\n const id = this.#engine.subscribeToBlockClicked(callback);\n return () => this.#engine.unsubscribe(id);\n }\n}\n\n/**\n * SceneAPI provides methods for managing scenes and pages\n */\nexport class SceneAPI implements ISceneAPI {\n #engine: NativeEngine;\n\n constructor(engine: NativeEngine) {\n this.#engine = engine;\n }\n\n /**\n * Create a new design scene, along with its own camera.\n * @param sceneLayout - The layout of the scene.\n * @returns The scene's handle.\n */\n create(\n sceneLayout: SceneLayout = 'Free',\n options?: CreateSceneOptions\n ): DesignBlockId {\n const scene = this.#engine.createScene(sceneLayout);\n if (options) {\n this.#createSceneElements(scene, options);\n }\n return scene;\n }\n\n /**\n * Create a new scene in video mode, along with its own camera.\n * @returns The scene's handle.\n */\n createVideo(options?: CreateSceneOptions): DesignBlockId {\n // `createVideoScene` does not set the scene mode itself; set it here so\n // `getSceneMode()` returns 'Video'.\n const scene = this.#engine.createVideoScene();\n this.#engine.setSceneMode(scene, 'Video');\n if (options) {\n this.#createSceneElements(scene, options);\n }\n return scene;\n }\n\n #createSceneElements(\n scene: DesignBlockId,\n options: CreateSceneOptions\n ): void {\n // Apply the design unit and pair the font-size unit (Pixel\u2192Pixel, else\n // \u2192Point). Pair explicitly: the engine only re-pairs on a real change and a\n // new scene already defaults to Pixel. An explicit fontSizeUnit wins.\n if (options.designUnit != null) {\n this.#engine.setDesignUnit(scene, options.designUnit);\n const pairedFontUnit = options.designUnit === 'Pixel' ? 'Pixel' : 'Point';\n this.#engine.setFontSizeUnit(\n scene,\n options.fontSizeUnit ?? pairedFontUnit\n );\n } else if (options.fontSizeUnit != null) {\n this.#engine.setFontSizeUnit(scene, options.fontSizeUnit);\n }\n\n // Page element is optional.\n if (!options.page) {\n return;\n }\n\n let finalWidth = 0;\n let finalHeight = 0;\n if (typeof options.page.size === 'number') {\n finalWidth = options.page.size;\n finalHeight = options.page.size;\n } else if (typeof options.page.size === 'object') {\n finalWidth = options.page.size.width;\n finalHeight = options.page.size.height;\n } else {\n return;\n }\n\n const page = this.#engine.create('page');\n this.#engine.appendChild(scene, page);\n this.#engine.setWidth(page, finalWidth);\n this.#engine.setHeight(page, finalHeight);\n\n if (options.page.color) {\n const fill = this.#engine.createFill('color');\n this.#engine.setFill(page, fill);\n // Convert the user-facing Color shape into the addon's NativeColorInternal\n // shape, matching every other setColor caller in this wrapper. Without this,\n // RGBA/CMYK/Spot inputs are sent as their JS shape and the addon either\n // rejects or silently produces wrong colors.\n this.#engine.setColor(\n page,\n 'fill/solid/color',\n NativeColorInternal.fromColor(options.page.color)\n );\n }\n }\n\n /**\n * Return the currently active scene.\n * @returns The scene or null, if none was created yet.\n */\n get(): DesignBlockId | null {\n const scenes = this.#engine.findByType('scene');\n return scenes.length > 0 ? scenes[0] : null;\n }\n\n /**\n * Load the contents of a scene file.\n * @param sceneContent - The scene file contents, a base64 string.\n * @param overrideEditorConfig - Whether to override editor configuration.\n * @param waitForResources - Whether to wait for all resources to finish loading.\n * @returns A handle to the loaded scene.\n */\n async loadFromString(\n sceneContent: string,\n overrideEditorConfig = false,\n waitForResources = false\n ): Promise<DesignBlockId> {\n return this.#engine.loadSceneFromString(\n sceneContent,\n overrideEditorConfig,\n waitForResources\n );\n }\n\n /**\n * Load a scene from the URL to the scene file.\n * @param url - The URL of the scene file.\n * @param overrideEditorConfig - Whether to override editor configuration.\n * @param waitForResources - Whether to wait for all resources to finish loading.\n * @returns A promise that resolves with the scene ID.\n */\n async loadFromURL(\n url: string,\n overrideEditorConfig = false,\n waitForResources = false\n ): Promise<DesignBlockId> {\n return this.#engine.loadSceneFromURL(\n url,\n overrideEditorConfig,\n waitForResources\n );\n }\n\n /**\n * Load a previously archived scene from the URL to the scene file.\n * Also supports data URIs (data:application/zip;base64,...) which are converted to buffer:// protocol internally.\n * @param url - The URL of the scene archive file, or a data URI containing base64-encoded archive data.\n * @param overrideEditorConfig - Whether to override editor configuration.\n * @param waitForResources - Whether to wait for all resources to finish loading.\n * @returns A promise that resolves with the scene ID.\n */\n async loadFromArchiveURL(\n url: string,\n overrideEditorConfig = false,\n waitForResources = false\n ): Promise<DesignBlockId> {\n // Support data URIs by converting to buffer:// protocol\n if (url.startsWith('data:')) {\n const matches = url.match(/^data:([^;,]+)?(?:;base64)?,(.*)$/);\n if (!matches) {\n throw new Error('Invalid data URI format');\n }\n const base64Data = matches[2];\n const buffer = Buffer.from(base64Data, 'base64');\n\n // Create engine buffer and write data\n const bufferUri = this.#engine.createBuffer();\n this.#engine.setBufferData(bufferUri, 0, new Uint8Array(buffer));\n\n try {\n return await this.#engine.loadSceneFromArchiveURL(\n bufferUri,\n overrideEditorConfig,\n waitForResources\n );\n } finally {\n this.#engine.destroyBuffer(bufferUri);\n }\n }\n\n return this.#engine.loadSceneFromArchiveURL(\n url,\n overrideEditorConfig,\n waitForResources\n );\n }\n\n /**\n * Serializes the current scene into a string.\n *\n * Optionally accepts a `compression` option to apply Zstd compression to\n * the output. When compression is enabled the returned string contains\n * raw compressed bytes (not base64) \u2014 pass it back to `loadFromString`\n * to round-trip.\n *\n * @returns A promise that resolves with the serialized scene.\n */\n async saveToString(options?: {\n compression?: { format?: CompressionFormat; level?: CompressionLevel };\n }): Promise<string> {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n return this.#engine.saveSceneToString(scene, options);\n }\n\n /**\n * Saves the current scene and all of its referenced assets into an archive.\n * @returns A promise that resolves with a Uint8Array.\n */\n async saveToArchive(): Promise<Blob> {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n const buffer = await this.#engine.saveSceneToArchive(scene);\n return new Blob([buffer]);\n }\n\n /**\n * Loads the given image and creates a scene with a single page showing the image.\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.\n */\n /**\n * Loads the given image and creates a scene with a single page showing the image.\n *\n * @remarks The 4th/5th/6th args (`sceneLayout`, `spacing`,\n * `spacingInScreenSpace`) are part of `@cesdk/node`'s signature and\n * accepted here for shape parity. The C++ binding currently hardcodes\n * `Free`/`0.f`/`false`; non-default values are not yet plumbed\n * through. A warning is emitted when a caller passes a non-default\n * value so the discrepancy is visible.\n *\n * @public\n */\n async createFromImage(\n url: string,\n dpi = 300,\n pixelScaleFactor = 1,\n sceneLayout?: SceneLayout,\n spacing?: number,\n spacingInScreenSpace?: boolean\n ): Promise<DesignBlockId> {\n if (\n (sceneLayout !== undefined && sceneLayout !== 'Free') ||\n (spacing !== undefined && spacing !== 0) ||\n (spacingInScreenSpace !== undefined && spacingInScreenSpace !== false)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n '[@cesdk/node-native] scene.createFromImage() arguments ' +\n `'sceneLayout' / 'spacing' / 'spacingInScreenSpace' are accepted for ` +\n 'shape parity but not yet plumbed through the C++ binding. ' +\n 'The engine will use defaults (Free / 0 / false).'\n );\n }\n return this.#engine.createSceneFromImage(url, dpi, pixelScaleFactor);\n }\n\n /**\n * Loads the given video and creates a scene with a single page showing the video.\n * @param url - The video URL.\n * @returns A promise that resolves with the scene ID.\n */\n async createFromVideo(url: string): Promise<DesignBlockId> {\n return this.#engine.createSceneFromVideo(url);\n }\n\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n * @param content - The template scene file contents, a base64 string.\n * @returns A Promise that resolves once the template was applied.\n */\n async applyTemplateFromString(content: string): Promise<void> {\n return this.#engine.applyTemplateFromString(content);\n }\n\n /**\n * Applies the contents of the given template scene to the currently loaded scene.\n * @param url - The url to the template scene file.\n * @returns A Promise that resolves once the template was applied.\n */\n async applyTemplateFromURL(url: string): Promise<void> {\n return this.#engine.applyTemplateFromURL(url);\n }\n\n /**\n * Get the current scene mode.\n * @deprecated Scene mode no longer affects engine behavior. All features work regardless of mode.\n * @returns The current mode of the scene, or null if no mode has been set.\n */\n getMode(): string | null {\n const scene = this.get();\n if (scene === null) {\n return null;\n }\n try {\n return this.#engine.getSceneMode(scene);\n } catch {\n return null;\n }\n }\n\n /**\n * Set the mode of the current scene.\n * @param mode - The new mode for the scene ('Design' or 'Video').\n */\n setMode(mode: 'Design' | 'Video'): void {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n this.#engine.setSceneMode(scene, mode);\n }\n\n /**\n * Converts all values of the current scene into the given design unit.\n * @param designUnit - The new design unit of the scene.\n */\n setDesignUnit(designUnit: string): void {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n this.#engine.setDesignUnit(scene, designUnit);\n }\n\n /**\n * Returns the design unit of the current scene.\n * @returns The current design unit.\n */\n getDesignUnit(): string {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n return this.#engine.getDesignUnit(scene);\n }\n\n /**\n * Sets the unit ('Pixel' | 'Point') in which the current scene's font sizes\n * are interpreted at the API boundary (setTextFontSize / getTextFontSizes).\n * The engine stores font sizes in points internally.\n * @param unit - The new font-size unit.\n */\n setFontSizeUnit(unit: string): void {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n this.#engine.setFontSizeUnit(scene, unit);\n }\n\n /**\n * Returns the font-size unit of the current scene ('Pixel' | 'Point').\n * @returns The current font-size unit.\n */\n getFontSizeUnit(): string {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n return this.#engine.getFontSizeUnit(scene);\n }\n\n /** Start or stop playback of the current page. */\n setPlaying(play: boolean): void {\n const page = this.getCurrentPage();\n if (page == null) {\n throw new Error('No page to play');\n }\n this.#engine.setPlaying(page, play);\n }\n\n /**\n * Get the layout of the current scene.\n * @returns The current layout of the scene.\n */\n getLayout(): SceneLayout {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n return this.#engine.getSceneLayout(scene) as SceneLayout;\n }\n\n /**\n * Set the layout of the current scene.\n * @param layout - The new layout for the scene.\n */\n setLayout(layout: SceneLayout): void {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n this.#engine.setSceneLayout(scene, layout);\n }\n\n /**\n * Get the sorted list of pages in the scene.\n * @returns The sorted list of pages in the scene.\n */\n getPages(): DesignBlockId[] {\n const scene = this.get();\n if (scene === null) {\n return [];\n }\n return this.#engine.getPages(scene);\n }\n\n /**\n * Add a new page to the scene.\n * @param scene - Optional scene ID. If not provided, uses the current scene.\n * @returns The ID of the newly created page.\n */\n addPage(scene?: DesignBlockId): DesignBlockId {\n const sceneId = scene ?? this.get();\n if (sceneId === null) {\n throw new Error('No scene available.');\n }\n // Create a page block and append it to the scene\n const page = this.#engine.create('page');\n this.#engine.appendChild(sceneId, page);\n return page;\n }\n\n /**\n * Get the current page.\n * @returns The current page in the scene or null when there is no scene\n * available or no current page is set.\n */\n getCurrentPage(scene?: DesignBlockId): DesignBlockId | null {\n const sceneId = scene ?? this.get();\n if (sceneId === null) {\n return null;\n }\n return this.#engine.getCurrentPage(sceneId);\n }\n\n /**\n * Find all blocks with the given type sorted by the distance to viewport center.\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: string): DesignBlockId[] {\n const scene = this.get();\n if (scene === null) {\n return [];\n }\n // Native binding returns array directly\n return this.#engine.findNearestToViewPortCenterByType(scene, type) || [];\n }\n\n /**\n * Find all blocks with the given kind sorted by the distance to viewport center.\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 const scene = this.get();\n if (scene === null) {\n return [];\n }\n // Native binding returns array directly\n return this.#engine.findNearestToViewPortCenterByKind(scene, kind) || [];\n }\n\n /**\n * Set the zoom level of the scene.\n * @param zoomLevel - The new zoom level.\n */\n setZoomLevel(zoomLevel = 1.0): void {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n this.#engine.setZoomLevel(scene, zoomLevel);\n }\n\n /**\n * Get the zoom level of the scene.\n * @returns The zoom level of the scene.\n */\n getZoomLevel(): number {\n const scene = this.get();\n if (scene === null) {\n throw new Error('No scene available.');\n }\n return this.#engine.getZoomLevel(scene);\n }\n\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 async 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 * @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 async zoomToBlock(\n id: DesignBlockId,\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): Promise<void>;\n async zoomToBlock(\n id: DesignBlockId,\n paddingLeftOrOptions?: number | ZoomOptions,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): Promise<void> {\n // Parse options from either signature\n const options: ZoomOptions =\n typeof paddingLeftOrOptions === 'object'\n ? paddingLeftOrOptions\n : {\n padding: {\n left: paddingLeftOrOptions ?? 0,\n top: paddingTop ?? 0,\n right: paddingRight ?? 0,\n bottom: paddingBottom ?? 0\n }\n };\n\n const paddings = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n\n if (options.padding != null) {\n if (typeof options.padding === 'number') {\n paddings.left = options.padding;\n paddings.top = options.padding;\n paddings.right = options.padding;\n paddings.bottom = options.padding;\n } else {\n if ('x' in options.padding || 'y' in options.padding) {\n paddings.left = options.padding.x ?? paddings.left;\n paddings.right = options.padding.x ?? paddings.right;\n paddings.top = options.padding.y ?? paddings.top;\n paddings.bottom = options.padding.y ?? paddings.bottom;\n }\n if (\n 'left' in options.padding ||\n 'top' in options.padding ||\n 'right' in options.padding ||\n 'bottom' in options.padding\n ) {\n paddings.left = options.padding.left ?? paddings.left;\n paddings.top = options.padding.top ?? paddings.top;\n paddings.right = options.padding.right ?? paddings.right;\n paddings.bottom = options.padding.bottom ?? paddings.bottom;\n }\n }\n }\n\n if (options.animate) {\n const animationOptions = {\n duration: 0.5,\n easing: 'EaseInOut' as AnimationEasing,\n interruptible: false\n };\n if (typeof options.animate === 'object') {\n animationOptions.duration =\n options.animate.duration ?? animationOptions.duration;\n animationOptions.easing =\n options.animate.easing ?? animationOptions.easing;\n animationOptions.interruptible =\n options.animate.interruptible ?? animationOptions.interruptible;\n }\n\n return this.#engine.zoomToBlockWithAnimation(\n id,\n paddings.left,\n paddings.top,\n paddings.right,\n paddings.bottom,\n animationOptions.duration,\n animationOptions.easing,\n animationOptions.interruptible\n );\n } else {\n return this.#engine.zoomToBlock(\n id,\n paddings.left,\n paddings.top,\n paddings.right,\n paddings.bottom\n );\n }\n }\n\n /**\n * Continually adjust the zoom level to fit the block's bounding box on the\n * chosen axis. For 'Horizontal'/'Vertical', the second/third arguments are\n * `paddingBefore`/`paddingAfter` along that axis. For 'Both' the four\n * arguments map to left/top/right/bottom.\n *\n * @param id - The block to follow.\n * @param axis - 'Horizontal' | 'Vertical' | 'Both'.\n */\n enableZoomAutoFit(\n id: DesignBlockId,\n axis: string,\n paddingBeforeOrLeft = 0,\n paddingAfterOrTop = 0,\n paddingRight = 0,\n paddingBottom = 0\n ): void {\n if (axis === 'Horizontal') {\n this.#engine.enableZoomAutoFit(\n id,\n axis,\n paddingBeforeOrLeft,\n 0,\n paddingAfterOrTop,\n 0\n );\n return;\n }\n if (axis === 'Vertical') {\n this.#engine.enableZoomAutoFit(\n id,\n axis,\n 0,\n paddingBeforeOrLeft,\n 0,\n paddingAfterOrTop\n );\n return;\n }\n this.#engine.enableZoomAutoFit(\n id,\n axis,\n paddingBeforeOrLeft,\n paddingAfterOrTop,\n paddingRight,\n paddingBottom\n );\n }\n\n /**\n * Disables any previously set zoom auto-fit.\n * @param blockOrScene - The scene or a block in the scene.\n */\n disableZoomAutoFit(blockOrScene: DesignBlockId): void {\n this.#engine.disableZoomAutoFit(blockOrScene);\n }\n\n /**\n * Queries whether zoom auto-fit is enabled for the given block.\n * @param blockOrScene - The scene or a block in the scene.\n * @returns True if auto-fit is set, false otherwise.\n */\n isZoomAutoFitEnabled(blockOrScene: DesignBlockId): boolean {\n return this.#engine.isZoomAutoFitEnabled(blockOrScene);\n }\n\n /**\n * Continually clamp the camera position so that the given blocks stay\n * within view (with optional padding).\n * @experimental\n */\n unstable_enableCameraPositionClamping(\n blocks: DesignBlockId[],\n paddingLeft: number = 0,\n paddingTop: number = 0,\n paddingRight: number = 0,\n paddingBottom: number = 0,\n scaledPaddingLeft: number = 0,\n scaledPaddingTop: number = 0,\n scaledPaddingRight: number = 0,\n scaledPaddingBottom: number = 0\n ): void {\n this.#engine.unstable_enableCameraPositionClamping(\n blocks,\n paddingLeft,\n paddingTop,\n paddingRight,\n paddingBottom,\n scaledPaddingLeft,\n scaledPaddingTop,\n scaledPaddingRight,\n scaledPaddingBottom\n );\n }\n\n unstable_disableCameraPositionClamping(block?: DesignBlockId): void {\n const target = block ?? this.get();\n if (target == null) throw new Error('No scene available.');\n this.#engine.unstable_disableCameraPositionClamping(target);\n }\n\n unstable_isCameraPositionClampingEnabled(block?: DesignBlockId): boolean {\n const target = block ?? this.get();\n if (target == null) throw new Error('No scene available.');\n return this.#engine.unstable_isCameraPositionClampingEnabled(target);\n }\n\n /**\n * Continually clamp the camera zoom level to the range\n * `[minZoomLimit, maxZoomLimit]` while showing the given blocks (with\n * optional padding).\n * @experimental\n */\n unstable_enableCameraZoomClamping(\n blocks: DesignBlockId[],\n minZoomLimit: number = -1,\n maxZoomLimit: number = -1,\n paddingLeft: number = 0,\n paddingTop: number = 0,\n paddingRight: number = 0,\n paddingBottom: number = 0\n ): void {\n this.#engine.unstable_enableCameraZoomClamping(\n blocks,\n minZoomLimit,\n maxZoomLimit,\n paddingLeft,\n paddingTop,\n paddingRight,\n paddingBottom\n );\n }\n\n unstable_disableCameraZoomClamping(block?: DesignBlockId): void {\n const target = block ?? this.get();\n if (target == null) throw new Error('No scene available.');\n this.#engine.unstable_disableCameraZoomClamping(target);\n }\n\n unstable_isCameraZoomClampingEnabled(block?: DesignBlockId): boolean {\n const target = block ?? this.get();\n if (target == null) throw new Error('No scene available.');\n return this.#engine.unstable_isCameraZoomClampingEnabled(target);\n }\n\n /**\n * Subscribe to zoom-level changes.\n * @param callback - Called whenever the zoom level changes.\n * @returns A function that unsubscribes when called.\n */\n onZoomLevelChanged(callback: () => void): () => void {\n const id = this.#engine.subscribeToZoomLevel(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to active-scene changes.\n * @param callback - Called whenever the active scene changes.\n * @returns A function that unsubscribes when called.\n */\n onActiveChanged(callback: () => void): () => void {\n const id = this.#engine.subscribeToActiveSceneChange(callback);\n return () => this.#engine.unsubscribe(id);\n }\n}\n\n/**\n * EditorAPI provides methods for editor state management\n */\nexport class EditorAPI implements IEditorAPI {\n #engine: NativeEngine;\n\n constructor(engine: NativeEngine) {\n this.#engine = engine;\n }\n\n getEditMode(): string {\n return this.#engine.getEditMode();\n }\n\n setEditMode(mode: string): void {\n this.#engine.setEditMode(mode);\n }\n\n /**\n * Returns the JWT string of the currently active license. An empty string\n * indicates the engine is in Evaluation mode (the trial license created\n * when init() is called with an empty/null/undefined license). Throws if\n * the engine has no active license at all.\n *\n * Mirrors @cesdk/node's `engine.editor.getActiveLicense()`.\n * @internal\n */\n getActiveLicense(): string {\n return this.#engine.getActiveLicense();\n }\n\n /**\n * Activate (or re-activate) the engine with a license key. Pass an empty\n * string to drop into Evaluation mode. Mirrors\n * `@cesdk/node`'s `engine.editor.unlockWithLicense()`.\n *\n * Most callers should pass `license` via `CreativeEngine.init({ license })`\n * \u2014 `init` calls this internally. Use this method only to switch licenses\n * at runtime (e.g. trial \u2192 paid upgrade in place).\n */\n unlockWithLicense(license: string): void {\n this.#engine.unlockWithLicense(license);\n }\n\n // Settings\n getSettingBool(key: string): boolean {\n const settingType = this.getSettingType(key);\n if (settingType !== 'Bool') {\n throw new Error(\n `Setting '${key}' is of type '${settingType}', not 'Bool'`\n );\n }\n return this.#engine.getSettingBool(key);\n }\n\n setSettingBool(key: string, value: boolean): void {\n this.#engine.setSettingBool(key, value);\n }\n\n getSettingInt(key: string): number {\n return this.#engine.getSettingInt(key);\n }\n\n setSettingInt(key: string, value: number): void {\n this.#engine.setSettingInt(key, value);\n }\n\n getSettingFloat(key: string): number {\n return this.#engine.getSettingFloat(key);\n }\n\n setSettingFloat(key: string, value: number): void {\n this.#engine.setSettingFloat(key, value);\n }\n\n getSettingString(key: string): string {\n return this.#engine.getSettingString(key);\n }\n\n setSettingString(key: string, value: string): void {\n this.#engine.setSettingString(key, value);\n }\n\n getSettingColor(key: string): Color {\n const internalColor = this.#engine.getSettingColor(\n key\n ) as NativeColorInternal;\n return NativeColorInternal.toColor(internalColor);\n }\n\n setSettingColor(key: string, value: Color): void {\n const internalColor = NativeColorInternal.fromColor(value);\n this.#engine.setSettingColor(key, internalColor);\n }\n\n getSettingEnum(key: string): string {\n return this.#engine.getSettingEnum(key);\n }\n\n setSettingEnum(key: string, value: string): void {\n const settingType = this.getSettingType(key);\n if (settingType !== 'Enum') {\n throw new Error(\n `Setting '${key}' is of type '${settingType}', not 'Enum'`\n );\n }\n this.#engine.setSettingEnum(key, value);\n }\n\n findAllSettings(): string[] {\n return this.#engine.findAllSettings();\n }\n\n getSettingType(key: string): string {\n const allSettings = this.#engine.findAllSettings();\n if (!allSettings.includes(key)) {\n throw new Error(`Setting '${key}' does not exist`);\n }\n return this.#engine.getSettingType(key);\n }\n\n getSettingEnumOptions(key: string): string[] {\n return this.#engine.getSettingEnumOptions(key);\n }\n\n /**\n * Generic setting getter that dispatches to the typed getter based on\n * `getSettingType`.\n */\n getSetting<T = boolean | number | string | Color>(key: string): T {\n const settingType = this.getSettingType(key);\n switch (settingType) {\n case 'Bool':\n return this.#engine.getSettingBool(key) as unknown as T;\n case 'Int':\n return this.#engine.getSettingInt(key) as unknown as T;\n case 'Float':\n return this.#engine.getSettingFloat(key) as unknown as T;\n case 'String':\n return this.#engine.getSettingString(key) as unknown as T;\n case 'Color': {\n const internalColor = this.#engine.getSettingColor(\n key\n ) as NativeColorInternal;\n return NativeColorInternal.toColor(internalColor) as unknown as T;\n }\n case 'Enum':\n return this.#engine.getSettingEnum(key) as unknown as T;\n default:\n throw new Error(\n `Unknown setting type for key '${key}': ${settingType}`\n );\n }\n }\n\n /**\n * Generic setting setter \u2014 dispatches to the typed setter via\n * `getSettingType`.\n */\n setSetting(key: string, value: boolean | number | string | Color): void {\n const settingType = this.getSettingType(key);\n switch (settingType) {\n case 'Bool':\n this.#engine.setSettingBool(key, value as boolean);\n return;\n case 'Int':\n this.#engine.setSettingInt(key, value as number);\n return;\n case 'Float':\n this.#engine.setSettingFloat(key, value as number);\n return;\n case 'String':\n this.#engine.setSettingString(key, value as string);\n return;\n case 'Color': {\n const internalColor = NativeColorInternal.fromColor(value as Color);\n this.#engine.setSettingColor(key, internalColor);\n return;\n }\n case 'Enum':\n this.#engine.setSettingEnum(key, value as string);\n return;\n default:\n throw new Error(\n `Unknown setting type for key '${key}': ${settingType}`\n );\n }\n }\n\n /** Get the font metrics for a font URI. */\n getFontMetrics(fontFileUri: string): Promise<FontMetrics> {\n return this.#engine.getFontMetrics(fontFileUri);\n }\n\n /**\n * Set one or more rules limiting how far blocks may be moved outside their\n * parent page during user interactions.\n */\n setMovementConstraint(\n rules: MovementConstraintRule | MovementConstraintRule[]\n ): void {\n const list = Array.isArray(rules) ? rules : [rules];\n for (const rule of list) {\n const targets: (DesignBlockId | string)[] =\n 'block' in rule\n ? [rule.block]\n : 'blockType' in rule\n ? [rule.blockType]\n : [];\n this.#engine.setMovementConstraint(targets, rule.overshoot);\n }\n }\n\n /**\n * Get the effective movement constraint for a block (most specific rule\n * wins: block > parent page > blockType > scene-wide). Returns `null`\n * when unconstrained.\n */\n getMovementConstraint(id: DesignBlockId): ResolvedMovementConstraint {\n const value = this.#engine.getMovementConstraint(id);\n return value < 0 ? null : { overshoot: value };\n }\n\n /**\n * Remove movement constraints. No argument removes the scene-wide default.\n * `{ block }` / `{ blockType }` (or array) removes the matching scope(s).\n */\n removeMovementConstraint(\n scopes?: MovementConstraintScope | MovementConstraintScope[]\n ): void {\n if (scopes === undefined) {\n this.#engine.removeMovementConstraint([]);\n return;\n }\n const list = Array.isArray(scopes) ? scopes : [scopes];\n if (list.length === 0) return;\n const targets: (DesignBlockId | string)[] = list.map((scope) =>\n 'block' in scope ? scope.block : scope.blockType\n );\n this.#engine.removeMovementConstraint(targets);\n }\n\n // Cursor\n getCursorType(): string {\n return this.#engine.getCursorType();\n }\n\n getCursorRotation(): number {\n return this.#engine.getCursorRotation();\n }\n\n // Safe area insets\n setSafeAreaInsets(insets: Insets): void {\n this.#engine.setSafeAreaInsets(\n insets.left,\n insets.top,\n insets.right,\n insets.bottom\n );\n }\n\n getSafeAreaInsets(): Insets {\n return this.#engine.getSafeAreaInsets();\n }\n\n // Memory\n getUsedMemory(): number {\n return this.#engine.getUsedMemory();\n }\n\n getAvailableMemory(): number {\n return this.#engine.getAvailableMemory();\n }\n\n // Color\n convertColorToColorSpace(color: Color, colorSpace: string): Color {\n const internalColor = NativeColorInternal.fromColor(color);\n // Convert colorSpace string to number if needed\n let colorSpaceNum: number;\n if (colorSpace === 'sRGB') {\n colorSpaceNum = NativeColorInternal.ColorSpace.sRGB;\n } else if (colorSpace === 'CMYK') {\n colorSpaceNum = NativeColorInternal.ColorSpace.CMYK;\n } else if (colorSpace === 'SpotColor') {\n colorSpaceNum = NativeColorInternal.ColorSpace.SpotColor;\n } else {\n // Try parsing as number for backwards compatibility\n colorSpaceNum = parseInt(colorSpace, 10);\n if (Number.isNaN(colorSpaceNum)) {\n throw new Error(`Unknown color space: ${colorSpace}`);\n }\n }\n const resultInternal = this.#engine.convertColorToColorSpace(\n internalColor,\n colorSpaceNum\n );\n return NativeColorInternal.toColor(resultInternal);\n }\n\n supportsP3(): boolean {\n return this.#engine.supportsP3();\n }\n\n // URI\n getAbsoluteURI(relativeUri: string): Promise<string> {\n return this.#engine.getAbsoluteURI(relativeUri);\n }\n\n getMimeType(uri: string): Promise<string> {\n return this.#engine.getMimeType(uri);\n }\n\n defaultURIResolver(relativePath: string): string {\n return this.#engine.defaultURIResolver(relativePath);\n }\n\n /**\n * Register a synchronous URI resolver. Matches `@cesdk/node`'s\n * `(uri, defaultResolver) => string` signature\n * (`bindings/wasm/js_web/src/EditorAPI.ts`). The\n * `defaultResolver` argument is the engine's built-in resolver \u2014 call\n * it to delegate the lookup chain.\n *\n * @public\n */\n setURIResolver(\n resolver: SyncURIResolver | ((uri: string) => string) | null\n ): void {\n if (resolver == null) {\n // null restores the default resolver.\n this.#engine.setURIResolver((uri: string) =>\n this.defaultURIResolver(uri)\n );\n return;\n }\n // Wrap user resolver so `defaultResolver` is always supplied.\n const wrapped = (uri: string): string => {\n const defaultFn: SyncURIResolver = (u) => this.defaultURIResolver(u);\n // User signature may be one- or two-arg; either works.\n return (resolver as SyncURIResolver)(uri, defaultFn);\n };\n this.#engine.setURIResolver(wrapped);\n }\n\n /**\n * Register an asynchronous URI resolver. Matches `@cesdk/node`'s\n * `(uri, defaultResolver) => Promise<string> | string` signature\n * (`bindings/wasm/js_web/src/EditorAPI.ts`). Bridges to the\n * native callback-style binding by adapting the returned Promise.\n *\n * Pass `null` to restore the default resolver.\n *\n * @public\n */\n setURIResolverAsync(resolver: AsyncURIResolver | null): void {\n if (resolver == null) {\n // Native binding doesn't have a \"null restores default\" primitive,\n // so install a resolver that always defers to default.\n this.#engine.setURIResolverAsync(\n (uri: string, cb: (result: string | Error) => void) => {\n this.getAbsoluteURI(uri).then(\n (resolved) => cb(resolved),\n (err) => cb(err instanceof Error ? err : new Error(String(err)))\n );\n }\n );\n return;\n }\n\n const defaultFn: AsyncURIResolver = async (uri) => this.getAbsoluteURI(uri);\n const adapter = (\n uri: string,\n cb: (result: string | Error) => void\n ): void => {\n try {\n const out = resolver(uri, defaultFn);\n Promise.resolve(out).then(\n (resolved) => cb(resolved),\n (err) => cb(err instanceof Error ? err : new Error(String(err)))\n );\n } catch (err) {\n cb(err instanceof Error ? err : new Error(String(err)));\n }\n };\n this.#engine.setURIResolverAsync(adapter);\n }\n\n relocateResource(currentUri: string, newUri: string): void {\n this.#engine.relocateResource(currentUri, newUri);\n }\n\n findAllMediaURIs(): string[] {\n return this.#engine.findAllMediaURIs();\n }\n\n /**\n * List all transient (in-engine) resources \u2014 typically `buffer://` URIs\n * created by importers (psd, pdf, idml) before they're uploaded to a\n * permanent location. Each entry is `{ uri, size }`.\n *\n * Note: WASM uses `URL` as the key name; consumers that target both\n * bindings should accept either (see e.g. psd-importer's\n * `transient-resource-relocation.test.ts`).\n */\n findAllTransientResources(): Array<{ uri: string; size: number }> {\n return this.#engine.findAllTransientResources();\n }\n\n // Spot colors\n findAllSpotColors(): string[] {\n return this.#engine.findAllSpotColors();\n }\n\n getSpotColorRGBA(name: string): RGBAColor {\n // Native C++ returns a 4-tuple [r, g, b, a]; WASM consumers read\n // positionally (cmyk[0]) while native consumers historically read\n // named (rgba.r). Return an array with attached named accessors so\n // both shapes work \u2014 matches the dual-shape contract documented on\n // `IEditorAPI.getSpotColorRGBA` in @cesdk/shared.\n const result = this.#engine.getSpotColorRGB(name);\n const tuple = Array.isArray(result)\n ? (result.slice(0, 4) as number[])\n : [\n (result as RGBAColor).r,\n (result as RGBAColor).g,\n (result as RGBAColor).b,\n (result as RGBAColor).a\n ];\n const rgba = tuple as number[] & RGBAColor;\n rgba.r = tuple[0];\n rgba.g = tuple[1];\n rgba.b = tuple[2];\n rgba.a = tuple[3];\n return rgba;\n }\n\n getSpotColorCMYK(name: string): CMYKColor {\n // Same dual-shape contract as getSpotColorRGBA above.\n const result = this.#engine.getSpotColorCMYK(name);\n const tuple = Array.isArray(result)\n ? (result.slice(0, 4) as number[])\n : [\n (result as CMYKColor).c,\n (result as CMYKColor).m,\n (result as CMYKColor).y,\n (result as CMYKColor).k\n ];\n const cmyk = tuple as number[] & CMYKColor;\n cmyk.c = tuple[0];\n cmyk.m = tuple[1];\n cmyk.y = tuple[2];\n cmyk.k = tuple[3];\n cmyk.tint =\n !Array.isArray(result) && (result as CMYKColor).tint !== undefined\n ? (result as CMYKColor).tint\n : 1;\n return cmyk;\n }\n\n setSpotColorRGB(name: string, r: number, g: number, b: number): void {\n this.#engine.setSpotColorRGB(name, r, g, b);\n }\n\n setSpotColorCMYK(\n name: string,\n c: number,\n m: number,\n y: number,\n k: number\n ): void {\n this.#engine.setSpotColorCMYK(name, c, m, y, k);\n }\n\n removeSpotColor(name: string): void {\n this.#engine.removeSpotColor(name);\n }\n\n // Role and scope - WASM EditorAPI methods\n getRole(): string {\n return this.#engine.getRole();\n }\n\n setRole(role: string): void {\n this.#engine.setRole(role);\n }\n\n /**\n * Start the engine's analytics tracking pipeline. Mirrors\n * `@cesdk/node`'s `editor.startTracking(license, userId)`; invoked\n * automatically from {@link CreativeEngine.init} when `license` and/or\n * `userId` are passed in the Configuration. Safe to call multiple times.\n *\n * The C++ binding accepts a third `deviceId` argument that the engine\n * itself uses for tracking-pipeline disambiguation; WASM always passes\n * `''` (see `bindings/wasm/js_web/src/EditorAPI.ts`) \u2014 we\n * mirror that here so the no-args / \"engine picks a default device id\"\n * path is honored.\n *\n * @public\n */\n startTracking(license: string, userId: string, deviceId: string = ''): void {\n this.#engine.startTracking(license, userId, deviceId);\n }\n\n findAllScopes(): string[] {\n return this.#engine.findAllScopes();\n }\n\n getGlobalScope(scope: string): string {\n return this.#engine.getGlobalScope(scope);\n }\n\n setGlobalScope(scope: string, value: string): void {\n this.#engine.setGlobalScope(scope, value);\n }\n\n // History management (matches WASM EditorAPI)\n createHistory(): HistoryId {\n return this.#engine.createHistory();\n }\n\n destroyHistory(history: HistoryId): void {\n this.#engine.destroyHistory(history);\n }\n\n getActiveHistory(): HistoryId {\n return this.#engine.getActiveHistory();\n }\n\n setActiveHistory(history: HistoryId): void {\n this.#engine.setActiveHistory(history);\n }\n\n /**\n * Undo one step in the active history if an undo step is available.\n * Use {@link canUndo} beforehand to determine whether a step is available.\n */\n undo(): void {\n this.#engine.undo();\n }\n\n /**\n * Redo one step in the active history if a redo step is available.\n * Use {@link canRedo} beforehand to determine whether a step is available.\n */\n redo(): void {\n this.#engine.redo();\n }\n\n canUndo(): boolean {\n return this.#engine.canUndo();\n }\n\n canRedo(): boolean {\n return this.#engine.canRedo();\n }\n\n addUndoStep(): void {\n this.#engine.addUndoStep();\n }\n\n removeUndoStep(): void {\n this.#engine.removeUndoStep();\n }\n\n /**\n * Subscribe to editor-state changes.\n * @param callback - Called whenever the editor state changes.\n * @returns A function that unsubscribes when called.\n */\n onStateChanged(callback: () => void): () => void {\n const id = this.#engine.subscribeToEditorState(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to editor settings changes. Matches WASM's\n * `engine.editor.onSettingsChanged(callback)`. The native C++ side\n * implements this via `subscribeToSettings`; this wrapper exposes it on\n * the editor API so portable consumers (settings-reactive UI) work on\n * both bindings.\n * @returns A function that unsubscribes when called.\n */\n onSettingsChanged(callback: () => void): () => void {\n const id = this.#engine.subscribeToSettings(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to history updates.\n * @deprecated Use {@link onHistoryUpdatedWithKind} instead, which also\n * reports the kind of update.\n * @param callback - Called when the undo/redo history changes.\n * @returns A function that unsubscribes when called.\n */\n onHistoryUpdated(callback: () => void): () => void {\n return this.onHistoryUpdatedWithKind(() => callback());\n }\n\n /**\n * Subscribe to history updates. The callback receives a `HistoryUpdate`\n * describing what kind of update happened (matches the node wasm\n * binding's `EditorAPI` surface) so consumers can distinguish a\n * snapshot mutation from an `Activated` event triggered by\n * `setActiveHistory` \u2014 important for save-button logic that should NOT\n * fire on activation alone.\n * @param callback - Called with the kind of update.\n * @returns A function that unsubscribes when called.\n */\n onHistoryUpdatedWithKind(\n callback: (kind: HistoryUpdate) => void\n ): () => void {\n const id = this.#engine.subscribeToHistoryWithKind((value: number) => {\n callback(value === 1 ? 'Activated' : 'Updated');\n });\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to role changes.\n * @param callback - Called with the new role when it changes.\n * @returns A function that unsubscribes when called.\n */\n onRoleChanged(callback: (role: string) => void): () => void {\n const id = this.#engine.subscribeToRoleChange(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n // Buffer management (matching WASM/Android EditorAPI)\n /**\n * Create a new buffer and return its URI.\n * @returns A URI to identify the created buffer (buffer://N format).\n */\n createBuffer(): string {\n return this.#engine.createBuffer();\n }\n\n /**\n * Destroy a buffer and free its resources.\n * @param uri - The URI of the buffer to destroy.\n */\n destroyBuffer(uri: string): void {\n this.#engine.destroyBuffer(uri);\n }\n\n /**\n * Set the data of a buffer at a given offset.\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 this.#engine.setBufferData(uri, offset, data);\n }\n\n /**\n * Get the data of a buffer at a given offset.\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 return this.#engine.getBufferData(uri, offset, length);\n }\n\n /**\n * Get the length of a buffer.\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 return this.#engine.getBufferLength(uri);\n }\n\n /**\n * Resize a buffer. Truncates if `length` is smaller than the current\n * size; zero-extends if larger. Matches the WASM `editor.setBufferLength`\n * shape used by psd/pdf/idml importers to pre-allocate a buffer before\n * writing data with `setBufferData`.\n */\n setBufferLength(uri: string, length: number): void {\n this.#engine.setBufferLength(uri, length);\n }\n}\n\n/**\n * EventAPI provides methods for event subscription\n */\nexport class EventAPI implements IEventAPI {\n #engine: NativeEngine;\n\n constructor(engine: NativeEngine) {\n this.#engine = engine;\n }\n\n /**\n * Subscribe to block lifecycle events.\n * Events are bundled and delivered at the end of each engine update cycle.\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 = (\n blocks: DesignBlockId[],\n callback: (events: BlockEvent[]) => void\n ): (() => void) => {\n // Native binding takes 2 args: (blocks, callback).\n // Event type filtering is not supported in the node native binding.\n // Wrap the user callback to swallow exceptions: an unhandled throw inside\n // a subscribe callback unwinds through the native thread-safe call into\n // C++ and can wedge the engine update loop. Match WASM's EventAPI which\n // logs and continues on user-callback exceptions.\n const safeCallback = (events: BlockEvent[]) => {\n try {\n callback(events);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[cesdk_native] block-event subscriber threw:', err);\n }\n };\n const subscription = this.#engine.subscribe(blocks, safeCallback);\n return () => {\n this.#engine.unsubscribe(subscription);\n };\n };\n}\n\n/**\n * AssetAPI provides methods for asset source management\n * API matches Web bindings: engine.asset.*\n */\nexport class AssetAPI implements IAssetAPI {\n #engine: NativeEngine;\n\n constructor(engine: NativeEngine) {\n this.#engine = engine;\n }\n\n /**\n * Add a custom asset source with callbacks.\n *\n * This allows you to provide custom implementations for finding, fetching,\n * and applying assets from any data source.\n *\n * @param source - The asset source configuration with callbacks.\n */\n addSource(source: AssetSource): void {\n // The node native binding uses a callback pattern for async operations:\n // Each async callback receives a resultCb(error, result) as its last argument.\n // We use Promise.resolve() to handle both sync and async source callbacks uniformly.\n this.#engine.addAssetSource({\n id: source.id,\n findAssets: (\n query: AssetsQuery,\n resultCb: (error: any, result?: AssetsQueryResult) => void\n ) => {\n Promise.resolve(source.findAssets(query))\n .then((result) =>\n resultCb(\n null,\n result ?? { assets: [], currentPage: 0, total: 0, nextPage: -1 }\n )\n )\n .catch((err) => resultCb(err));\n },\n fetchAsset: source.fetchAsset\n ? (\n id: string,\n params: { locale?: string } | undefined,\n resultCb: (error: any, result?: AssetResult | null) => void\n ) => {\n Promise.resolve(source.fetchAsset!(id, params))\n .then((result) => resultCb(null, result))\n .catch((err) => resultCb(err));\n }\n : undefined,\n getGroups: source.getGroups\n ? (resultCb: (error: any, result?: string[]) => void) => {\n Promise.resolve(source.getGroups!())\n .then((result) => resultCb(null, result))\n .catch((err) => resultCb(err));\n }\n : undefined,\n credits: source.credits,\n license: source.license,\n getSupportedMimeTypes: source.getSupportedMimeTypes,\n applyAsset: source.applyAsset\n ? (\n asset: CompleteAssetResult,\n resultCb: (error: any, result?: DesignBlockId) => void\n ) => {\n Promise.resolve(source.applyAsset!(asset))\n .then((result) => resultCb(null, result))\n .catch((err) => resultCb(err));\n }\n : undefined,\n applyAssetToBlock: source.applyAssetToBlock\n ? (\n asset: CompleteAssetResult,\n block: DesignBlockId,\n resultCb: (error: any) => void\n ) => {\n Promise.resolve(source.applyAssetToBlock!(asset, block))\n .then(() => resultCb(null))\n .catch((err) => resultCb(err));\n }\n : undefined,\n applyAssetProperty: source.applyAssetProperty\n ? (\n asset: CompleteAssetResult,\n property: AssetProperty,\n resultCb: (error: any) => void\n ) => {\n Promise.resolve(source.applyAssetProperty!(asset, property))\n .then(() => resultCb(null))\n .catch((err) => resultCb(err));\n }\n : undefined,\n addAsset: source.addAsset,\n removeAsset: source.removeAsset\n });\n }\n\n /**\n * Add a local asset source.\n *\n * Mirrors `@cesdk/node`'s 4-argument shape\n * (`bindings/wasm/js_web/src/AssetAPI.ts`): when `applyAsset`\n * or `applyAssetToBlock` is supplied, we wrap the local source as a\n * synthetic `AssetSource` via {@link addSource} so the callbacks are\n * honored. Without callbacks we go through the cheap `addLocalSource`\n * fast path.\n *\n * @param id - Unique identifier for the asset source.\n * @param supportedMimeTypes - The mime types of assets that are allowed to be added.\n * @param applyAsset - Optional callback invoked when the asset is applied to a new block.\n * @param applyAssetToBlock - Optional callback invoked when the asset is applied to an existing block.\n */\n addLocalSource(\n id: string,\n supportedMimeTypes?: string[],\n applyAsset?: (\n asset: CompleteAssetResult\n ) => Promise<DesignBlockId | undefined>,\n applyAssetToBlock?: (\n asset: CompleteAssetResult,\n block: DesignBlockId\n ) => Promise<void>\n ): void {\n if (applyAsset == null && applyAssetToBlock == null) {\n this.#engine.addLocalAssetSource(id, supportedMimeTypes ?? []);\n return;\n }\n\n // With callbacks: register first as a plain local source so\n // addAssetToSource / removeAssetFromSource keep working, then attach\n // the middleware via registerApplyMiddleware so the custom apply\n // logic runs without losing the \"local-source\" identity.\n this.#engine.addLocalAssetSource(id, supportedMimeTypes ?? []);\n if (applyAsset != null) {\n this.registerApplyMiddleware(id, async (asset, next) => {\n const result = await applyAsset(asset);\n if (result !== undefined) return result;\n return next(asset);\n });\n }\n if (applyAssetToBlock != null) {\n this.registerApplyToBlockMiddleware(id, async (asset, block, next) => {\n await applyAssetToBlock(asset, block);\n await next(asset, block);\n });\n }\n }\n\n /**\n * Creates a new local asset source from a JSON string.\n * @param contentJSON - The JSON string containing the asset definitions.\n * @param basePath - Optional base path for resolving relative URLs.\n * @param options - Optional configuration with matcher patterns.\n * @returns The ID of the created asset source.\n */\n addLocalAssetSourceFromJSONString(\n contentJSON: string,\n basePath?: string,\n options?: { matcher?: string[] }\n ): Promise<string> {\n try {\n const sourceId = this.#engine.addLocalAssetSourceFromJSONString(\n contentJSON,\n basePath,\n options?.matcher\n );\n return Promise.resolve(sourceId);\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n /**\n * Creates a new local asset source from a JSON URI.\n * @param contentURI - The URI for the JSON file to load.\n * @param options - Optional configuration with matcher patterns.\n * @returns The ID of the created asset source.\n */\n addLocalAssetSourceFromJSONURI(\n contentURI: string,\n options?: { matcher?: string[] }\n ): Promise<string> {\n return this.#engine.addLocalAssetSourceFromJSONURI(\n contentURI,\n options?.matcher\n );\n }\n\n /**\n * Remove a registered asset source.\n * @param id - The ID of the asset source to remove.\n */\n removeSource(id: string): void {\n this.#engine.removeAssetSource(id);\n }\n\n /**\n * Get all registered asset source IDs.\n * @returns A list with the IDs of all registered asset sources.\n */\n findAllSources(): string[] {\n return this.#engine.findAllAssetSources();\n }\n\n /**\n * Search for assets in a specific source.\n *\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 async findAssets(\n sourceId: string,\n query: AssetsQuery\n ): Promise<AssetsQueryResult<CompleteAssetResult>> {\n // Normalize the query the same way WASM does so the engine sees a\n // fully-populated FindAssetsQuery \u2014 partial queries (e.g. `{ query: 'foo' }`\n // or `{}`) would otherwise dereference unset fields in the C++ binding.\n // Several fields are not declared on the shared AssetsQuery type but are\n // accepted by the C++ binding (excludeGroups/locale/sortingOrder/sortKey/\n // sortActiveFirst); read via cast until shared types catch up.\n const q = query as Partial<{\n perPage: number;\n page: number;\n query: string;\n tags: string[] | string | Record<string, string>;\n groups: string[];\n excludeGroups: string[];\n locale: string;\n sortingOrder: string;\n sortKey: string;\n sortActiveFirst: boolean;\n filter: unknown[];\n }>;\n const tagsRaw = q?.tags;\n const tags: string[] | Record<string, string> = Array.isArray(tagsRaw)\n ? tagsRaw\n : typeof tagsRaw === 'string'\n ? [tagsRaw]\n : tagsRaw && typeof tagsRaw === 'object'\n ? (tagsRaw as Record<string, string>)\n : [];\n const normalizedQuery = {\n perPage: q?.perPage ?? 0,\n page: q?.page ?? 0,\n query: q?.query ?? '',\n tags,\n groups: q?.groups ?? [],\n excludeGroups: q?.excludeGroups ?? [],\n locale: q?.locale ?? '',\n sortingOrder: q?.sortingOrder ?? 'None',\n sortKey: q?.sortKey ?? '',\n sortActiveFirst: q?.sortActiveFirst ?? false,\n filter: q?.filter ?? []\n } as unknown as AssetsQuery;\n const result = await this.#engine.findAssetSourceAssets(\n sourceId,\n normalizedQuery\n );\n // The C++ engine emits `nextPage: -1` as the \"no more pages\" sentinel.\n // WASM remaps that to `undefined`, so consumer code like\n // `while (result.nextPage != null) ...` terminates. Match WASM here.\n const r = result as { nextPage?: number };\n return {\n ...result,\n nextPage: r.nextPage === -1 ? undefined : r.nextPage\n } as AssetsQueryResult<CompleteAssetResult>;\n }\n\n /**\n * Fetch a specific asset by id from an asset source.\n * Returns `null` when the asset is not found.\n */\n async fetchAsset(\n sourceId: string,\n assetId: string,\n params: { locale?: string } = {}\n ): Promise<CompleteAssetResult | null> {\n const fetchParams = { locale: params.locale ?? '' };\n return this.#engine.fetchAssetSourceAsset(sourceId, assetId, fetchParams);\n }\n\n /**\n * Get available asset groups from a source.\n * @param id - The ID of the asset source.\n * @returns Promise resolving to list of available group names.\n */\n async getGroups(id: string): Promise<string[]> {\n return this.#engine.getAssetSourceGroups(id);\n }\n\n /**\n * Get license information for an asset source.\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's license info.\n */\n getLicense(\n sourceId: string\n ): { name: string; url: string | undefined } | undefined {\n const license = this.#engine.getAssetSourceLicense(sourceId);\n if (!license || (!license.name && !license.url)) {\n return undefined;\n }\n return { name: license.name, url: license.url || undefined };\n }\n\n /**\n * Get attribution credits for an asset source.\n * @param sourceId - The ID of the asset source.\n * @returns The asset source's credits info.\n */\n getCredits(\n sourceId: string\n ): { name: string; url: string | undefined } | undefined {\n const credits = this.#engine.getAssetSourceCredits(sourceId);\n if (!credits || (!credits.name && !credits.url)) {\n return undefined;\n }\n return { name: credits.name, url: credits.url || undefined };\n }\n\n /**\n * Get supported MIME types for an asset source.\n * @param sourceId - The ID of the asset source.\n * @returns Array of supported MIME type strings.\n */\n getSupportedMimeTypes(sourceId: string): string[] {\n return this.#engine.getAssetSourceSupportedMimeTypes(sourceId);\n }\n\n /**\n * Add an asset to a local asset source.\n * @param sourceId - The local asset source ID.\n * @param asset - The asset definition to add.\n */\n addAssetToSource(sourceId: string, asset: Asset): void {\n this.#engine.addAssetToSource(sourceId, asset);\n }\n\n /**\n * Remove an asset from a local asset source.\n * @param sourceId - The ID of the local asset source.\n * @param assetId - The ID of the asset to remove.\n */\n removeAssetFromSource(sourceId: string, assetId: string): void {\n this.#engine.removeAssetFromSource(sourceId, assetId);\n }\n\n /**\n * Notify the engine that an asset source's contents have changed.\n * @param sourceID - The asset source whose contents changed.\n */\n assetSourceContentsChanged(sourceID: string): void {\n this.#engine.assetSourceContentsChanged(sourceID);\n }\n\n /**\n * Subscribe to \"asset source added\" events.\n * @param callback - Called with the source ID whenever a new asset source is registered.\n * @returns A function that unsubscribes when called.\n */\n onAssetSourceAdded(callback: (sourceId: string) => void): () => void {\n const id = this.#engine.subscribeToAssetSourceAdded(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to \"asset source removed\" events.\n * @param callback - Called with the source ID whenever an asset source is removed.\n * @returns A function that unsubscribes when called.\n */\n onAssetSourceRemoved(callback: (sourceId: string) => void): () => void {\n const id = this.#engine.subscribeToAssetSourceRemoved(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n /**\n * Subscribe to \"asset source updated\" events.\n * @param callback - Called with the source ID whenever an asset source's contents change.\n * @returns A function that unsubscribes when called.\n */\n onAssetSourceUpdated(callback: (sourceId: string) => void): () => void {\n const id = this.#engine.subscribeToAssetSourceUpdated(callback);\n return () => this.#engine.unsubscribe(id);\n }\n\n // -------------------------------------------------------------------------\n // Apply-asset surface (parity with @cesdk/node's AssetAPI:955-1195).\n //\n // The C++ binding already exposes the four primitives (`applyAssetSourceAsset`,\n // `applyAssetSourceAssetToBlock`, `applyAssetSourceProperty`,\n // `defaultApplyAsset`, `defaultApplyAssetToBlock`) \u2014 we only need to bridge\n // them through a TS-level middleware chain so registerApplyMiddleware /\n // registerApplyToBlockMiddleware work.\n // -------------------------------------------------------------------------\n\n #applyMiddleware = new Map<\n string,\n Array<\n (\n asset: CompleteAssetResult,\n next: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>\n ) => Promise<DesignBlockId | undefined>\n >\n >();\n\n #applyToBlockMiddleware = new Map<\n string,\n Array<\n (\n asset: CompleteAssetResult,\n block: DesignBlockId,\n next: (\n asset: CompleteAssetResult,\n block: DesignBlockId\n ) => Promise<void>\n ) => Promise<void>\n >\n >();\n\n /**\n * Apply an asset to the current scene. Honors any middleware registered\n * via {@link registerApplyMiddleware} and falls back to\n * {@link defaultApplyAsset}.\n *\n * @public\n */\n async apply(\n sourceId: string,\n asset: CompleteAssetResult\n ): Promise<DesignBlockId | undefined> {\n const tail = (a: CompleteAssetResult) => this.defaultApplyAsset(a);\n const middlewares = this.#applyMiddleware.get(sourceId) ?? [];\n let next: (a: CompleteAssetResult) => Promise<DesignBlockId | undefined> =\n tail;\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const prev = next;\n next = (a) => mw(a, prev);\n }\n return next(asset);\n }\n\n /**\n * Apply an asset to a specific block. Honors any middleware registered\n * via {@link registerApplyToBlockMiddleware} and falls back to\n * {@link defaultApplyAssetToBlock}.\n *\n * @public\n */\n async applyToBlock(\n sourceId: string,\n asset: CompleteAssetResult,\n block: DesignBlockId\n ): Promise<void> {\n const tail = (a: CompleteAssetResult, b: DesignBlockId) =>\n this.defaultApplyAssetToBlock(a, b);\n const middlewares = this.#applyToBlockMiddleware.get(sourceId) ?? [];\n let next: (a: CompleteAssetResult, b: DesignBlockId) => Promise<void> =\n tail;\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const prev = next;\n next = (a, b) => mw(a, b, prev);\n }\n return next(asset, block);\n }\n\n /**\n * Apply a property change from an asset payload.\n *\n * @public\n */\n async applyProperty(\n sourceId: string,\n asset: CompleteAssetResult,\n property: AssetProperty\n ): Promise<void> {\n return this.#engine.applyAssetSourceProperty(sourceId, asset, property);\n }\n\n /**\n * Default apply-asset implementation (no middleware). Calls the engine's\n * built-in apply logic; used as the tail of the middleware chain in\n * {@link apply}.\n *\n * @public\n */\n async defaultApplyAsset(\n asset: CompleteAssetResult\n ): Promise<DesignBlockId | undefined> {\n const result = await this.#engine.defaultApplyAsset(asset);\n return result === -1 || result == null ? undefined : result;\n }\n\n /**\n * Default apply-to-block implementation (no middleware). Used as the\n * tail of the middleware chain in {@link applyToBlock}.\n *\n * @public\n */\n async defaultApplyAssetToBlock(\n asset: CompleteAssetResult,\n block: DesignBlockId\n ): Promise<void> {\n await this.#engine.defaultApplyAssetToBlock(asset, block);\n }\n\n /**\n * Register a middleware in the apply-asset chain for a source.\n *\n * @param sourceId - The source to install the middleware on.\n * @param middleware - Callable that may consume the asset, defer to\n * the next middleware, or short-circuit. Returns the created block id\n * (or undefined to fall through).\n * @public\n */\n registerApplyMiddleware(\n sourceId: string,\n middleware: (\n asset: CompleteAssetResult,\n next: (asset: CompleteAssetResult) => Promise<DesignBlockId | undefined>\n ) => Promise<DesignBlockId | undefined>\n ): void {\n const arr = this.#applyMiddleware.get(sourceId) ?? [];\n arr.push(middleware);\n this.#applyMiddleware.set(sourceId, arr);\n }\n\n /**\n * Register a middleware in the apply-asset-to-block chain for a source.\n *\n * @public\n */\n registerApplyToBlockMiddleware(\n sourceId: string,\n middleware: (\n asset: CompleteAssetResult,\n block: DesignBlockId,\n next: (asset: CompleteAssetResult, block: DesignBlockId) => Promise<void>\n ) => Promise<void>\n ): void {\n const arr = this.#applyToBlockMiddleware.get(sourceId) ?? [];\n arr.push(middleware);\n this.#applyToBlockMiddleware.set(sourceId, arr);\n }\n\n /**\n * Whether the named source supports `addAssetToSource` /\n * `removeAssetFromSource`. Local sources return `true` by default; custom\n * sources return whatever they declared via `canManageAssets` in their\n * registration object.\n *\n * @public\n */\n canManageAssets(sourceId: string): boolean {\n // The C++ binding exposes this as `getSupportedMimeTypes`-style metadata;\n // when an explicit C++ method isn't available we fall back to checking\n // whether the source accepts add/remove operations. Local sources always\n // do, custom sources via `addSource` may have set canManageAssets=false.\n try {\n // Try a dry-run remove of a non-existent id; the engine throws if\n // the source doesn't support management, returns gracefully otherwise.\n this.#engine.removeAssetFromSource(\n sourceId,\n '__cesdk_probe_does_not_exist__'\n );\n return true;\n } catch {\n return false;\n }\n }\n}\n\n/**\n * VariableAPI is consumed from `@cesdk/shared` so the class body lives in one\n * place. Re-exported here to keep `engine.variable` pointing at the same class\n * symbol consumers have always used (preserves `instanceof` checks etc.).\n *\n * The shared class accepts an `EngineBindingHandle` \u2014 the node native\n * binding already satisfies the four variable-related methods of that\n * interface (findAllVariables / setVariableString / getVariableString /\n * removeVariable), so no adapter object is needed. Just pass the binding\n * directly.\n */\nexport { VariableAPI };\n\n// Native engine interface - comprehensive list of all methods\ninterface NativeEngine {\n // Engine lifecycle\n update(): boolean;\n dispose(): void;\n\n // License\n unlockWithLicense(license: string): void;\n getActiveLicense(): string;\n\n // Scene\n createScene(sceneLayout?: string): DesignBlockId;\n createVideoScene(): DesignBlockId;\n createSceneFromImage(\n uri: string,\n dpi?: number,\n pixelScaleFactor?: number\n ): Promise<DesignBlockId>;\n createSceneFromVideo(uri: string): Promise<DesignBlockId>;\n loadSceneFromString(\n content: string,\n overrideEditorConfig?: boolean,\n waitForResources?: boolean\n ): Promise<DesignBlockId>;\n loadSceneFromURL(\n url: string,\n overrideEditorConfig?: boolean,\n waitForResources?: boolean\n ): Promise<DesignBlockId>;\n loadSceneFromArchiveURL(\n url: string,\n overrideEditorConfig?: boolean,\n waitForResources?: boolean\n ): Promise<DesignBlockId>;\n saveSceneToString(\n scene: DesignBlockId,\n options?: { compression?: { format?: number; level?: number } }\n ): Promise<string>;\n saveSceneToArchive(scene: DesignBlockId): Promise<Uint8Array>;\n applyTemplateFromString(content: string): Promise<void>;\n applyTemplateFromURL(url: string): Promise<void>;\n getPages(scene: DesignBlockId): DesignBlockId[];\n addPage(scene: DesignBlockId): DesignBlockId;\n getCurrentPage(scene: DesignBlockId): DesignBlockId | null;\n getSceneMode(scene: DesignBlockId): string;\n getSceneLayout(scene: DesignBlockId): string;\n setSceneLayout(scene: DesignBlockId, layout: string): void;\n getDesignUnit(scene: DesignBlockId): string;\n setDesignUnit(scene: DesignBlockId, unit: string): void;\n getFontSizeUnit(scene: DesignBlockId): string;\n setFontSizeUnit(scene: DesignBlockId, unit: string): void;\n\n // Block lifecycle\n create(type: string): DesignBlockId;\n createFill(type: string): DesignBlockId;\n createShape(type: string): DesignBlockId;\n createEffect(type: string): DesignBlockId;\n createBlur(type: string): DesignBlockId;\n createAnimation(type: string): DesignBlockId;\n duplicate(block: DesignBlockId, attachToParent?: boolean): DesignBlockId;\n destroy(block: DesignBlockId): void;\n isValid(block: DesignBlockId): boolean;\n\n // Find\n findAll(): DesignBlockId[];\n findAllPlaceholders(): DesignBlockId[];\n findAllUnused(): DesignBlockId[];\n findByName(name: string): DesignBlockId[];\n findByType(type: string): DesignBlockId[];\n findByKind(kind: string): DesignBlockId[];\n findAllSelected(): DesignBlockId[];\n\n // Hierarchy\n getParent(block: DesignBlockId): DesignBlockId;\n hasParent(block: DesignBlockId): boolean;\n getChildren(block: DesignBlockId): DesignBlockId[];\n insertChild(parent: DesignBlockId, child: DesignBlockId, index: number): void;\n appendChild(parent: DesignBlockId, child: DesignBlockId): void;\n\n // Properties\n getType(block: DesignBlockId): string;\n getKind(block: DesignBlockId): string;\n setKind(block: DesignBlockId, kind: string): void;\n getName(block: DesignBlockId): string;\n setName(block: DesignBlockId, name: string): void;\n getUUID(block: DesignBlockId): string;\n\n // Typed properties\n getBool(block: DesignBlockId, property: string): boolean;\n setBool(block: DesignBlockId, property: string, value: boolean): void;\n getInt(block: DesignBlockId, property: string): number;\n setInt(block: DesignBlockId, property: string, value: number): void;\n getFloat(block: DesignBlockId, property: string): number;\n setFloat(block: DesignBlockId, property: string, value: number): void;\n getDouble(block: DesignBlockId, property: string): number;\n setDouble(block: DesignBlockId, property: string, value: number): void;\n getString(block: DesignBlockId, property: string): string;\n setString(block: DesignBlockId, property: string, value: string): void;\n // Color methods on the addon take/return the internal C++ shape\n // (NativeColorInternal), not the user-facing `Color` union. The wrapper\n // converts at the boundary via `NativeColorInternal.toColor` /\n // `fromColor` so consumers see `Color`. Declaring the addon shape here\n // keeps the cast-free path honest.\n getColor(block: DesignBlockId, property: string): NativeColorInternal;\n setColor(\n block: DesignBlockId,\n property: string,\n value: NativeColorInternal\n ): void;\n getEnum(block: DesignBlockId, property: string): string;\n setEnum(block: DesignBlockId, property: string, value: string): void;\n\n // Transform\n getPositionX(block: DesignBlockId): number;\n setPositionX(block: DesignBlockId, value: number): void;\n getPositionY(block: DesignBlockId): number;\n setPositionY(block: DesignBlockId, value: number): void;\n getPositionXMode(block: DesignBlockId): string;\n setPositionXMode(block: DesignBlockId, mode: string): void;\n getPositionYMode(block: DesignBlockId): string;\n setPositionYMode(block: DesignBlockId, mode: string): void;\n getWidth(block: DesignBlockId): number;\n setWidth(block: DesignBlockId, value: number): void;\n getWidthMode(block: DesignBlockId): string;\n setWidthMode(block: DesignBlockId, mode: string): void;\n getHeight(block: DesignBlockId): number;\n setHeight(block: DesignBlockId, value: number): void;\n getHeightMode(block: DesignBlockId): string;\n setHeightMode(block: DesignBlockId, mode: string): void;\n getRotation(block: DesignBlockId): number;\n setRotation(block: DesignBlockId, value: number): void;\n getScaleX(block: DesignBlockId): number;\n setScaleX(block: DesignBlockId, value: number): void;\n getScaleY(block: DesignBlockId): number;\n setScaleY(block: DesignBlockId, value: number): void;\n getFlip(block: DesignBlockId): { horizontal: boolean; vertical: boolean };\n setFlipHorizontal(block: DesignBlockId, flip: boolean): void;\n setFlipVertical(block: DesignBlockId, flip: boolean): void;\n scale(\n block: DesignBlockId,\n scale: number,\n anchorX?: number,\n anchorY?: number\n ): void;\n fillParent(block: DesignBlockId): void;\n resizeContentAware(\n blocks: DesignBlockId[],\n width: number,\n height: number\n ): Promise<void>;\n\n // Global bounding box\n getGlobalBoundingBoxX(block: DesignBlockId): number;\n getGlobalBoundingBoxY(block: DesignBlockId): number;\n getGlobalBoundingBoxWidth(block: DesignBlockId): number;\n getGlobalBoundingBoxHeight(block: DesignBlockId): number;\n getScreenSpaceBoundingBoxXYWH(blocks: DesignBlockId[]): XYWH;\n\n // Fill\n supportsFill(block: DesignBlockId): boolean;\n hasFill(block: DesignBlockId): boolean;\n getFill(block: DesignBlockId): DesignBlockId;\n setFill(block: DesignBlockId, fill: DesignBlockId): void;\n getFillEnabled(block: DesignBlockId): boolean;\n setFillEnabled(block: DesignBlockId, enabled: boolean): void;\n // The C++ binding (`appearance.cpp::GetFillSolidColor`) returns a flat\n // `{ r, g, b, a }` object via `std::array<float, 4>` \u2014 same shape as\n // WASM's `RGBA`. Do NOT route through `NativeColorInternal.toColor`;\n // that helper expects the internal `{ colorSpace, components, ... }`\n // shape used by other color paths and throws \"Unknown color space!\"\n // on this one.\n getFillSolidColor(block: DesignBlockId): RGBAColor;\n setFillSolidColor(\n block: DesignBlockId,\n color: { r: number; g: number; b: number; a: number }\n ): void;\n // The C++ binding exchanges the engine's internal `Color`\n // representation (`{ colorSpace, components, spotColorName, tint,\n // externalReference }`), not the user-facing `Color` tagged union.\n // The TS wrapper class translates between the two so consumers see\n // the WASM-shaped `GradientColorStop` API.\n getGradientColorStops(\n block: DesignBlockId,\n property: string\n ): Array<{ color: NativeColorInternal; stop: number }>;\n setGradientColorStops(\n block: DesignBlockId,\n property: string,\n stops: Array<{ color: NativeColorInternal; stop: number }>\n ): void;\n\n // Stroke\n supportsStroke(block: DesignBlockId): boolean;\n hasStroke(block: DesignBlockId): boolean;\n getStroke(block: DesignBlockId): DesignBlockId;\n setStroke(block: DesignBlockId, stroke: DesignBlockId): void;\n getStrokeEnabled(block: DesignBlockId): boolean;\n setStrokeEnabled(block: DesignBlockId, enabled: boolean): void;\n getStrokeColor(block: DesignBlockId): NativeColorInternal;\n setStrokeColor(block: DesignBlockId, color: NativeColorInternal): void;\n getStrokeColorRGBA(block: DesignBlockId): RGBAColor;\n setStrokeColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void;\n getStrokeWidth(block: DesignBlockId): number;\n setStrokeWidth(block: DesignBlockId, width: number): void;\n getStrokeStyle(block: DesignBlockId): string;\n setStrokeStyle(block: DesignBlockId, style: string): void;\n getStrokePosition(block: DesignBlockId): string;\n setStrokePosition(block: DesignBlockId, position: string): void;\n getStrokeCornerGeometry(block: DesignBlockId): string;\n setStrokeCornerGeometry(block: DesignBlockId, geometry: string): void;\n\n // Stroke caps + dash pattern (line shapes / dashed strokes).\n getStrokeCap(block: DesignBlockId): string;\n setStrokeCap(block: DesignBlockId, cap: string): void;\n getStrokeStartCap(block: DesignBlockId): string;\n setStrokeStartCap(block: DesignBlockId, cap: string): void;\n getStrokeEndCap(block: DesignBlockId): string;\n setStrokeEndCap(block: DesignBlockId, cap: string): void;\n getStrokeDashStartCap(block: DesignBlockId): string;\n setStrokeDashStartCap(block: DesignBlockId, cap: string): void;\n getStrokeDashEndCap(block: DesignBlockId): string;\n setStrokeDashEndCap(block: DesignBlockId, cap: string): void;\n getStrokeDashArray(block: DesignBlockId): number[];\n setStrokeDashArray(block: DesignBlockId, dashArray: number[]): void;\n getStrokeDashOffset(block: DesignBlockId): number;\n setStrokeDashOffset(block: DesignBlockId, dashOffset: number): void;\n isLineOrigin(block: DesignBlockId): boolean;\n\n // Effects\n supportsEffects(block: DesignBlockId): boolean;\n hasEffects(block: DesignBlockId): boolean;\n getEffects(block: DesignBlockId): DesignBlockId[];\n appendEffect(block: DesignBlockId, effect: DesignBlockId): void;\n insertEffect(\n block: DesignBlockId,\n effect: DesignBlockId,\n index: number\n ): void;\n removeEffect(block: DesignBlockId, index: number): void;\n isEffectEnabled(effect: DesignBlockId): boolean;\n setEffectEnabled(effect: DesignBlockId, enabled: boolean): void;\n\n // Blur\n supportsBlur(block: DesignBlockId): boolean;\n hasBlur(block: DesignBlockId): boolean;\n getBlur(block: DesignBlockId): DesignBlockId;\n setBlur(block: DesignBlockId, blur: DesignBlockId): void;\n getBlurEnabled(block: DesignBlockId): boolean;\n setBlurEnabled(block: DesignBlockId, enabled: boolean): void;\n\n // Shape\n supportsShape(block: DesignBlockId): boolean;\n getShape(block: DesignBlockId): DesignBlockId;\n setShape(block: DesignBlockId, shape: DesignBlockId): void;\n\n // Animation\n supportsAnimation(block: DesignBlockId): boolean;\n getInAnimation(block: DesignBlockId): DesignBlockId;\n setInAnimation(block: DesignBlockId, animation: DesignBlockId): void;\n getOutAnimation(block: DesignBlockId): DesignBlockId;\n setOutAnimation(block: DesignBlockId, animation: DesignBlockId): void;\n getLoopAnimation(block: DesignBlockId): DesignBlockId;\n setLoopAnimation(block: DesignBlockId, animation: DesignBlockId): void;\n\n // Content fill mode\n supportsContentFillMode(block: DesignBlockId): boolean;\n getContentFillMode(block: DesignBlockId): string;\n setContentFillMode(block: DesignBlockId, mode: string): void;\n\n // Crop\n supportsCrop(block: DesignBlockId): boolean;\n resetCrop(block: DesignBlockId): void;\n adjustCropToFillFrame(block: DesignBlockId, minScaleRatio?: number): void;\n getCropRotation(block: DesignBlockId): number;\n setCropRotation(block: DesignBlockId, rotation: number): void;\n getCropScaleX(block: DesignBlockId): number;\n setCropScaleX(block: DesignBlockId, scale: number): void;\n getCropScaleY(block: DesignBlockId): number;\n setCropScaleY(block: DesignBlockId, scale: number): void;\n getCropScaleRatio(block: DesignBlockId): number;\n setCropScaleRatio(block: DesignBlockId, ratio: number): void;\n getCropTranslationX(block: DesignBlockId): number;\n setCropTranslationX(block: DesignBlockId, translation: number): void;\n getCropTranslationY(block: DesignBlockId): number;\n setCropTranslationY(block: DesignBlockId, translation: number): void;\n isCropAspectRatioLocked(block: DesignBlockId): boolean;\n setCropAspectRatioLocked(block: DesignBlockId, locked: boolean): void;\n flipCropHorizontal(block: DesignBlockId): void;\n flipCropVertical(block: DesignBlockId): void;\n\n // Drop shadow\n supportsDropShadow(block: DesignBlockId): boolean;\n isDropShadowEnabled(block: DesignBlockId): boolean;\n setDropShadowEnabled(block: DesignBlockId, enabled: boolean): void;\n getDropShadowColor(block: DesignBlockId): NativeColorInternal;\n setDropShadowColor(block: DesignBlockId, color: NativeColorInternal): void;\n getDropShadowColorRGBA(block: DesignBlockId): RGBAColor;\n setDropShadowColorRGBA(\n block: DesignBlockId,\n r: number,\n g: number,\n b: number,\n a: number\n ): void;\n getDropShadowOffsetX(block: DesignBlockId): number;\n setDropShadowOffsetX(block: DesignBlockId, offset: number): void;\n getDropShadowOffsetY(block: DesignBlockId): number;\n setDropShadowOffsetY(block: DesignBlockId, offset: number): void;\n getDropShadowBlurRadiusX(block: DesignBlockId): number;\n setDropShadowBlurRadiusX(block: DesignBlockId, radius: number): void;\n getDropShadowBlurRadiusY(block: DesignBlockId): number;\n setDropShadowBlurRadiusY(block: DesignBlockId, radius: number): void;\n getDropShadowClip(block: DesignBlockId): boolean;\n setDropShadowClip(block: DesignBlockId, clip: boolean): void;\n\n // Blend mode\n supportsBlendMode(block: DesignBlockId): boolean;\n getBlendMode(block: DesignBlockId): string;\n setBlendMode(block: DesignBlockId, mode: string): void;\n\n // Opacity\n supportsOpacity(block: DesignBlockId): boolean;\n getOpacity(block: DesignBlockId): number;\n setOpacity(block: DesignBlockId, opacity: number): void;\n\n // Visibility\n getVisible(block: DesignBlockId): boolean;\n setVisible(block: DesignBlockId, visible: boolean): void;\n getClipped(block: DesignBlockId): boolean;\n setClipped(block: DesignBlockId, clipped: boolean): void;\n\n // Selection\n setSelected(block: DesignBlockId, selected: boolean): void;\n isSelected(block: DesignBlockId): boolean;\n select(block: DesignBlockId): void;\n\n // Ordering\n bringToFront(block: DesignBlockId): void;\n sendToBack(block: DesignBlockId): void;\n bringForward(block: DesignBlockId): void;\n sendBackward(block: DesignBlockId): void;\n setAlwaysOnTop(block: DesignBlockId, enabled: boolean): void;\n setAlwaysOnBottom(block: DesignBlockId, enabled: boolean): void;\n isAlwaysOnTop(block: DesignBlockId): boolean;\n isAlwaysOnBottom(block: DesignBlockId): boolean;\n\n // Alignment and distribution\n alignHorizontally(blocks: DesignBlockId[], alignment: string): void;\n alignVertically(blocks: DesignBlockId[], alignment: string): void;\n isAlignable(blocks: DesignBlockId[]): boolean;\n distributeHorizontally(blocks: DesignBlockId[]): void;\n distributeVertically(blocks: DesignBlockId[]): void;\n isDistributable(blocks: DesignBlockId[]): boolean;\n\n // Grouping\n group(blocks: DesignBlockId[]): DesignBlockId;\n ungroup(group: DesignBlockId): void;\n isGroupable(blocks: DesignBlockId[]): boolean;\n enterGroup(group: DesignBlockId): void;\n exitGroup(block: DesignBlockId): void;\n\n // Combine\n combine(blocks: DesignBlockId[], operation: string): DesignBlockId;\n isCombinable(blocks: DesignBlockId[]): boolean;\n\n // Duration/Timeline\n supportsDuration(block: DesignBlockId): boolean;\n getDuration(block: DesignBlockId): number;\n setDuration(block: DesignBlockId, duration: number): void;\n supportsTimeOffset(block: DesignBlockId): boolean;\n getTimeOffset(block: DesignBlockId): number;\n setTimeOffset(block: DesignBlockId, offset: number): void;\n supportsTrim(block: DesignBlockId): boolean;\n getTrimOffset(block: DesignBlockId): number;\n setTrimOffset(block: DesignBlockId, offset: number): void;\n getTrimLength(block: DesignBlockId): number;\n setTrimLength(block: DesignBlockId, length: number): void;\n\n // Playback\n supportsPlaybackControl(block: DesignBlockId): boolean;\n supportsPlaybackTime(block: DesignBlockId): boolean;\n getPlaybackTime(block: DesignBlockId): number;\n setPlaybackTime(block: DesignBlockId, time: number): void;\n isPlaying(block: DesignBlockId): boolean;\n setPlaying(block: DesignBlockId, playing: boolean): void;\n isLooping(block: DesignBlockId): boolean;\n setLooping(block: DesignBlockId, looping: boolean): void;\n getPlaybackSpeed(block: DesignBlockId): number;\n setPlaybackSpeed(block: DesignBlockId, speed: number): void;\n isMuted(block: DesignBlockId): boolean;\n setMuted(block: DesignBlockId, muted: boolean): void;\n getVolume(block: DesignBlockId): number;\n setVolume(block: DesignBlockId, volume: number): void;\n isSoloPlaybackEnabled(block: DesignBlockId): boolean;\n setSoloPlaybackEnabled(block: DesignBlockId, enabled: boolean): void;\n isForceMuted(block: DesignBlockId): boolean;\n getTotalSceneDuration(scene: DesignBlockId): number;\n isVisibleAtCurrentPlaybackTime(block: DesignBlockId): boolean;\n\n // Locking\n isTransformLocked(block: DesignBlockId): boolean;\n setTransformLocked(block: DesignBlockId, locked: boolean): void;\n isHighlightingEnabled(block: DesignBlockId): boolean;\n setHighlightingEnabled(block: DesignBlockId, enabled: boolean): void;\n isSelectionEnabled(block: DesignBlockId): boolean;\n setSelectionEnabled(block: DesignBlockId, enabled: boolean): void;\n\n // Include in export\n isIncludedInExport(block: DesignBlockId): boolean;\n setIncludedInExport(block: DesignBlockId, included: boolean): void;\n\n // Placeholder\n isPlaceholderEnabled(block: DesignBlockId): boolean;\n setPlaceholderEnabled(block: DesignBlockId, enabled: boolean): void;\n supportsPlaceholderBehavior(block: DesignBlockId): boolean;\n isPlaceholderBehaviorEnabled(block: DesignBlockId): boolean;\n setPlaceholderBehaviorEnabled(block: DesignBlockId, enabled: boolean): void;\n supportsPlaceholderControls(block: DesignBlockId): boolean;\n isPlaceholderControlsOverlayEnabled(block: DesignBlockId): boolean;\n setPlaceholderControlsOverlayEnabled(\n block: DesignBlockId,\n enabled: boolean\n ): void;\n isPlaceholderControlsButtonEnabled(block: DesignBlockId): boolean;\n setPlaceholderControlsButtonEnabled(\n block: DesignBlockId,\n enabled: boolean\n ): void;\n\n // Background color\n supportsBackgroundColor(block: DesignBlockId): boolean;\n isBackgroundColorEnabled(block: DesignBlockId): boolean;\n setBackgroundColorEnabled(block: DesignBlockId, enabled: boolean): void;\n\n // Metadata\n hasMetadata(block: DesignBlockId, key: string): boolean;\n getMetadata(block: DesignBlockId, key: string): string;\n setMetadata(block: DesignBlockId, key: string, value: string): void;\n removeMetadata(block: DesignBlockId, key: string): void;\n findAllMetadata(block: DesignBlockId): string[];\n\n // Text\n replaceText(\n block: DesignBlockId,\n text: string,\n from?: number,\n to?: number\n ): void;\n removeText(block: DesignBlockId, from?: number, to?: number): void;\n getTextFontSizes(block: DesignBlockId, from?: number, to?: number): number[];\n setTextFontSize(\n block: DesignBlockId,\n size: number,\n from?: number,\n to?: number\n ): void;\n getTextFontStyles(block: DesignBlockId, from?: number, to?: number): string[];\n setTextFontStyle(\n block: DesignBlockId,\n style: string,\n from?: number,\n to?: number\n ): void;\n getTextFontWeights(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): string[];\n setTextFontWeight(\n block: DesignBlockId,\n weight: string,\n from?: number,\n to?: number\n ): void;\n getTextColors(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): NativeColorInternal[];\n setTextColor(\n block: DesignBlockId,\n color: NativeColorInternal,\n from?: number,\n to?: number\n ): void;\n getTextCases(block: DesignBlockId, from?: number, to?: number): string[];\n setTextCase(\n block: DesignBlockId,\n textCase: string,\n from?: number,\n to?: number\n ): void;\n getTypefaces(block: DesignBlockId, from?: number, to?: number): Typeface[];\n setTypeface(\n block: DesignBlockId,\n typeface: Typeface,\n from?: number,\n to?: number\n ): void;\n getTypeface(block: DesignBlockId): Typeface;\n setFont(block: DesignBlockId, fontUri: string, typeface: Typeface): void;\n // Character-level text kerning. The C++ side accepts grapheme indices\n // (the TS wrapper above runs the UTF-16 \u2192 grapheme conversion before\n // calling).\n setTextKerning(\n block: DesignBlockId,\n kerning: number,\n from?: number,\n to?: number\n ): void;\n getTextKernings(block: DesignBlockId, from?: number, to?: number): number[];\n // Content-fill alignment. Strings match the engine enum names:\n // `'Left' | 'Center' | 'Right'` and `'Top' | 'Center' | 'Bottom'`.\n setContentFillHorizontalAlignment(\n block: DesignBlockId,\n alignment: string\n ): void;\n getContentFillHorizontalAlignment(block: DesignBlockId): string;\n setContentFillVerticalAlignment(\n block: DesignBlockId,\n alignment: string\n ): void;\n getContentFillVerticalAlignment(block: DesignBlockId): string;\n canToggleBoldFont(block: DesignBlockId): boolean;\n toggleBoldFont(block: DesignBlockId): void;\n canToggleItalicFont(block: DesignBlockId): boolean;\n toggleItalicFont(block: DesignBlockId): void;\n getTextCursorRange(): Range;\n setTextCursorRange(from: number, to: number): void;\n getTextCursorPositionInScreenSpaceX(block: DesignBlockId): number;\n getTextCursorPositionInScreenSpaceY(block: DesignBlockId): number;\n getTextVisibleLineCount(block: DesignBlockId): number;\n getTextVisibleLineContent(block: DesignBlockId, lineIndex: number): string;\n getTextVisibleLineGlobalBoundingBoxXYWH(\n block: DesignBlockId,\n lineIndex: number\n ): XYWH;\n // Tight ink-paint bounding box per grapheme. The C++ side accepts\n // grapheme indices; the TS wrapper above runs the UTF-16 \u2192 grapheme\n // conversion before calling.\n getTextCharacterInkBoxes(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): CharacterInkBox[];\n getTextEffectiveHorizontalAlignment(block: DesignBlockId): string;\n getTextHorizontalAlignment(\n block: DesignBlockId,\n paragraphIndex?: number\n ): string | undefined;\n setTextHorizontalAlignment(\n block: DesignBlockId,\n alignment: string | undefined,\n paragraphIndex?: number\n ): void;\n getTextDecorations(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): unknown[];\n setTextDecoration(\n block: DesignBlockId,\n config: unknown,\n from?: number,\n to?: number\n ): void;\n toggleTextDecorationUnderline(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): void;\n toggleTextDecorationStrikethrough(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): void;\n toggleTextDecorationOverline(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): void;\n getTextListStyle(block: DesignBlockId, paragraphIndex: number): string;\n setTextListStyle(\n block: DesignBlockId,\n listStyle: string,\n paragraphIndex?: number,\n listLevel?: number\n ): void;\n getTextListLevel(block: DesignBlockId, paragraphIndex: number): number;\n setTextListLevel(\n block: DesignBlockId,\n listLevel: number,\n paragraphIndex?: number\n ): void;\n getTextParagraphIndices(\n block: DesignBlockId,\n from?: number,\n to?: number\n ): number[];\n getTextLineHeight(block: DesignBlockId, paragraphIndex: number): number;\n setTextLineHeight(\n block: DesignBlockId,\n lineHeight: number | undefined,\n paragraphIndex?: number\n ): void;\n setTextOnPath(block: DesignBlockId, svgPath: string | undefined): void;\n getTextOnPath(block: DesignBlockId): string | undefined;\n setTextOnPathOffset(block: DesignBlockId, offset: number): void;\n getTextOnPathOffset(block: DesignBlockId): number;\n setTextOnPathFlipped(block: DesignBlockId, flipped: boolean): void;\n getTextOnPathFlipped(block: DesignBlockId): boolean;\n getFontMetrics(fontFileUri: string): Promise<FontMetrics>;\n setMovementConstraint(\n targets: (DesignBlockId | string)[],\n overshoot: number\n ): void;\n getMovementConstraint(block: DesignBlockId): number;\n removeMovementConstraint(targets: (DesignBlockId | string)[]): void;\n\n // Source sets\n getSourceSet(block: DesignBlockId, property: string): Source[];\n setSourceSet(block: DesignBlockId, property: string, sources: Source[]): void;\n addImageFileURIToSourceSet(\n block: DesignBlockId,\n property: string,\n uri: string\n ): Promise<void>;\n addVideoFileURIToSourceSet(\n block: DesignBlockId,\n property: string,\n uri: string\n ): Promise<void>;\n\n // Video/Audio info\n getVideoWidth(block: DesignBlockId): number;\n getVideoHeight(block: DesignBlockId): number;\n getAudioTrackCountFromVideo(block: DesignBlockId): number;\n getAVResourceTotalDuration(block: DesignBlockId): number;\n\n // Split. C++ binding returns a single block id (the new trailing\n // block); the TS wrapper returns it as DesignBlockId.\n split(block: DesignBlockId, time: number): DesignBlockId;\n\n // Scene properties\n getSceneMode(scene: DesignBlockId): string;\n setSceneMode(scene: DesignBlockId, mode: string): void;\n getSceneLayout(scene: DesignBlockId): SceneLayout;\n setSceneLayout(scene: DesignBlockId, layout: SceneLayout): void;\n getDesignUnit(scene: DesignBlockId): string;\n setDesignUnit(scene: DesignBlockId, unit: string): void;\n getFontSizeUnit(scene: DesignBlockId): string;\n setFontSizeUnit(scene: DesignBlockId, unit: string): void;\n\n // Last frame\n getLastFrameX(block: DesignBlockId): number;\n getLastFrameY(block: DesignBlockId): number;\n getLastFrameWidth(block: DesignBlockId): number;\n getLastFrameHeight(block: DesignBlockId): number;\n\n // Page duration source\n supportsPageDurationSource(\n page: DesignBlockId,\n block: DesignBlockId\n ): boolean;\n setPageDurationSource(page: DesignBlockId, block: DesignBlockId): void;\n removePageDurationSource(page: DesignBlockId): void;\n isPageDurationSource(block: DesignBlockId): boolean;\n\n // Scope\n findAllScopes(): string[];\n getGlobalScope(key: string): string;\n setGlobalScope(key: string, value: string): void;\n isScopeEnabled(block: DesignBlockId, scope: string): boolean;\n setScopeEnabled(block: DesignBlockId, scope: string, enabled: boolean): void;\n isAllowedByScope(block: DesignBlockId, scope: string): boolean;\n\n // Properties\n findAllProperties(block: DesignBlockId): string[];\n // Note: UBQ API only takes property name, not block - these accept just the property\n getPropertyType(property: string): string;\n isPropertyReadable(property: string): boolean;\n isPropertyWritable(property: string): boolean;\n getEnumValues(property: string): string[];\n\n // Role (engine-level, no block parameter in native addon)\n getRole(): string;\n setRole(role: string): void;\n // Tracking pipeline. The C++ binding takes (license, userId, deviceId);\n // WASM ships a 2-arg wrapper that supplies `''` for deviceId. Native\n // wrapper does the same.\n startTracking(license: string, userId: string, deviceId: string): void;\n\n // State\n getState(block: DesignBlockId): string;\n\n // Zoom\n setZoomLevel(sceneOrCamera: DesignBlockId, level: number): void;\n getZoomLevel(sceneOrCamera: DesignBlockId): number;\n zoomToBlock(\n block: DesignBlockId,\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): Promise<void>;\n zoomToBlockWithAnimation(\n block: DesignBlockId,\n paddingLeft: number,\n paddingTop: number,\n paddingRight: number,\n paddingBottom: number,\n duration: number,\n easing: string,\n interruptible: boolean\n ): Promise<void>;\n immediateZoomToBlock(\n block: DesignBlockId,\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): void;\n enableZoomAutoFit(\n scene: DesignBlockId,\n axis: string,\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): void;\n disableZoomAutoFit(scene: DesignBlockId): void;\n isZoomAutoFitEnabled(scene: DesignBlockId): boolean;\n findNearestToViewPortCenterByType(\n scene: DesignBlockId,\n type: string\n ): DesignBlockId[];\n findNearestToViewPortCenterByKind(\n scene: DesignBlockId,\n kind: string\n ): DesignBlockId[];\n\n // Unstable camera clamping\n unstable_enableCameraPositionClamping(\n blocks: DesignBlockId[],\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number,\n scaledPaddingLeft?: number,\n scaledPaddingTop?: number,\n scaledPaddingRight?: number,\n scaledPaddingBottom?: number\n ): void;\n unstable_disableCameraPositionClamping(block: DesignBlockId): void;\n unstable_isCameraPositionClampingEnabled(block: DesignBlockId): boolean;\n unstable_enableCameraZoomClamping(\n blocks: DesignBlockId[],\n minZoomLimit?: number,\n maxZoomLimit?: number,\n paddingLeft?: number,\n paddingTop?: number,\n paddingRight?: number,\n paddingBottom?: number\n ): void;\n unstable_disableCameraZoomClamping(block: DesignBlockId): void;\n unstable_isCameraZoomClampingEnabled(block: DesignBlockId): boolean;\n\n // Export\n exportToBuffer(\n block: DesignBlockId,\n mimeType: string,\n options?: Record<string, unknown>\n ): Promise<Uint8Array>;\n exportWithColorMaskToBuffer(\n block: DesignBlockId,\n mimeType: string,\n maskColorR: number,\n maskColorG: number,\n maskColorB: number,\n options: {\n targetWidth: number;\n targetHeight: number;\n useTargetSize: boolean;\n jpegQuality: number;\n webpQuality: number;\n pngCompressionLevel: number;\n exportPdfWithHighCompatibility: boolean;\n exportPdfWithUnderlayer: boolean;\n underlayerSpotColorName: string;\n underlayerOffset: number;\n underlayerRenderRatio: number;\n underlayerMaxError: number;\n allowTextOverhang: boolean;\n }\n ): Promise<Uint8Array[]>;\n exportVideoToBuffer(\n block: DesignBlockId,\n timeOffset: number,\n duration: number,\n mimeType: string,\n progressCallback: (\n rendered: number,\n encoded: number,\n total: number\n ) => void,\n resultCallback: (error: Error | null, data?: Uint8Array) => void,\n options: {\n h264Profile: number;\n h264Level: number;\n videoBitrate: number;\n audioBitrate: number;\n framerate: number;\n useTargetSize: boolean;\n targetWidth: number;\n targetHeight: number;\n allowTextOverhang: boolean;\n }\n ): void;\n exportAudioToBuffer(\n block: DesignBlockId,\n timeOffset: number,\n duration: number,\n mimeType: string,\n progressCallback: (\n rendered: number,\n encoded: number,\n total: number\n ) => void,\n resultCallback: (error: Error | null, data?: Uint8Array) => void,\n options: {\n sampleRate: number;\n numberOfChannels: number;\n skipEncoding?: boolean;\n }\n ): void;\n\n // Blocks loading/saving\n loadBlocksFromString(content: string): Promise<DesignBlockId[]>;\n loadBlocksFromURL(url: string): Promise<DesignBlockId[]>;\n loadBlocksFromArchiveURL(url: string): Promise<DesignBlockId[]>;\n saveBlocksToString(blocks: DesignBlockId[]): Promise<string>;\n saveBlocksToArchive(blocks: DesignBlockId[]): Promise<Uint8Array>;\n\n // Resource priming for video/audio blocks\n forceLoadAVResource(block: DesignBlockId): Promise<void>;\n forceLoadResources(blocks: DesignBlockId[]): Promise<void>;\n\n // History\n createHistory(): HistoryId;\n destroyHistory(history: HistoryId): void;\n getActiveHistory(): HistoryId;\n setActiveHistory(history: HistoryId): void;\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n addUndoStep(): void;\n removeUndoStep(): void;\n\n // Subscriptions\n subscribe(\n blocks: DesignBlockId[],\n callback: (events: BlockEvent[]) => void\n ): SubscriptionId;\n unsubscribe(subscription: SubscriptionId): void;\n subscribeToZoomLevel(callback: () => void): SubscriptionId;\n subscribeToActiveSceneChange(callback: () => void): SubscriptionId;\n subscribeToBlockState(\n blocks: DesignBlockId[],\n callback: (ids: DesignBlockId[]) => void\n ): SubscriptionId;\n subscribeToEditorState(callback: () => void): SubscriptionId;\n // The node native binding already plumbs these subscriptions through to\n // C++ (see `engine_binding.cpp::Init` for `subscribeToSettings`,\n // `subscribeToSelectionChange`, `subscribeToBlockClicked`); the TS\n // surface exposes them as `editor.onSettingsChanged`,\n // `block.onSelectionChanged`, and `block.onClicked` to match WASM.\n subscribeToSettings(callback: () => void): SubscriptionId;\n subscribeToSelectionChange(callback: () => void): SubscriptionId;\n subscribeToBlockClicked(\n callback: (id: DesignBlockId) => void\n ): SubscriptionId;\n // The C++ side (see `bindings/nodejs/cpp/src/engine_binding_impl/text_advanced.cpp::SubscribeToHistoryWithKind`)\n // forwards `ubq::editor::HistoryUpdate` ordinals to the JS callback \u2014\n // 0 = `Updated`, 1 = `Activated`. The user-facing `editor.onHistoryUpdatedWithKind`\n // wrapper translates these to the canonical `'Updated'`/`'Activated'`\n // strings (matching WASM's `bindings/wasm/js_web/src/EditorAPI.ts`).\n subscribeToHistoryWithKind(callback: (kind: number) => void): SubscriptionId;\n subscribeToRoleChange(callback: (role: string) => void): SubscriptionId;\n subscribeToAssetSourceAdded(\n callback: (sourceId: string) => void\n ): SubscriptionId;\n subscribeToAssetSourceRemoved(\n callback: (sourceId: string) => void\n ): SubscriptionId;\n subscribeToAssetSourceUpdated(\n callback: (sourceId: string) => void\n ): SubscriptionId;\n\n // Asset sources\n addAssetSource(source: {\n id: string;\n findAssets: (\n query: AssetsQuery,\n resultCb: (error: any, result?: AssetsQueryResult) => void\n ) => void;\n fetchAsset?: (\n id: string,\n params: { locale?: string } | undefined,\n resultCb: (error: any, result?: AssetResult | null) => void\n ) => void;\n getGroups?: (resultCb: (error: any, result?: string[]) => void) => void;\n credits?: { name: string; url?: string };\n license?: { name: string; url?: string };\n getSupportedMimeTypes?: () => string[] | undefined;\n applyAsset?: (\n asset: CompleteAssetResult,\n resultCb: (error: any, result?: DesignBlockId) => void\n ) => void;\n applyAssetToBlock?: (\n asset: CompleteAssetResult,\n block: DesignBlockId,\n resultCb: (error: any) => void\n ) => void;\n applyAssetProperty?: (\n asset: CompleteAssetResult,\n property: AssetProperty,\n resultCb: (error: any) => void\n ) => void;\n addAsset?: (asset: AssetDefinition) => void;\n removeAsset?: (assetId: string) => void;\n }): void;\n addLocalAssetSource(id: string, supportedMimeTypes: string[]): void;\n addLocalAssetSourceFromJSONString(\n contentJSON: string,\n basePath?: string,\n matcher?: string[]\n ): string;\n addLocalAssetSourceFromJSONURI(\n contentURI: string,\n matcher?: string[]\n ): Promise<string>;\n removeAssetSource(id: string): void;\n findAllAssetSources(): string[];\n findAssetSourceAssets(\n sourceId: string,\n query: AssetsQuery\n ): Promise<AssetsQueryResult>;\n fetchAssetSourceAsset(\n sourceId: string,\n assetId: string,\n query: { locale: string }\n ): Promise<CompleteAssetResult | null>;\n getAssetSourceGroups(sourceId: string): string[];\n getAssetSourceLicense(sourceId: string): AssetSourceLicense | null;\n getAssetSourceCredits(sourceId: string): AssetSourceCredits | null;\n getAssetSourceSupportedMimeTypes(sourceId: string): string[];\n addAssetToSource(sourceId: string, asset: Asset): void;\n removeAssetFromSource(sourceId: string, assetId: string): void;\n assetSourceContentsChanged(sourceId: string): void;\n\n // Apply-asset middleware primitives (bridged through TS-level chain)\n applyAssetSourceAsset(\n sourceId: string,\n asset: CompleteAssetResult\n ): Promise<DesignBlockId | undefined>;\n applyAssetSourceAssetToBlock(\n sourceId: string,\n asset: CompleteAssetResult,\n block: DesignBlockId\n ): Promise<void>;\n applyAssetSourceProperty(\n sourceId: string,\n asset: CompleteAssetResult,\n property: AssetProperty\n ): Promise<void>;\n defaultApplyAsset(\n asset: CompleteAssetResult\n ): Promise<DesignBlockId | undefined>;\n defaultApplyAssetToBlock(\n asset: CompleteAssetResult,\n block: DesignBlockId\n ): Promise<void>;\n\n // Variables\n setVariable(key: string, value: string): void;\n getVariable(key: string): string;\n findAllVariables(): string[];\n removeVariable(key: string): void;\n getVariableString(key: string): string;\n setVariableString(key: string, value: string): void;\n referencesAnyVariables(block: DesignBlockId): boolean;\n\n // Editor state\n getEditMode(): string;\n setEditMode(mode: string): void;\n\n // Settings\n getSettingBool(key: string): boolean;\n setSettingBool(key: string, value: boolean): void;\n getSettingInt(key: string): number;\n setSettingInt(key: string, value: number): void;\n getSettingFloat(key: string): number;\n setSettingFloat(key: string, value: number): void;\n getSettingString(key: string): string;\n setSettingString(key: string, value: string): void;\n getSettingColor(key: string): NativeColorInternal;\n setSettingColor(key: string, value: NativeColorInternal): void;\n getSettingEnum(key: string): string;\n setSettingEnum(key: string, value: string): void;\n findAllSettings(): string[];\n getSettingType(key: string): string;\n getSettingEnumOptions(key: string): string[];\n\n // Cursor\n getCursorType(): string;\n getCursorRotation(): number;\n\n // Safe area insets\n setSafeAreaInsets(\n left: number,\n top: number,\n right: number,\n bottom: number\n ): void;\n getSafeAreaInsets(): Insets;\n\n // Memory\n getUsedMemory(): number;\n getAvailableMemory(): number;\n\n // Color\n convertColorToColorSpace(\n color: NativeColorInternal,\n colorSpace: number\n ): NativeColorInternal;\n supportsP3(): boolean;\n\n // URI\n getAbsoluteURI(relativeUri: string): Promise<string>;\n defaultURIResolver(relativePath: string): string;\n setURIResolver(resolver: (uri: string) => string): void;\n setURIResolverAsync(\n resolver: (uri: string, callback: (result: string | Error) => void) => void\n ): void;\n getMimeType(uri: string): Promise<string>;\n relocateResource(currentUri: string, newUri: string): void;\n findAllMediaURIs(): string[];\n findAllTransientResources(): Array<{ uri: string; size: number }>;\n\n // Spot colors\n findAllSpotColors(): string[];\n getSpotColorRGB(name: string): RGBAColor;\n getSpotColorCMYK(name: string): CMYKColor;\n setSpotColorRGB(name: string, r: number, g: number, b: number): void;\n setSpotColorCMYK(\n name: string,\n c: number,\n m: number,\n y: number,\n k: number\n ): void;\n removeSpotColor(name: string): void;\n\n // Buffer management\n createBuffer(): string;\n destroyBuffer(uri: string): void;\n setBufferData(uri: string, offset: number, data: Uint8Array): void;\n getBufferData(uri: string, offset: number, length: number): Uint8Array;\n getBufferLength(uri: string): number;\n setBufferLength(uri: string, length: number): void;\n}\n\n/**\n * CreativeEngine - Main entry point for the CE.SDK Creative Engine (node native binding)\n *\n * This provides the same API as @cesdk/node (WASM version) but with native performance.\n */\n// CESDK_VERSION is injected at build time by esbuild --define\ndeclare const CESDK_VERSION: string;\nconst _version: string =\n typeof CESDK_VERSION !== 'undefined' ? CESDK_VERSION : '0.0.0';\n\nexport default class CreativeEngine implements ICreativeEngine {\n static readonly version: string = _version;\n\n asset: AssetAPI;\n\n block: BlockAPI;\n\n editor: EditorAPI;\n\n event: EventAPI;\n\n scene: SceneAPI;\n\n variable: VariableAPI;\n\n readonly version: string = CreativeEngine.version;\n\n #engine: NativeEngine;\n\n #updateInterval: NodeJS.Timeout | NodeJS.Immediate | null = null;\n\n #baseURL: string = '';\n\n private constructor(engine: NativeEngine) {\n this.#engine = engine;\n this.asset = new AssetAPI(engine);\n this.block = new BlockAPI(engine);\n this.editor = new EditorAPI(engine);\n this.event = new EventAPI(engine);\n this.scene = new SceneAPI(engine);\n this.variable = new VariableAPI(engine);\n\n // Start update loop (similar to WASM version)\n this.#startUpdateLoop();\n }\n\n #startUpdateLoop(): void {\n if (this.#updateInterval) return;\n\n const updateLoop = () => {\n let needsUpdate = false;\n if (this.#engine) {\n needsUpdate = this.update();\n }\n // When the engine has pending work (e.g. during video/audio export),\n // pump as fast as possible via setImmediate (~0ms). setTimeout(cb, 0)\n // has a ~1ms minimum in Node.js which bottlenecks audio export.\n // When idle, throttle to ~60fps to avoid spinning the CPU.\n this.#updateInterval = needsUpdate\n ? setImmediate(updateLoop)\n : setTimeout(updateLoop, 16);\n };\n this.#updateInterval = setImmediate(updateLoop);\n }\n\n #stopUpdateLoop(): void {\n if (this.#updateInterval) {\n // Handle may be a Timeout (from setTimeout) or Immediate (from setImmediate).\n // Call both clear functions \u2014 each is a no-op for the wrong handle type.\n clearTimeout(this.#updateInterval as NodeJS.Timeout);\n clearImmediate(this.#updateInterval as NodeJS.Immediate);\n this.#updateInterval = null;\n }\n }\n\n /**\n * Update the engine's internal state\n * @returns Whether the engine needed an update.\n */\n update(): boolean {\n return this.#engine.update();\n }\n\n /**\n * Dispose the engine and clean up all resources\n */\n dispose(): void {\n this.#stopUpdateLoop();\n this.#engine.dispose();\n this.#engine = null!;\n this.asset = null!;\n this.block = null!;\n this.editor = null!;\n this.event = null!;\n this.scene = null!;\n this.variable = null!;\n }\n\n /**\n * Initialize a CreativeEngine.\n *\n * Mirrors `@cesdk/node`'s {@link Configuration} shape exactly. The\n * native-only `device` field selects the render backend\n * (`'auto'` | `'cpu'` | `'gpu'`); web/WASM Node accept the field for shape\n * parity but ignore non-`'auto'` values.\n *\n * @param config - Engine configuration. All fields optional; defaults\n * match `@cesdk/node` + `'auto'` device selection.\n * @returns A ready-to-use engine instance.\n * @public\n */\n static async init(config?: Partial<Configuration>): Promise<CreativeEngine> {\n const { addon: nativeAddon, addonPath: nativeAddonPath } =\n await getNativeAddon();\n const engineDevice = resolveEngineDevice(config);\n const { baseURL, enginePath } = resolveEngineBaseURL(\n config,\n nativeAddonPath\n );\n\n const engine = nativeAddon.createEngine(enginePath, engineDevice);\n\n // Resolve the license the same way @cesdk/node does (strings < 128 chars\n // are API keys POSTed to api.img.ly/activate with `{ apiKey, userId }`;\n // long strings pass through; empty/missing \u2192 evaluation mode). Apply it\n // BEFORE constructing the wrapper: the wrapper's constructor starts the\n // update loop, and we don't want it pumping an unlicensed engine during\n // the (potentially multi-second) activation round-trip. On failure dispose\n // the native engine directly \u2014 no wrapper exists yet \u2014 so callers get a\n // rejected promise rather than a half-constructed engine, matching @cesdk/node.\n let resolvedLicense = '';\n try {\n resolvedLicense = await downloadAndCheckLicense(config ?? {});\n } catch (err) {\n try {\n engine.dispose();\n } catch {\n // best-effort cleanup of the not-yet-wrapped native engine\n }\n throw err;\n }\n // Always unlock, even with an empty string: that drops the engine into\n // Evaluation mode (engine/src/ubq/license/LicenseService.cpp). Without this\n // call the engine stays in the initial `LicenseStatus::Locked` state.\n engine.unlockWithLicense(resolvedLicense);\n\n const creativeEngine = new CreativeEngine(engine);\n // Store baseURL in URL form (matching @cesdk/node).\n creativeEngine.#baseURL = baseURL;\n\n // Wire Configuration fields that go through editor.setSetting / setRole /\n // startTracking. Mirrors WASM configure.ts \u2014 honors featureFlags\n // (fileSystemUsageEnabled is security-relevant!), userId, and the logger.\n configureEngine(creativeEngine, config, { baseURL });\n\n await registerBuiltinTypeface(creativeEngine);\n\n return creativeEngine;\n }\n\n /**\n * Get the base URL for engine assets\n */\n getBaseURL(): string {\n return this.#baseURL;\n }\n\n /**\n * Register a set of default asset sources containing default assets.\n *\n * Mirrors `@cesdk/node`'s instance method\n * (bindings/wasm/js_node/src/CreativeEngine.ts). Loads\n * `${baseURL}/<source-id>/content.json` for each id in the default set\n * and registers the contents as a local asset source. baseURL defaults\n * to the engine's configured baseURL (`file://<addon>/assets/` if none\n * was passed to init).\n *\n * @public\n */\n async addDefaultAssetSources({\n baseURL,\n excludeAssetSourceIds = []\n }: {\n baseURL?: string;\n excludeAssetSourceIds?: DefaultAssetSourceId[];\n } = {}): Promise<void> {\n const resolvedBaseURL = baseURL ?? this.#baseURL;\n if (!resolvedBaseURL) {\n throw new Error(\n 'addDefaultAssetSources: no baseURL configured. Pass { baseURL } ' +\n 'or set baseURL on init.'\n );\n }\n await loadDefaultAssetSources(\n this.asset,\n resolvedBaseURL,\n new Set(excludeAssetSourceIds)\n );\n }\n\n /**\n * Register a set of demo asset sources containing example assets.\n *\n * Mirrors `@cesdk/node`'s `bindings/wasm/js_web/src/addDemoAssetSources.ts`\n * \u2014 accepts `sceneMode`, `withUploadAssetSources`, and the full demo\n * source-ID union (templates + textComponents + uploads + media).\n *\n * @public\n */\n async addDemoAssetSources({\n baseURL,\n excludeAssetSourceIds = [],\n sceneMode = 'Design',\n withUploadAssetSources = false\n }: {\n baseURL?: string;\n excludeAssetSourceIds?: DemoAssetSourceId[];\n sceneMode?: 'Design' | 'Video';\n withUploadAssetSources?: boolean;\n } = {}): Promise<void> {\n const resolvedBaseURL = baseURL ?? this.#baseURL;\n if (!resolvedBaseURL) {\n throw new Error(\n 'addDemoAssetSources: no baseURL configured. Pass { baseURL } ' +\n 'or set baseURL on init.'\n );\n }\n await loadDemoAssetSources(\n this.asset,\n resolvedBaseURL,\n new Set(excludeAssetSourceIds),\n {\n sceneMode,\n withUploadAssetSources,\n // Pass the scene API so template sources have something to call.\n sceneAPI: {\n applyTemplateFromString: (s) => this.scene.applyTemplateFromString(s),\n applyTemplateFromURL: (u) => this.scene.applyTemplateFromURL(u)\n }\n }\n );\n }\n}\n", "/**\n * Shared type definitions for CE.SDK bindings\n * These types are implemented by both Node.js (Native) and Web (WASM) bindings\n */\n\n// =============================================================================\n// Core Identifiers\n// =============================================================================\n\n/** A unique identifier for a design block */\nexport type DesignBlockId = number;\n\n/** A unique identifier for a history state */\nexport type HistoryId = number;\n\n/** A unique identifier for an event subscription (used internally by bindings) */\nexport type SubscriptionId = number;\n\n// =============================================================================\n// Configuration\n// =============================================================================\n\n// `Logger` and `LogLevel` live in `./Logger.ts` so the runtime const\n// (`LogLevel`) and the type alias can ship from a single source. The\n// package barrel (`./index.ts`) re-exports them; we just need the type\n// in scope here for the Configuration.logger field below.\nimport type { Logger } from './Logger';\n// Animation type unions used by AnimationEntry (`./blockTypes.ts`).\nimport type {\n AnimationTypeShorthand,\n AnimationTypeLonghand\n} from './blockTypes';\n\n/**\n * Render-/decode-/encode-device selector.\n *\n * - `'auto'` \u2014 engine picks (default).\n * - `'cpu'` \u2014 software path (Skia raster on native, canvas2d on web).\n * - `'gpu'` \u2014 any available GPU backend (Metal on macOS, EGL on Linux,\n * WebGL2 in browser, no-op in WASM Node). The engine auto-selects the\n * platform backend; there is no per-sub-backend selection.\n */\nexport type Device = 'auto' | 'cpu' | 'gpu';\n\n/**\n * Configuration options for engine initialization. Mirrors `@cesdk/node`'s\n * engine-level `Configuration` (`bindings/wasm/js_web/src/configuration/\n * index.ts`) verbatim, plus a native-only `device` selector.\n *\n * Web/WASM-only fields are kept on the type for cross-binding shape\n * compatibility \u2014 the node native binding ignores them at runtime.\n */\nexport interface Configuration {\n /** Base URL for loading engine assets. */\n baseURL?: string;\n /** License key for the engine. Empty string drops the engine into Evaluation mode. */\n license?: string;\n /** Optional user identifier passed through to engine tracking. */\n userId?: string;\n\n /**\n * WASM core asset locator. Used by `@cesdk/node` to find `cesdk.wasm`\n * / `cesdk.data` next to the loader. Native binding doesn't consume\n * this; kept on the shape for cross-binding portability.\n */\n core?: { baseURL: string };\n\n /** Custom logger. Defaults to `console.log` / `console.warn` / `console.error` per level. */\n logger?: Logger;\n\n /** Feature flag bag. Mirrors `@cesdk/node`'s `featureFlags`. */\n featureFlags?: { [flag: string]: boolean | string };\n\n /** @deprecated Mirrored from `@cesdk/node` for shape parity. Not consumed. */\n presets?: { typefaces?: { [id: string]: unknown } };\n\n /**\n * Render-device selection. Defaults to `'auto'` (Metal/EGL \u2192 CPU fallback\n * on native; WebGL2/canvas2d on web). Native-only knob today; web/WASM\n * accept the value for shape parity but ignore non-`'auto'` strings.\n *\n * @example\n * ```ts\n * await CreativeEngine.init({ license, device: 'gpu' });\n * await CreativeEngine.init({ license, device: 'cpu' });\n * ```\n */\n device?: Device;\n}\n\n/** Options for exporting images */\nexport interface ExportOptions {\n /** The MIME type of the exported file */\n mimeType?: 'image/png' | 'image/jpeg' | 'image/webp' | 'application/pdf';\n /** PNG compression level (0-9) */\n pngCompressionLevel?: number;\n /** JPEG quality (0-1) */\n jpegQuality?: number;\n /** WebP quality (0-1) */\n webpQuality?: number;\n /** Target width for export */\n targetWidth?: number;\n /** Target height for export */\n targetHeight?: number;\n /** Export PDF with high compatibility */\n exportPdfWithHighCompatibility?: boolean;\n /** Export PDF with DeviceCMYK color space (instead of sRGB) for prepress workflows */\n exportPdfWithDeviceCMYK?: boolean;\n /** Export PDF with underlayer */\n exportPdfWithUnderlayer?: boolean;\n /** Spot color name for underlayer */\n underlayerSpotColorName?: string;\n /** Underlayer offset */\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. Values `<= 0` fall back to 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 * Values `<= 0` fall back to 2.0.\n */\n underlayerMaxError?: number;\n /** Allow text to extend beyond block boundaries */\n allowTextOverhang?: boolean;\n}\n\n/** Options for exporting video */\nexport interface VideoExportOptions {\n /** Time offset in seconds relative to the target block */\n timeOffset?: number;\n /** Duration in seconds of the final video */\n duration?: number;\n /** H.264 profile */\n h264Profile?: number;\n /** H.264 level */\n h264Level?: number;\n /** Video bitrate in bits per second */\n videoBitrate?: number;\n /** Audio bitrate in bits per second */\n audioBitrate?: number;\n /** Target framerate */\n framerate?: number;\n /** Whether to use target size instead of block size */\n useTargetSize?: boolean;\n /** Target width */\n targetWidth?: number;\n /** Target height */\n targetHeight?: number;\n /** Allow text to extend beyond block boundaries */\n allowTextOverhang?: boolean;\n /** Enable HEVC/H.265 */\n enableHEVC?: boolean;\n}\n\n/** Options for exporting audio */\nexport interface AudioExportOptions {\n /** Time offset in seconds relative to the target block */\n timeOffset?: number;\n /** Duration in seconds of the final audio */\n duration?: number;\n /** Sample rate in Hz */\n sampleRate?: number;\n /** Number of channels */\n numberOfChannels?: number;\n /** Skip encoding */\n skipEncoding?: boolean;\n /** Progress callback */\n onProgress?: (rendered: number, encoded: number, total: number) => void;\n}\n\n// =============================================================================\n// Color Types\n// =============================================================================\n\n/** RGBA color representation */\nexport interface RGBAColor {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\n/**\n * CMYK color representation. Field shape matches `@cesdk/engine` (WASM):\n * `tint` is required so the same `Color` value works against both bindings.\n */\nexport interface CMYKColor {\n c: number;\n m: number;\n y: number;\n k: number;\n tint: number;\n}\n\n/**\n * Spot color representation. Field shape matches `@cesdk/engine` (WASM) so\n * the same `Color` union is interchangeable across both bindings.\n */\nexport interface SpotColor {\n name: string;\n tint: number;\n externalReference: string;\n}\n\n/** Internal color format from the node native binding */\nexport interface ColorInternal {\n colorSpace: number;\n components: { x: number; y: number; z: number; w: number };\n spotColorName?: string;\n tint: number;\n externalReference?: string;\n}\n\n/** Union of all color types */\nexport type Color = RGBAColor | CMYKColor | SpotColor;\n\n// =============================================================================\n// Geometry Types\n// =============================================================================\n\n/** Source for image/video content */\nexport interface Source {\n uri: string;\n width: number;\n height: number;\n}\n\n/** Rectangle with position and dimensions */\nexport interface XYWH {\n x: number;\n y: number;\n width: number;\n height: number;\n}\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 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/** Range of indices */\nexport interface Range {\n from: number;\n to: number;\n}\n\n/** Insets/padding values */\nexport interface Insets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\n// =============================================================================\n// Typography Types\n// =============================================================================\n\n/** Typeface definition */\nexport interface Typeface {\n name: string;\n fonts: Font[];\n}\n\n/**\n * Allowed font weights. Mirrors the `@cesdk/engine` (WASM) `FontWeight`\n * union so a single `Font` is interchangeable across bindings.\n */\nexport type FontWeight =\n | 'thin'\n | 'extraLight'\n | 'light'\n | 'normal'\n | 'medium'\n | 'semiBold'\n | 'bold'\n | 'extraBold'\n | 'heavy';\n\n/** Allowed font styles. Mirrors the WASM `FontStyle` union. */\nexport type FontStyle = 'normal' | 'italic';\n\n/**\n * Individual font within a typeface. Field optionality matches `@cesdk/engine`\n * (WASM) \u2014 fields not present in the engine response are simply omitted\n * rather than empty strings.\n */\nexport interface Font {\n uri: string;\n subFamily?: string;\n weight?: FontWeight;\n style?: FontStyle;\n}\n\n/** Gradient color stop */\nexport interface GradientColorStop {\n color: Color;\n stop: number;\n}\n\n// =============================================================================\n// Asset Types\n// =============================================================================\n//\n// Field shapes mirror `@cesdk/engine`'s `bindings/wasm/js_web/src/types/asset.ts`\n// so a single asset value is interchangeable between the node wasm and\n// node native bindings. Where the node wasm binding uses package-internal\n// enums (`EffectType`, `BlurType`, `Color`, `Typeface`) we widen to the\n// closest shared equivalent so the type stays cross-binding.\n\n/** Locale tag, e.g. `'en'`, `'de'`. */\nexport type Locale = string;\n\n/**\n * Groups carry semantic meaning used to build and group UIs over assets\n * (sections in a content library, topics, etc.). Tags in comparison are\n * looser, used for extended search/filter.\n */\nexport type Groups = string[];\n\n/**\n * Sort order applied by an asset source when supported.\n * `None` keeps insertion order.\n */\nexport type SortingOrder = 'None' | 'Ascending' | 'Descending';\n\n/**\n * Asset metadata.\n *\n * The known named fields are descriptive \u2014 they hint at how the asset is\n * meant to be created/used (which block type, mime type, dimensions, etc.).\n * The trailing `Record<string, unknown>` extension lets sources attach\n * arbitrary data without losing the named-field type safety.\n *\n * The node native binding stores `meta` as a flat string map at the C++\n * layer; non-string values pass through TypeScript but throw a `TypeError`\n * at the binding boundary. Treat the rich shape as documentation for the\n * named fields while sticking to string values across bindings.\n */\nexport type AssetMetaData = {\n /** The mime type of this asset or the data behind the asset's uri. */\n mimeType?: string;\n /** Block type id to create 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 * WASM types this as `EffectType` (a union of effect kind strings); shared\n * widens to `string` so this type does not depend on WASM-specific enums.\n */\n effectType?: string;\n /** WASM types this as `BlurType`; shared widens to `string`. */\n blurType?: string;\n looping?: boolean;\n} & Record<string, unknown>;\n\n/** Asset color payload, RGB representation. */\nexport interface AssetRGBColor {\n colorSpace: 'sRGB';\n r: number;\n g: number;\n b: number;\n}\n\n/** Asset color payload, CMYK representation. */\nexport interface AssetCMYKColor {\n colorSpace: 'CMYK';\n c: number;\n m: number;\n y: number;\n k: number;\n}\n\n/** Asset color payload, spot-color representation. */\nexport interface AssetSpotColor {\n colorSpace: 'SpotColor';\n name: string;\n externalReference: string;\n representation: AssetRGBColor | AssetCMYKColor;\n}\n\n/** Asset color payload (parallel to engine `Color`; intentionally separate). */\nexport type AssetColor = AssetRGBColor | AssetCMYKColor | AssetSpotColor;\n\n/** Asset transform preset \u2014 fixed aspect ratio. */\nexport interface AssetFixedAspectRatio {\n type: 'FixedAspectRatio';\n width: number;\n height: number;\n}\n\n/** Asset transform preset \u2014 free aspect ratio. */\nexport interface AssetFreeAspectRatio {\n type: 'FreeAspectRatio';\n}\n\n/** Asset transform preset \u2014 snap to the intrinsic content aspect ratio. */\nexport interface AssetContentAspectRatio {\n type: 'ContentAspectRatio';\n}\n\n/** Asset transform preset \u2014 fixed size in design units. */\nexport interface AssetFixedSize {\n type: 'FixedSize';\n width: number;\n height: number;\n designUnit: DesignUnit;\n}\n\n/** Transform preset payload union. */\nexport type AssetTransformPreset =\n | AssetFixedAspectRatio\n | AssetFreeAspectRatio\n | AssetContentAspectRatio\n | AssetFixedSize;\n\n/** Structured asset payload. */\nexport interface AssetPayload {\n color?: AssetColor;\n sourceSet?: Source[];\n typeface?: Typeface;\n transformPreset?: AssetTransformPreset;\n properties?: AssetProperty[];\n}\n\n/** Generic asset information. */\nexport interface Asset {\n id: string;\n groups?: Groups;\n /** Asset-specific and custom meta information. */\n meta?: AssetMetaData;\n /** Structured asset-specific data. */\n payload?: AssetPayload;\n}\n\n/**\n * Query for searching assets. Field shape mirrors `@cesdk/engine`'s\n * `AssetQueryData` so a single query object is interchangeable across\n * bindings. `page` and `perPage` are required by WASM but kept optional\n * here so simpler callers (e.g., native shared tests) can omit them; the\n * binding layers fall back to defaults.\n */\nexport interface AssetsQuery {\n query?: string;\n page?: number;\n perPage?: number;\n groups?: Groups;\n /** Filter by tags. Pass a string for one tag, or an array for any-of. */\n tags?: string | string[];\n locale?: Locale;\n excludeGroups?: Groups;\n sortKey?: string;\n sortingOrder?: SortingOrder | string;\n sortActiveFirst?: boolean;\n /**\n * Structured filter, AND-combined with `query` / `tags` / `groups` /\n * `excludeGroups`. The top-level array is an implicit AND of its\n * entries.\n *\n * Prefer `filter` over the legacy `tags` / `groups` / `excludeGroups`\n * fields for anything beyond a plain case-sensitive include/exclude\n * list (substring matches, `meta.<key>`, `or` / `not` combinators).\n */\n filter?: AssetFilter[];\n}\n\n/** Alias matching the WASM public type name. */\nexport type AssetQueryData = AssetsQuery;\n\n/**\n * Dot-path against the resolved asset that a property predicate targets:\n * `label`, `id`, `tags`, `groups`, or `meta.<key>` (one segment \u2014 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 type AssetPropertyPath =\n | 'label'\n | 'tags'\n | 'id'\n | 'groups'\n | `meta.${string}`;\n\n/**\n * A single property predicate. Exactly one of `contains` (case-insensitive\n * substring) or `equals` (case-insensitive equality) must be set \u2014 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 type AssetPropertyFilter = { property: AssetPropertyPath } & (\n | { contains: string; equals?: never }\n | { equals: string; contains?: never }\n);\n\n/**\n * Filter expression \u2014 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 type AssetFilter =\n | AssetPropertyFilter\n | { and: AssetFilter[]; or?: never; not?: never; property?: never }\n | { or: AssetFilter[]; and?: never; not?: never; property?: never }\n | { not: AssetFilter; and?: never; or?: never; property?: never };\n\n/**\n * Result of an assets query. Generic over the result element type so a\n * binding can refine the surface (WASM returns `CompleteAssetResult`).\n * `nextPage` is optional \u2014 bindings that paginate finitely return\n * undefined when there's no next page.\n */\nexport interface AssetsQueryResult<T extends AssetResult = AssetResult> {\n assets: T[];\n currentPage: number;\n total: number;\n nextPage?: number;\n}\n\n/** Asset source license information */\nexport interface AssetSourceLicense {\n name: string;\n url?: string;\n}\n\n/** Asset source credits information */\nexport interface AssetSourceCredits {\n name: string;\n url?: string;\n}\n\n/** Audio track information */\nexport interface AudioTrackInfo {\n audioCodec: string;\n channels: number;\n sampleRate: number;\n audioDuration: number;\n numAudioPackets: number;\n numAudioFrames: number;\n trackName: string;\n trackIndex: number;\n language: string;\n}\n\n// =============================================================================\n// Enumerations and Constants\n// =============================================================================\n\n/**\n * Supported MIME types. Mirrors `@cesdk/node`'s const-object shape\n * (`bindings/wasm/js_web/src/types/MimeType.ts`) verbatim so\n * `MimeType.Png`, `MimeType.Jpeg`, etc. are interchangeable across\n * bindings.\n *\n * @public\n * @deprecated Use the `MimeType` string literal types instead.\n */\nexport const MimeType = {\n Png: 'image/png',\n Jpeg: 'image/jpeg',\n WebP: 'image/webp',\n Tga: 'image/x-tga',\n Svg: 'image/svg+xml',\n Wav: 'audio/wav',\n Mp4Audio: 'audio/mp4',\n Mp4: 'video/mp4',\n QuickTime: 'video/quicktime',\n Binary: 'application/octet-stream',\n Pdf: 'application/pdf',\n Zip: 'application/zip'\n} as const;\n\n/** @public */\nexport type MimeType = (typeof MimeType)[keyof typeof MimeType];\n\n/** @public */\nexport type ImageMimeType = Extract<\n MimeType,\n 'image/png' | 'image/jpeg' | 'image/webp' | 'image/x-tga' | 'image/svg+xml'\n>;\n\n/** @public */\nexport type AudioMimeType = Extract<MimeType, 'audio/wav' | 'audio/mp4'>;\n\n/** @public */\nexport type VideoMimeType = Extract<MimeType, 'video/mp4' | 'video/quicktime'>;\n\n/** @public */\nexport type ApplicationMimeType = Extract<\n MimeType,\n 'application/octet-stream' | 'application/pdf' | 'application/zip'\n>;\n\n/** Scene modes */\nexport type SceneMode = 'Design' | 'Video';\n\n/** Design units */\nexport type DesignUnit = 'Pixel' | 'Millimeter' | 'Inch';\n\n/** Position modes */\nexport type PositionMode = 'Absolute' | 'Percent' | 'Auto';\n\n/** Size modes */\nexport type SizeMode = 'Absolute' | 'Percent' | 'Auto';\n\n/** Blend modes */\nexport type BlendMode =\n | 'PassThrough'\n | 'Normal'\n | 'Darken'\n | 'Multiply'\n | 'ColorBurn'\n | 'LinearBurn'\n | 'DarkenColor'\n | 'Lighten'\n | 'Screen'\n | 'ColorDodge'\n | 'LinearDodge'\n | 'LightenColor'\n | 'Overlay'\n | 'SoftLight'\n | 'HardLight'\n | 'VividLight'\n | 'LinearLight'\n | 'PinLight'\n | 'HardMix'\n | 'Difference'\n | 'Exclusion'\n | 'Subtract'\n | 'Divide'\n | 'Hue'\n | 'Saturation'\n | 'Color'\n | 'Luminosity';\n\n/** Stroke styles */\nexport type StrokeStyle =\n | 'Solid'\n | 'Dashed'\n | 'DashedRound'\n | 'LongDashed'\n | 'LongDashedRound';\n\n/** Stroke positions */\nexport type StrokePosition = 'Center' | 'Inner' | 'Outer';\n\n/** Stroke corner geometry */\nexport type StrokeCornerGeometry = 'Round' | 'Miter' | 'Bevel';\n\n/** Stroke cap geometry for open paths (line shapes, dashes). */\nexport type StrokeCap = 'Butt' | 'Round' | 'Square';\n\n/** Text horizontal alignment */\nexport type TextHorizontalAlignment = 'Left' | 'Center' | 'Right';\n\n/** Text vertical alignment */\nexport type TextVerticalAlignment = 'Top' | 'Center' | 'Bottom';\n\n/** Property types */\nexport type PropertyType =\n | 'Bool'\n | 'Int'\n | 'Float'\n | 'Double'\n | 'String'\n | 'Enum'\n | 'Color'\n | 'Struct'\n | 'SourceSet';\n\n/** Block event types */\n/**\n * The kind of block-lifecycle event the engine emits. Matches the engine's\n * internal `BlockEventType` enum used in subscription payloads.\n */\nexport type BlockEventType = 'Created' | 'Updated' | 'Destroyed';\n\n/**\n * Subscription payload delivered to `engine.event.subscribe` callbacks.\n * Field shape matches `@cesdk/engine` (WASM) so subscribers can be written\n * once and run against either binding.\n */\nexport interface BlockEvent {\n block: DesignBlockId;\n type: BlockEventType;\n}\n\n/** Scene layout type */\nexport type SceneLayout = string;\n\n// =============================================================================\n// Asset Source Types\n// =============================================================================\n\n/** Asset property types for dynamic asset configuration */\nexport interface AssetStringProperty {\n property: string;\n type: 'String';\n value: string;\n defaultValue: string;\n}\n\nexport 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\nexport interface AssetBooleanProperty {\n property: string;\n type: 'Boolean';\n value: boolean;\n defaultValue: boolean;\n}\n\nexport interface AssetEnumProperty {\n property: string;\n type: 'Enum';\n value: string;\n defaultValue: string;\n options: string[];\n}\n\nexport interface AssetColorProperty {\n property: string;\n type: 'Color';\n value: Color;\n defaultValue: Color;\n}\n\n/** Union of all asset property types */\nexport type AssetProperty =\n | AssetBooleanProperty\n | AssetColorProperty\n | AssetEnumProperty\n | AssetNumberProperty\n | AssetStringProperty;\n\n/**\n * Single asset returned from `findAssets`. Field shape mirrors `@cesdk/engine`\n * (WASM) so a single result is interchangeable across bindings. `label` and\n * `tags` here are flat strings (already resolved to `locale`); compare to\n * `AssetDefinition` where they are localized maps.\n */\nexport interface AssetResult extends Asset {\n /** The locale of the label and tags */\n locale?: Locale;\n /** Resolved label for the active locale. */\n label?: string;\n /** Resolved tags for the active locale. */\n tags?: string[];\n /** If the asset is marked as active */\n active?: boolean;\n /** Credits for the asset */\n credits?: {\n name: string;\n url?: string;\n };\n /** License for this asset */\n license?: {\n name: string;\n url?: string;\n };\n /** UTM parameters */\n utm?: {\n source?: string;\n medium?: string;\n };\n}\n\n/** Complete asset result with context information */\nexport interface CompleteAssetResult extends AssetResult {\n /** Context of how/where the asset was used */\n context: {\n sourceId: string;\n };\n /** Always present in complete results */\n active: boolean;\n}\n\n/**\n * Asset definition supplied to `addAsset`. Distinct from `AssetResult`:\n * `label` and `tags` here are localized maps (`Locale -> value`) so a single\n * definition can serve every supported locale.\n */\nexport interface AssetDefinition extends Asset {\n /** Localized labels (one entry per supported locale). */\n label?: Record<Locale, string>;\n /** Localized tags (one entry per supported locale). */\n tags?: Record<Locale, string[]>;\n}\n\n/**\n * A source of assets that can be registered with the engine.\n * Allows custom asset sources with callbacks for querying and applying assets.\n */\nexport interface AssetSource {\n /** The unique id of this asset source */\n id: string;\n\n /**\n * Find assets matching the query.\n * This is the only required callback.\n */\n findAssets(queryData: AssetsQuery): Promise<AssetsQueryResult | undefined>;\n\n /** Fetch a single asset by id */\n fetchAsset?: (\n id: string,\n params?: { locale?: string }\n ) => Promise<AssetResult | null>;\n\n /** Return available groups */\n getGroups?: () => Promise<string[]>;\n\n /** Credits for this source */\n credits?: {\n name: string;\n url?: string;\n };\n\n /** General license for assets from this source */\n license?: {\n name: string;\n url?: string;\n };\n\n /**\n * @deprecated Will be removed in v1.11\n */\n canManageAssets?: boolean;\n\n /** Apply an asset to the active scene */\n applyAsset?: (\n asset: CompleteAssetResult\n ) => Promise<DesignBlockId | undefined>;\n\n /** Apply an asset to a specific block */\n applyAssetToBlock?: (\n asset: CompleteAssetResult,\n block: DesignBlockId\n ) => Promise<void>;\n\n /** Apply a property of an asset */\n applyAssetProperty?: (\n asset: CompleteAssetResult,\n property: AssetProperty\n ) => Promise<void>;\n\n /** Add an asset to this source */\n addAsset?: (asset: AssetDefinition) => void;\n\n /** Remove an asset from this source */\n removeAsset?: (assetId: string) => void;\n\n /** Get supported MIME types */\n getSupportedMimeTypes?: () => string[] | undefined;\n}\n\n// =============================================================================\n// Color extras (parity with @cesdk/node)\n// =============================================================================\n\n/**\n * Hex color string starting with `#`. `@cesdk/node` exposes this as a\n * branded string alias; we use a plain string alias for runtime parity.\n *\n * @public\n */\nexport type HexColorString = string;\n\n/**\n * RGB color (no alpha). Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/color.ts`.\n *\n * @public\n */\nexport interface RGBColor {\n /** Red component (0..1). */\n r: number;\n /** Green component (0..1). */\n g: number;\n /** Blue component (0..1). */\n b: number;\n}\n\n/**\n * Custom-palette color. Mirrors `@cesdk/node`'s `PaletteColor`.\n *\n * @public\n */\nexport type PaletteColor = HexColorString | RGBColor | RGBAColor | SpotColor;\n\n/**\n * Engine color space discriminator.\n *\n * @public\n */\nexport type ColorSpace = 'sRGB' | 'CMYK' | 'SpotColor';\n\n// =============================================================================\n// Engine geometry & state extras\n// =============================================================================\n\n/** @public */\nexport interface Vec2 {\n x: number;\n y: number;\n}\n\n/** @public */\nexport interface Vec3 {\n x: number;\n y: number;\n z: number;\n}\n\n/** @public */\nexport interface Size2 {\n width: number;\n height: number;\n}\n\n/**\n * Per-export tracking metadata sent to the engine's tracking pipeline.\n *\n * @public\n */\nexport interface TrackingMetadata {\n [key: string]: string | number | boolean;\n}\n\n/** @public */\nexport type ZoomAutoFitAxis = 'Horizontal' | 'Vertical' | 'Both';\n\n/**\n * Editor edit mode. Mirrors `@cesdk/node`'s `EditMode` literal union.\n *\n * @public\n */\nexport type EditMode =\n | 'Transform'\n | 'Crop'\n | 'Text'\n | 'TextLink'\n | 'Playback'\n | 'AdjustmentsCutout'\n | 'AdjustmentsVectorEdit'\n | string;\n\n// =============================================================================\n// Misc public-facing aliases (parity with @cesdk/node)\n// =============================================================================\n\n/**\n * Scene-level design unit. Alias of {@link DesignUnit} for cross-binding\n * naming parity (`@cesdk/node` exposes both names).\n *\n * @public\n */\nexport type SceneDesignUnit = DesignUnit;\n\n/**\n * Font-size unit. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/utils/unitConversion.ts`. `'Point'` is\n * the engine's native unit; the rest are converted to points before\n * reaching the C++ engine via DPI-aware conversion.\n *\n * @public\n */\nexport type FontSizeUnit = SceneDesignUnit | 'Point';\n\n/**\n * Engine role string. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/role.ts`. The engine accepts arbitrary\n * strings; well-known values are `'Adopter'` and `'Creator'`.\n *\n * @public\n */\nexport type RoleString = 'Adopter' | 'Creator' | string;\n\n/**\n * Engine scope string. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/scope.ts`.\n *\n * @public\n */\nexport type Scope = string;\n\n/**\n * Single page's timing window. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/Pageduration.ts`.\n *\n * @public\n */\nexport interface PageDuration {\n pageId: DesignBlockId;\n duration: number;\n start: number;\n end: number;\n}\n\n/**\n * Boolean operation between cutout shapes. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/cutout.ts`.\n *\n * @public\n */\nexport type CutoutOperation = 'Union' | 'Difference' | 'Intersection';\n\n/**\n * Boolean operation for `block.combineShapes` / cutout creation.\n *\n * @public\n */\nexport type BooleanOperation = 'Union' | 'Difference' | 'Intersection' | 'XOR';\n\n/**\n * Text case transform. Mirrors `@cesdk/node`'s `BlockAPI.ts`.\n *\n * @public\n */\nexport type TextCase = 'Normal' | 'Uppercase' | 'Lowercase' | 'Titlecase';\n\n/**\n * Ordered/unordered text list style. Mirrors `@cesdk/node`'s\n * `BlockAPI.ts`.\n *\n * @public\n */\nexport type ListStyle = 'None' | 'Disc' | 'Decimal';\n\n/**\n * Multi-block horizontal alignment passed to `block.alignHorizontally`.\n * Alias of {@link TextHorizontalAlignment} for cross-binding naming\n * parity (`@cesdk/node` re-exports it under this name from `BlockAPI`).\n *\n * @public\n */\nexport type HorizontalBlockAlignment = TextHorizontalAlignment;\n\n/**\n * Multi-block vertical alignment passed to `block.alignVertically`.\n * Alias of {@link TextVerticalAlignment}.\n *\n * @public\n */\nexport type VerticalBlockAlignment = TextVerticalAlignment;\n\n/**\n * Dominant color sample returned from `block.getDominantColors`.\n *\n * @public\n */\nexport interface DominantColor {\n /** sRGB color. */\n color: RGBAColor;\n /** Relative weight in the source image (0..1). */\n weight: number;\n}\n\n/**\n * Options for `block.getDominantColors`.\n *\n * @public\n */\nexport interface DominantColorsOptions {\n /** Number of color samples to compute. Default: 6. */\n numColors?: number;\n /** Sample-grid step in pixels. Higher = faster, lower = more accurate. */\n step?: number;\n}\n\n/**\n * Options for `block.split`. Mirrors `@cesdk/node`'s `SplitOptions`.\n *\n * @public\n */\nexport interface SplitOptions {\n /** Attach the new tail block to the original parent. Default: true. */\n attachToParent?: boolean;\n /** Create a parent track if needed. Default: true. */\n createParentTrackIfNeeded?: boolean;\n /** Select the newly created tail block after split. Default: false. */\n selectNewBlock?: boolean;\n}\n\n/**\n * Options for `block.setTextFontSize` (new overload). Mirrors\n * `@cesdk/node`'s `TextFontSizeOptions`.\n *\n * @public\n */\nexport interface TextFontSizeOptions {\n /** Unit of the supplied size value. Default: `'Point'`. */\n unit?: FontSizeUnit;\n /** Inclusive start grapheme index of the run. Default: -1 (whole block). */\n from?: number;\n /** Exclusive end grapheme index of the run. Default: -1 (whole block). */\n to?: number;\n}\n\n/**\n * Animation entry on `applyAnimation`'s options object.\n *\n * @public\n */\nexport interface AnimationEntry {\n /** Animation type id (shorthand or longhand). */\n type: AnimationTypeShorthand | AnimationTypeLonghand;\n /** Animation duration in seconds. */\n duration?: number;\n /** Animation start delay in seconds. */\n delay?: number;\n /**\n * Easing curve. Loose `string` here so each binding can narrow it to\n * its own `AnimationEasing` union (`@cesdk/node`'s 18-entry list vs\n * the WASM web list).\n */\n easing?: string;\n}\n\n/**\n * Options for `block.applyAnimation`.\n *\n * @public\n */\nexport interface AnimationOptions {\n in?: AnimationEntry;\n loop?: AnimationEntry;\n out?: AnimationEntry;\n}\n\n// `AnimationEasing` is binding-specific (the node native binding ships a\n// richer 18-value union in `bindings/nodejs/ts/src/types.ts`). Each\n// binding re-exports its own version; shared does not own the alias.\n\n/**\n * Options for `block.applyDropShadow`.\n *\n * @public\n */\nexport interface DropShadowOptions {\n color?: Color;\n offset?: { x?: number; y?: number };\n blur?: { x?: number; y?: number };\n}\n\n/**\n * Options for `block.addImage`.\n *\n * @public\n */\nexport interface AddImageOptions {\n sizeMode?: SizeMode;\n positionMode?: PositionMode;\n x?: number;\n y?: number;\n cornerRadius?: number;\n size?: number | { width: number; height: number };\n timeline?: { timeOffset?: number; duration?: number };\n shadow?: DropShadowOptions;\n animation?: AnimationOptions;\n}\n\n/**\n * Options for `block.addVideo`.\n *\n * @public\n */\nexport interface AddVideoOptions extends AddImageOptions {\n trimOffset?: number;\n loop?: boolean;\n muted?: boolean;\n}\n\n/**\n * Options for `block.getAudioInfoFromVideo` /\n * `block.createAudiosFromVideo`.\n *\n * @public\n */\nexport interface AudioFromVideoOptions {\n trackIndex?: number;\n}\n\n/**\n * Options for `block.applyAsset`. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/AssetAPI.ts`.\n *\n * @public\n */\nexport interface ApplyAssetOptions {\n /** Block id to apply the asset to. If omitted, asset becomes a new block. */\n block?: DesignBlockId;\n}\n\n// =============================================================================\n// Editor settings types (Settings* family \u2014 kept loose for binding parity)\n// =============================================================================\n\n/**\n * Discriminator for `editor.{get,set}Setting` family. Mirrors the strings\n * accepted by `@cesdk/node`'s typed setter overloads.\n *\n * @public\n */\nexport type SettingType =\n | 'bool'\n | 'int'\n | 'float'\n | 'string'\n | 'color'\n | 'enum';\n\n/** @public */\nexport type SettingsBool = string;\n/** @public */\nexport type SettingsInt = string;\n/** @public */\nexport type SettingsFloat = string;\n/** @public */\nexport type SettingsString = string;\n/** @public */\nexport type SettingsColor = string;\n/** @public */\nexport type SettingsColorRGBA = string;\n/** @public */\nexport type SettingsEnum = string;\n\n/**\n * Helper that strips an optional `ubq://` prefix from a settings keypath.\n * Mirrors `@cesdk/node`'s `OptionalPrefix<T>`.\n *\n * @public\n */\nexport type OptionalPrefix<T extends string> = T | `ubq://${T}`;\n\n/**\n * Synchronous URI resolver. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/EditorAPI.ts`.\n *\n * @public\n */\nexport type SyncURIResolver = (\n uri: string,\n defaultResolver?: SyncURIResolver\n) => string;\n\n/**\n * Asynchronous URI resolver. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/EditorAPI.ts`.\n *\n * @public\n */\nexport type AsyncURIResolver = (\n uri: string,\n defaultResolver?: AsyncURIResolver\n) => Promise<string> | string;\n\n/**\n * Discriminator emitted by `editor.onHistoryUpdatedWithKind`. Matches engine\n * `ubq::editor::HistoryUpdate` (`engine/src/ubq/editor/History.hpp`).\n *\n * - `Updated`: a snapshot was added or undo/redo applied (scene state mutated).\n * - `Activated`: a different history buffer was activated via\n * `setActiveHistory`. The visible undo stack changed but no new snapshot\n * was created \u2014 save-button logic should ignore this.\n *\n * @public\n */\nexport type HistoryUpdate = 'Updated' | 'Activated';\n\n/**\n * Horizontal alignment of the content fill inside a block. Applies when\n * `ContentFillMode` is `Contain` or `Cover`. Mirrors engine\n * `ubq::types::HorizontalContentFillAlignment`\n * (`engine/src/ubq/types/ContentFillAlignment.hpp`).\n *\n * @public\n */\nexport type HorizontalContentFillAlignment = 'Left' | 'Center' | 'Right';\n\n/**\n * Vertical alignment of the content fill inside a block. Applies when\n * `ContentFillMode` is `Contain` or `Cover`. Mirrors engine\n * `ubq::types::VerticalContentFillAlignment`\n * (`engine/src/ubq/types/ContentFillAlignment.hpp`).\n *\n * @public\n */\nexport type VerticalContentFillAlignment = 'Top' | 'Center' | 'Bottom';\n\n// =============================================================================\n// Configuration extras (typeface migration shape)\n// =============================================================================\n\n/**\n * Typeface migration entry shipped on the deprecated\n * `Configuration.presets.typefaces` field. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/configuration/types.ts`.\n *\n * @public\n */\nexport interface TypefaceDefinition {\n name: string;\n fonts: Array<{\n uri: string;\n subFamily?: string;\n weight?: FontWeight;\n style?: FontStyle;\n }>;\n}\n", "/**\n * Block, shape, fill, effect, blur, and animation type constants and\n * the derived shorthand/longhand/union types. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/blockTypes.ts` exactly so a const\n * array equality check (e.g. `DESIGN_BLOCK_TYPES.includes(t)`) returns\n * the same value across bindings.\n */\n\n/**\n * The shorthand block type IDs for the top-level design blocks. These\n * are the IDs used to create new blocks via `engine.block.create(id)`.\n *\n * @public\n */\nexport const DESIGN_BLOCK_TYPES = [\n 'scene',\n 'stack',\n 'camera',\n 'page',\n 'graphic',\n 'audio',\n 'text',\n 'group',\n 'cutout',\n 'track',\n 'caption',\n 'captionTrack',\n] as const;\n\n/** @public */\nexport type DesignBlockTypeShorthand = (typeof DESIGN_BLOCK_TYPES)[number];\n\n/** @public */\nexport type DesignBlockTypeLonghand =\n `//ly.img.ubq/${DesignBlockTypeShorthand}`;\n\n/** @public */\nexport type DesignBlockType =\n | DesignBlockTypeShorthand\n | DesignBlockTypeLonghand;\n\n/** @public */\nexport const SHAPE_TYPES = [\n 'rect',\n 'line',\n 'ellipse',\n 'polygon',\n 'star',\n 'vector_path',\n] as const;\n\n/** @public */\nexport type ShapeTypeShorthand = (typeof SHAPE_TYPES)[number];\n\n/** @public */\nexport type ShapeTypeLonghand = `//ly.img.ubq/shape/${ShapeTypeShorthand}`;\n\n/** @public */\nexport type ShapeType = ShapeTypeShorthand | ShapeTypeLonghand;\n\n/** @public */\nexport const FILL_TYPES = [\n 'color',\n 'gradient/linear',\n 'gradient/radial',\n 'gradient/conical',\n 'image',\n 'video',\n 'pixelStream',\n] as const;\n\n/** @public */\nexport type FillTypeShorthand = (typeof FILL_TYPES)[number];\n\n/** @public */\nexport type FillTypeLonghand = `//ly.img.ubq/fill/${FillTypeShorthand}`;\n\n/** @public */\nexport type FillType = FillTypeShorthand | FillTypeLonghand;\n\n/** @public */\nexport const EFFECT_TYPES = [\n 'adjustments',\n 'cross_cut',\n 'dot_pattern',\n 'duotone_filter',\n 'extrude_blur',\n 'glow',\n 'green_screen',\n 'half_tone',\n 'linocut',\n 'liquid',\n 'lut_filter',\n 'mirror',\n 'outliner',\n 'pixelize',\n 'posterize',\n 'radial_pixel',\n 'recolor',\n 'sharpie',\n 'shifter',\n 'tilt_shift',\n 'tv_glitch',\n 'vignette',\n] as const;\n\n/** @public */\nexport type EffectTypeShorthand = (typeof EFFECT_TYPES)[number];\n\n/** @public */\nexport type EffectTypeLonghand = `//ly.img.ubq/effect/${EffectTypeShorthand}`;\n\n/** @public */\nexport type EffectType = EffectTypeShorthand | EffectTypeLonghand;\n\n/** @public */\nexport const BLUR_TYPES = ['uniform', 'linear', 'mirrored', 'radial'] as const;\n\n/** @public */\nexport type BlurTypeShorthand = (typeof BLUR_TYPES)[number];\n\n/** @public */\nexport type BlurTypeLonghand = `//ly.img.ubq/blur/${BlurTypeShorthand}`;\n\n/** @public */\nexport type BlurType = BlurTypeShorthand | BlurTypeLonghand;\n\n/** @public */\nexport const ANIMATION_TYPES = [\n 'slide',\n 'pan',\n 'fade',\n 'blur',\n 'grow',\n 'zoom',\n 'pop',\n 'wipe',\n 'baseline',\n 'crop_zoom',\n 'spin',\n 'spin_loop',\n 'fade_loop',\n 'blur_loop',\n 'pulsating_loop',\n 'breathing_loop',\n 'jump_loop',\n 'squeeze_loop',\n 'sway_loop',\n 'scale_loop',\n 'typewriter_text',\n 'block_swipe_text',\n 'spread_text',\n 'merge_text',\n 'ken_burns',\n] as const;\n\n/** @public */\nexport type AnimationTypeShorthand = (typeof ANIMATION_TYPES)[number];\n\n/** @public */\nexport type AnimationTypeLonghand =\n `//ly.img.ubq/animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport type AnimationType = AnimationTypeShorthand | AnimationTypeLonghand;\n\n/** @public */\nexport type ObjectTypeShorthand =\n | DesignBlockTypeShorthand\n | `shape/${ShapeTypeShorthand}`\n | `fill/${FillTypeShorthand}`\n | `effect/${EffectTypeShorthand}`\n | `blur/${BlurTypeShorthand}`\n | `animation/${AnimationTypeShorthand}`;\n\n/** @public */\nexport type ObjectTypeLonghand =\n | DesignBlockTypeLonghand\n | ShapeTypeLonghand\n | FillTypeLonghand\n | EffectTypeLonghand\n | BlurTypeLonghand\n | AnimationTypeLonghand;\n\n/** @public */\nexport type ObjectType = ObjectTypeShorthand | ObjectTypeLonghand;\n", "/**\n * Type-guard functions for the discriminated `Color` union. Mirrors\n * `@cesdk/node`'s implementations in\n * `bindings/wasm/js_web/src/types/color.ts`. Same field-presence\n * checks, same return-type narrowing \u2014 usable interchangeably across\n * bindings.\n */\nimport type { Color, RGBAColor, CMYKColor, SpotColor } from './types';\n\n/**\n * Type guard for {@link RGBAColor}.\n *\n * @public\n */\nexport function isRGBAColor(color: Color): color is RGBAColor {\n return (\n 'r' in color &&\n 'a' in color &&\n (color as RGBAColor).r !== undefined &&\n (color as RGBAColor).a !== undefined\n );\n}\n\n/**\n * Type guard for {@link SpotColor}.\n *\n * @public\n */\nexport function isSpotColor(color: Color): color is SpotColor {\n return 'name' in color && (color as SpotColor).name !== undefined;\n}\n\n/**\n * Type guard for {@link CMYKColor}.\n *\n * @public\n */\nexport function isCMYKColor(color: Color): color is CMYKColor {\n return (\n 'c' in color &&\n 'm' in color &&\n 'y' in color &&\n 'k' in color &&\n (color as CMYKColor).c !== undefined &&\n (color as CMYKColor).m !== undefined &&\n (color as CMYKColor).y !== undefined &&\n (color as CMYKColor).k !== undefined\n );\n}\n", "/**\n * Logger types and runtime export. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/types/Logger.ts` so consumers can import\n * `LogLevel` / `Logger` from either `@cesdk/node` or `@cesdk/node-native`\n * interchangeably.\n *\n * @public\n */\nexport 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 * @public\n * @deprecated Specifying log levels via `LogLevel.Info` has been deprecated.\n * Please use the desired LogLevel string directly.\n */\nexport const LogLevel = {\n Info: 'Info',\n Warning: 'Warning',\n Error: 'Error',\n} as const;\n\n/**\n * Represents a logger callable.\n *\n * @public\n */\nexport type Logger = (message: string, level?: LogLevel) => void;\n", "import type { LogLevel } from './Logger';\n\n/**\n * Default logger used by `@cesdk/node-native` when `Configuration.logger`\n * is not supplied. Routes by level to `console.info` / `console.warn` /\n * `console.error`, mirroring `@cesdk/node`'s defaultLogger\n * (`bindings/wasm/js_web/src/configuration/defaultLogger.ts`).\n *\n * @public\n */\nexport default function defaultLogger(message: string, level?: LogLevel): void {\n const prefixedMessage = `[UBQ] ${message}`;\n /* eslint-disable no-console */\n switch (level) {\n case 'Warning': {\n console.warn(prefixedMessage);\n break;\n }\n case 'Error': {\n console.error(prefixedMessage);\n break;\n }\n case 'Info': {\n console.info(prefixedMessage);\n break;\n }\n default: {\n console.log(prefixedMessage);\n }\n }\n}\n", "/**\n * VariableAPI \u2014 shared implementation consumed by both `@cesdk/node-native`\n * and (eventually) `@cesdk/node`. Each binding instantiates this class with\n * its own `EngineBindingHandle` adapter; no class-body duplication.\n *\n * BlockAPI / SceneAPI / EditorAPI are larger and more entangled (the node\n * wasm versions carry reactor decorators for React reactivity); they will\n * be migrated to this shared shape later once a strategy for the\n * decorators is agreed.\n */\nimport type { IVariableAPI } from '../engine';\nimport type { EngineBindingHandle } from './EngineBindingHandle';\n\nexport class VariableAPI implements IVariableAPI {\n readonly #engine: EngineBindingHandle;\n\n constructor(engine: EngineBindingHandle) {\n this.#engine = engine;\n }\n\n /**\n * Get all text variable names currently stored in the engine.\n * @returns List of variable names.\n */\n findAll(): string[] {\n return this.#engine.findAllVariables();\n }\n\n /**\n * Set a text variable's value. Creates the variable if it doesn't exist.\n * @param key - The variable's key.\n * @param value - The text value to assign.\n */\n setString(key: string, value: string): void {\n this.#engine.setVariableString(key, value);\n }\n\n /**\n * Get a text variable's value.\n * @param key - The variable's key.\n * @returns The text value of the variable.\n */\n getString(key: string): string {\n return this.#engine.getVariableString(key);\n }\n\n /**\n * Remove a text variable from the engine.\n * @param key - The variable's key to remove.\n */\n remove(key: string): void {\n this.#engine.removeVariable(key);\n }\n}\n", "/**\n * Single source of truth mapping `<platform>-<arch>` to the optional dependency\n * package name that ships the native addon for that platform.\n *\n * Used by the runtime loader in `CreativeEngine.ts`. Must stay in lockstep\n * with the `optionalDependencies` list in\n * `bindings/nodejs/release_templates/main.package.json.tmpl` \u2014 adding a new\n * platform requires editing both files together.\n */\nexport const PLATFORM_PACKAGES: Readonly<Record<string, string>> = Object.freeze({\n 'darwin-arm64': '@cesdk/node-native-darwin-arm64',\n 'darwin-x64': '@cesdk/node-native-darwin-x64',\n 'linux-x64': '@cesdk/node-native-linux-x64',\n});\n\nexport function platformPackageFor(platform: NodeJS.Platform, arch: string): string | undefined {\n return PLATFORM_PACKAGES[`${platform}-${arch}`];\n}\n\n/**\n * The `<platform>-<arch>` slug for the current host (e.g. `\"darwin-arm64\"`),\n * or `null` when we don't ship a native sibling for this platform/arch. The\n * slug is both the key into {@link PLATFORM_PACKAGES} and the published\n * platform package's name suffix (`@cesdk/node-native-<slug>`).\n */\nexport function hostPlatformSlug(): string | null {\n const slug = `${process.platform}-${process.arch}`;\n return Object.prototype.hasOwnProperty.call(PLATFORM_PACKAGES, slug) ? slug : null;\n}\n", "/**\n * Built-in typeface registered automatically on engine init so that\n * `engine.block.create('text')` produces readable glyphs without any\n * consumer-side asset wiring. The typeface payload references the\n * Inter Semibold font shipped in the platform package at\n * `<addon>/assets/ly.img.cesdk/fonts/imgly_font_inter_semibold.otf`.\n *\n * The engine's `Text.cpp` (`forEachLocalSource \u2192 auto-assign\n * typeface`) iterates registered local asset sources for a typeface\n * payload and assigns the first match to text blocks whose typeface\n * field is empty (which is always the case for `block.create('text')`).\n *\n * Source id is `ly.img.typeface.builtin` (NOT `ly.img.typeface`) so it\n * does not collide with the full v6 typeface library a user may load\n * via `engine.addDefaultAssetSources()`.\n */\nexport const BUILTIN_TYPEFACE_SOURCE_ID = 'ly.img.typeface.builtin';\n\nexport const BUILTIN_TYPEFACE_JSON = JSON.stringify({\n version: '6.0.0',\n id: BUILTIN_TYPEFACE_SOURCE_ID,\n assets: [\n {\n id: 'ly.img.typeface.builtin.inter',\n label: { en: 'Inter' },\n payload: {\n typeface: {\n name: 'Inter',\n fonts: [\n {\n uri: 'bundle://ly.img.cesdk/fonts/imgly_font_inter_semibold.otf',\n subFamily: 'Semi Bold',\n weight: 'semiBold',\n style: 'normal',\n },\n ],\n },\n },\n },\n ],\n});\n", "import * as fs from 'node:fs/promises';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Minimal structural type for the AssetAPI methods used by this loader.\n * We don't import the AssetAPI class to avoid a circular import; only the\n * one async method we call is needed here.\n */\ntype AssetAPILike = {\n addLocalAssetSourceFromJSONString(\n json: string,\n basePath?: string,\n ): Promise<string>;\n};\n\n/**\n * v4-era default asset source IDs. Public surface mirrors @cesdk/node:\n * bindings/wasm/js_node/src/CreativeEngine.ts uses the same union from\n * bindings/wasm/js_web/src/addDefaultAssetSources.ts.\n *\n * `ly.img.captionPresets` is handled specially (loaded via a dedicated\n * sub-loader, not content.json) to match WASM behavior.\n *\n * @public\n */\nexport type DefaultAssetSourceId =\n | 'ly.img.sticker'\n | 'ly.img.vectorpath'\n | 'ly.img.colors.defaultPalette'\n | 'ly.img.filter.lut'\n | 'ly.img.filter.duotone'\n | 'ly.img.effect'\n | 'ly.img.blur'\n | 'ly.img.typeface'\n | 'ly.img.page.presets'\n | 'ly.img.page.presets.video'\n | 'ly.img.crop.presets'\n | 'ly.img.text'\n | 'ly.img.captionPresets';\n\n/**\n * Demo (v3) asset source IDs. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/addDemoAssetSources.ts`.\n *\n * `ly.img.template`, `ly.img.video.template`, and `ly.img.textComponents`\n * are accepted on the type even though they need extra wiring (template\n * sources require a custom `applyAsset` callback that calls\n * `scene.applyTemplateFromString` / `applyTemplateFromURL`). Native\n * supplies that wiring via the same callback path.\n *\n * @deprecated Mirrors `@cesdk/node`'s deprecated demo asset shape;\n * migrate to v4 sources via `addLocalAssetSourceFromJSONURI` directly.\n * @public\n */\nexport type DemoAssetSourceId =\n | 'ly.img.template'\n | 'ly.img.video.template'\n | 'ly.img.textComponents'\n | 'ly.img.image'\n | 'ly.img.video'\n | 'ly.img.audio'\n | 'ly.img.image.upload'\n | 'ly.img.video.upload'\n | 'ly.img.audio.upload';\n\n// IDs loaded via content.json. `ly.img.captionPresets` is intentionally\n// not here \u2014 it goes through a dedicated loader path (the WASM impl\n// pulls it from a different endpoint shape).\nconst DEFAULT_SOURCE_IDS: Array<Exclude<DefaultAssetSourceId, 'ly.img.captionPresets'>> = [\n 'ly.img.sticker',\n 'ly.img.vectorpath',\n 'ly.img.colors.defaultPalette',\n 'ly.img.filter.lut',\n 'ly.img.filter.duotone',\n 'ly.img.effect',\n 'ly.img.blur',\n 'ly.img.typeface',\n 'ly.img.page.presets',\n 'ly.img.page.presets.video',\n 'ly.img.crop.presets',\n 'ly.img.text',\n];\n\n// IDs loaded via content.json (no callbacks needed).\nconst DEMO_CONTENT_JSON_IDS: DemoAssetSourceId[] = [\n 'ly.img.image',\n 'ly.img.video',\n 'ly.img.audio',\n];\n\nasync function readContentJSON(url: string): Promise<string> {\n if (url.startsWith('file://')) {\n return fs.readFile(fileURLToPath(url), 'utf8');\n }\n if (url.startsWith('http://') || url.startsWith('https://')) {\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);\n }\n return res.text();\n }\n // Plain filesystem path \u2014 treat as local\n return fs.readFile(url, 'utf8');\n}\n\nasync function loadOne(\n asset: AssetAPILike,\n sourceId: string,\n baseURL: string,\n): Promise<void> {\n const normalizedBase = baseURL.replace(/\\/+$/, '');\n const contentURL = `${normalizedBase}/${sourceId}/content.json`;\n try {\n const json = await readContentJSON(contentURL);\n // addLocalAssetSourceFromJSONString supports {{base_url}} substitution\n // when basePath is provided.\n await asset.addLocalAssetSourceFromJSONString(json, normalizedBase);\n } catch (err) {\n // Per-source failures are non-fatal (mirrors `@cesdk/node`'s CDN\n // fallback behavior: a missing `content.json` for one source skips\n // that source and lets the others load). Surface a console warning\n // so the discrepancy is visible during development.\n const msg = err instanceof Error ? err.message : String(err);\n // eslint-disable-next-line no-console\n console.warn(\n `[@cesdk/node-native] Failed to load asset source '${sourceId}' from ` +\n `${contentURL}: ${msg}. Skipping.`,\n );\n }\n}\n\n/**\n * Surface needed for upload-source / template-source registration.\n * Kept minimal to avoid a circular import to CreativeEngine.\n */\ntype SourceManagerLike = AssetAPILike & {\n /**\n * Native binding's `findAllSources` \u2014 used to skip already-registered\n * IDs (parity with WASM's `existingAssetSourceIds` check).\n */\n findAllSources(): string[];\n /**\n * Register a callback-backed local source (for upload + template\n * sources). Matches the extended `addLocalSource` shape on the\n * native AssetAPI (which accepts an optional `applyAsset` callback\n * for `ly.img.template` / `ly.img.video.template` registration).\n */\n addLocalSource(\n id: string,\n supportedMimeTypes?: string[],\n applyAsset?: (asset: unknown) => Promise<unknown>,\n ): void;\n};\n\n/**\n * Optional scene API for template sources (which need to dispatch to\n * `applyTemplateFromString` / `applyTemplateFromURL`).\n */\nexport type SceneAPIForTemplates = {\n applyTemplateFromString(content: string): Promise<void>;\n applyTemplateFromURL(url: string): Promise<void>;\n};\n\nexport async function loadDefaultAssetSources(\n asset: AssetAPILike,\n baseURL: string,\n exclude: ReadonlySet<DefaultAssetSourceId>,\n): Promise<void> {\n // content.json-backed sources.\n const tasks: Promise<void>[] = DEFAULT_SOURCE_IDS.filter((id) => !exclude.has(id)).map(\n (id) => loadOne(asset, id, baseURL),\n );\n\n // captionPresets has a dedicated content.json at the same baseURL\n // (mirroring WASM's CaptionPresetAssetSource \u2014 which fetches a\n // single content.json and exposes it as the `ly.img.captionPresets`\n // local source). The shape on disk is identical to other v6 sources,\n // so the same `loadOne` codepath works.\n if (!exclude.has('ly.img.captionPresets')) {\n tasks.push(loadOne(asset, 'ly.img.captionPresets', baseURL));\n }\n\n await Promise.all(tasks);\n}\n\n/**\n * Default upload-asset MIME types per scene mode. Mirrors `@cesdk/node`'s\n * `addDemoAssetSources.ts` MIME lists exactly.\n */\nconst UPLOAD_MIMES = {\n image: {\n Design: ['image/jpeg', 'image/png', 'image/webp', 'image/svg+xml', 'image/bmp', 'image/gif', 'image/apng'],\n Video: ['image/jpeg', 'image/png', 'image/webp', 'image/svg+xml', 'image/bmp'],\n } as const,\n video: ['application/json', 'video/mp4', 'video/quicktime', 'video/webm', 'video/matroska', 'image/gif', 'image/apng'] as const,\n audio: ['audio/mpeg', 'audio/mp3', 'audio/x-m4a', 'audio/wav'] as const,\n} as const;\n\nexport interface LoadDemoAssetSourcesOptions {\n /**\n * Whether to register `ly.img.image.upload` / `ly.img.video.upload` /\n * `ly.img.audio.upload` as MIME-restricted local sources (not loaded\n * from content.json). Mirrors WASM's `withUploadAssetSources` flag.\n */\n withUploadAssetSources?: boolean;\n /**\n * Scene mode. Controls whether video/audio sources are registered (only\n * applies in `'Video'` mode). Mirrors WASM's `sceneMode` parameter.\n */\n sceneMode?: 'Design' | 'Video';\n /**\n * Optional scene-API handle. Required when registering template sources\n * (`ly.img.template`, `ly.img.video.template`) since their applyAsset\n * callbacks need to call `applyTemplateFromString` / `applyTemplateFromURL`.\n */\n sceneAPI?: SceneAPIForTemplates;\n}\n\nexport async function loadDemoAssetSources(\n asset: AssetAPILike,\n baseURL: string,\n exclude: ReadonlySet<DemoAssetSourceId>,\n options: LoadDemoAssetSourcesOptions = {},\n): Promise<void> {\n const {\n withUploadAssetSources = false,\n sceneMode = 'Design',\n sceneAPI,\n } = options;\n\n const manager = asset as SourceManagerLike;\n const existing = new Set(manager.findAllSources?.() ?? []);\n\n // Upload sources. WASM emits them as MIME-restricted local sources\n // (not loaded from content.json), gated by `withUploadAssetSources`.\n if (withUploadAssetSources) {\n if (!exclude.has('ly.img.image.upload') && !existing.has('ly.img.image.upload')) {\n manager.addLocalSource('ly.img.image.upload', [...UPLOAD_MIMES.image[sceneMode]]);\n }\n if (sceneMode === 'Video' && !exclude.has('ly.img.video.upload') && !existing.has('ly.img.video.upload')) {\n manager.addLocalSource('ly.img.video.upload', [...UPLOAD_MIMES.video]);\n }\n if (sceneMode === 'Video' && !exclude.has('ly.img.audio.upload') && !existing.has('ly.img.audio.upload')) {\n manager.addLocalSource('ly.img.audio.upload', [...UPLOAD_MIMES.audio]);\n }\n }\n\n // content.json-backed sources (image, video, audio). Filter by exclude\n // set + scene mode (video/audio only in Video scenes \u2014 matches WASM).\n const contentJsonIds: DemoAssetSourceId[] = DEMO_CONTENT_JSON_IDS.filter((id) => {\n if (exclude.has(id)) return false;\n if (sceneMode === 'Design' && (id === 'ly.img.video' || id === 'ly.img.audio')) {\n // WASM lets these through even in Design mode (it filters at the\n // panel level, not the asset-source level). Match exactly.\n }\n return true;\n });\n\n // Template sources. Need a sceneAPI handle to register the apply\n // callback. If not supplied, we register the source without callbacks\n // and emit a warning so the consumer notices.\n const registerTemplateSource = (\n id: 'ly.img.template' | 'ly.img.video.template',\n ): void => {\n if (exclude.has(id) || existing.has(id)) return;\n if (!sceneAPI) {\n // eslint-disable-next-line no-console\n console.warn(\n `[@cesdk/node-native] Cannot register ${id} without a sceneAPI handle. ` +\n 'Templates will be visible but applying them will be a no-op. Pass ' +\n '`{ sceneAPI: engine.scene }` to engine.addDemoAssetSources().',\n );\n manager.addLocalSource(id);\n return;\n }\n manager.addLocalSource(id, undefined, async (assetForApply) => {\n const meta = (assetForApply as { meta?: { uri?: string } }).meta;\n const sceneUri = meta?.uri;\n if (!sceneUri) return undefined;\n if (sceneUri.startsWith('UBQ1')) {\n await sceneAPI.applyTemplateFromString(sceneUri);\n } else {\n await sceneAPI.applyTemplateFromURL(sceneUri);\n }\n return undefined;\n });\n };\n\n registerTemplateSource('ly.img.template');\n if (sceneMode === 'Video') {\n registerTemplateSource('ly.img.video.template');\n }\n\n // textComponents \u2014 pure content.json source, no callbacks.\n if (!exclude.has('ly.img.textComponents') && !existing.has('ly.img.textComponents')) {\n contentJsonIds.push('ly.img.textComponents');\n }\n\n await Promise.all(contentJsonIds.map((id) => loadOne(asset, id, baseURL)));\n}\n", "/**\n * Engine-level configuration wiring. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/configure.ts` \u2014 applies the\n * Configuration fields that go through `editor.setSetting` / `setRole` /\n * `startTracking` rather than `createEngine`'s positional args.\n *\n * Called from `CreativeEngine.init()` after the native engine is\n * constructed and after `unlockWithLicense`.\n */\nimport type { Configuration } from '@cesdk/shared';\n\n// Minimal structural type for the bits of CreativeEngine we touch here.\n// We don't import the class directly to avoid a circular import (this\n// file is consumed by CreativeEngine.ts).\ntype EngineLike = {\n editor: {\n setRole(role: string): void;\n setSettingBool(key: string, value: boolean): void;\n setSettingString(key: string, value: string): void;\n // Three-arg signature mirrors the C++ binding. The third arg\n // (`deviceId`) is optional in the TS wrapper but required on the\n // native side; we always pass `''` to match WASM behavior.\n startTracking(license: string, userId: string, deviceId?: string): void;\n };\n};\n\n/**\n * Known feature-flag keys recognised by `@cesdk/node`. Other entries in\n * `config.featureFlags` are silently ignored (matches WASM behavior).\n */\nconst KNOWN_FEATURE_FLAGS = new Set<string>([\n 'preventScrolling',\n 'singlePageMode',\n 'fileSystemUsageEnabled',\n]);\n\n/**\n * Migration warnings emitted for legacy `Configuration` keys that\n * `@cesdk/node` warns about (`migrate_removed_keys_warning.ts`). We\n * only catch the common ones; anything else is silently passed through\n * to the type system.\n */\nconst REMOVED_KEYS: ReadonlyArray<{ key: string; replacement?: string }> = [\n { key: 'scene' },\n { key: 'page' },\n { key: 'initialSceneURL' },\n { key: 'initialSceneString' },\n { key: 'initialSceneFile' },\n { key: 'initialSceneBlob' },\n { key: 'initialImageURL' },\n];\n\nexport interface ConfigureOptions {\n /** Effective baseURL after auto-resolution (already normalised). */\n baseURL: string;\n}\n\nexport function configureEngine(\n engine: EngineLike,\n config: Partial<Configuration> | undefined,\n _options: ConfigureOptions,\n): void {\n // Wrap the user-supplied logger so init() never throws because a\n // logger callback misbehaved. We default to the built-in defaultLog\n // when no logger is supplied.\n const rawLogger = config?.logger ?? defaultLog;\n const logger: NonNullable<Configuration['logger']> = (\n message,\n level,\n ) => {\n try {\n rawLogger(message, level);\n } catch {\n // Swallow logger exceptions \u2014 init() must not fail because a\n // user-supplied logger threw. Mirrors @cesdk/node behavior.\n }\n };\n\n // Role: default to 'Creator' (matches @cesdk/node configure.ts).\n // `role` is not currently exposed on `@cesdk/node-native`'s public\n // Configuration shape, but the engine call site still benefits from\n // running `setRole` with a sane default so the engine doesn't sit in\n // a permission-restricted state on first use. We read role via a\n // defensive property access so the field can be re-introduced to the\n // Configuration interface in the future without churn here.\n const role =\n (config as { role?: string } | undefined)?.role ?? 'Creator';\n try {\n engine.editor.setRole(role);\n } catch (err) {\n logger(`setRole failed: ${describeError(err)}`, 'Warning');\n }\n\n // basePath is intentionally NOT updated here on native. The C++ binding\n // already wired the basePath as a filesystem path via the\n // `createEngine(basePath, device)` call in `CreativeEngine.init`, and\n // bundle:// resolution depends on that exact form (no protocol prefix,\n // no trailing slash). WASM mirrors baseURL via\n // `editor.setSetting('basePath', config.baseURL)` because its engine\n // accepts the https:// / file:// URL form. Forcing the URL form on\n // native breaks bundle:// resolution (engine concatenates `{basePath}/\n // fonts/...` and you get `file:///path//fonts/...`).\n\n // Feature flags. Mirrors WASM configure.ts.\n if (config?.featureFlags) {\n const flags = config.featureFlags;\n // Unknown-key warnings (parity with @cesdk/node's migrate warnings).\n for (const flag of Object.keys(flags)) {\n if (!KNOWN_FEATURE_FLAGS.has(flag)) {\n logger(\n `Unknown featureFlag '${flag}' will be ignored. Known flags: ${[\n ...KNOWN_FEATURE_FLAGS,\n ].join(', ')}.`,\n 'Warning',\n );\n }\n }\n\n if (flags.preventScrolling) {\n // WASM touches `touch/*` settings; native engine ignores those but\n // we apply them for shape parity. Wrapped in try/catch because the\n // setting may not exist on the native engine.\n tryWarnOnFail(\n () => engine.editor.setSettingBool('touch/singlePointPanning', false),\n logger,\n );\n tryWarnOnFail(\n () => engine.editor.setSettingBool('touch/dragStartCanSelect', false),\n logger,\n );\n }\n\n const singlePageMode = !!flags.singlePageMode;\n tryWarnOnFail(\n () =>\n engine.editor.setSettingBool(\n 'features/singlePageModeEnabled',\n singlePageMode,\n ),\n logger,\n );\n\n // fileSystemUsageEnabled defaults to TRUE unless explicitly false\n // (matches WASM configure.ts). This is security-relevant: a\n // user passing `featureFlags: { fileSystemUsageEnabled: false }` to\n // lock down filesystem access must be honored.\n const fileSystemUsageEnabled = flags.fileSystemUsageEnabled !== false;\n tryWarnOnFail(\n () =>\n engine.editor.setSettingBool(\n 'features/fileSystemUsageEnabled',\n fileSystemUsageEnabled,\n ),\n logger,\n );\n }\n\n // Tracking. WASM does this unconditionally with `(license ?? '', userId ?? '', '')`;\n // we mirror that exactly. The third argument (`deviceId`) is what the\n // C++ binding requires \u2014 see `bindings/wasm/js_web/src/EditorAPI.ts`\n // for the WASM behavior we mirror.\n try {\n engine.editor.startTracking(\n config?.license ?? '',\n config?.userId ?? '',\n '',\n );\n } catch (err) {\n // Some C++ builds reject empty arguments. Swallow and warn \u2014 the\n // engine still runs; only analytics are missing.\n logger(`startTracking failed: ${describeError(err)}`, 'Warning');\n }\n\n // Removed-key migration warnings. We don't try to migrate values \u2014\n // just warn the user so they catch the regression early.\n if (config) {\n const seen = config as Record<string, unknown>;\n for (const entry of REMOVED_KEYS) {\n if (entry.key in seen) {\n logger(\n `Configuration.${entry.key} is no longer supported and will be ignored.`,\n 'Warning',\n );\n }\n }\n }\n\n // Deprecated `presets.typefaces` warning. WASM runs a migration; we\n // just warn so the consumer notices.\n if (config?.presets?.typefaces && Object.keys(config.presets.typefaces).length > 0) {\n logger(\n 'Configuration.presets.typefaces is deprecated. Register typefaces via ' +\n 'engine.asset.addLocalSource / addLocalAssetSourceFromJSONString instead.',\n 'Warning',\n );\n }\n}\n\nfunction tryWarnOnFail(fn: () => void, _logger: NonNullable<Configuration['logger']>): void {\n try {\n fn();\n } catch {\n // Setting key may not exist on the native engine. Silent \u2014 this is\n // best-effort parity wiring, not a hard requirement.\n }\n}\n\nfunction describeError(err: unknown): string {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\nfunction defaultLog(message: string, level?: 'Info' | 'Warning' | 'Error'): void {\n const prefixed = `[UBQ] ${message}`;\n /* eslint-disable no-console */\n switch (level) {\n case 'Warning':\n console.warn(prefixed);\n break;\n case 'Error':\n console.error(prefixed);\n break;\n case 'Info':\n console.info(prefixed);\n break;\n default:\n console.log(prefixed);\n }\n}\n", "/**\n * License resolution. Mirrors `@cesdk/node`'s\n * `bindings/wasm/js_web/src/license.ts` \u2014 strings shorter than 128\n * characters are treated as API keys and resolved against the activation\n * endpoint before being handed to `unlockWithLicense`.\n *\n * Without this step, `@cesdk/node-native` users who pass an API key (the\n * documented onboarding path for new customers) get a confusing \"license\n * invalid\" engine error.\n */\nimport type { Configuration } from '@cesdk/shared';\n\nconst LICENSE_ENDPOINT_PRODUCTION = 'https://api.img.ly/activate';\nconst LICENSE_ENDPOINT_STAGING = 'https://api.staging.img.ly/activate';\n\ntype LicenseResponse =\n | { status: 'valid'; license: string }\n | { status: 'invalid' | 'expired' };\n\n/**\n * Optional `fetch` implementation injection for tests. Falls back to the\n * global `fetch` (available on Node 18+).\n */\nexport type FetchLike = (\n url: string,\n init?: {\n method: string;\n headers: Record<string, string>;\n body: string;\n signal?: AbortSignal;\n },\n) => Promise<{\n ok: boolean;\n json(): Promise<unknown>;\n}>;\n\n// Node's `fetch` has no default timeout. A hung activation endpoint would\n// stall CreativeEngine.init() forever; bound it so init throws within a\n// few seconds instead.\nconst LICENSE_ACTIVATION_TIMEOUT_MS = 10_000;\n\nfunction pickEndpoint(): string {\n if (process.env.CESDK_LICENSE_ENDPOINT) return process.env.CESDK_LICENSE_ENDPOINT;\n if (process.env.NODE_ENV === 'development' || process.env.CESDK_STAGING === '1') {\n return LICENSE_ENDPOINT_STAGING;\n }\n return LICENSE_ENDPOINT_PRODUCTION;\n}\n\n/**\n * Returns the engine-ready license string. Long strings (>= 128 chars)\n * pass through unchanged. Short strings are POSTed to the activation\n * endpoint with `{ apiKey, userId }` and the returned license is used.\n *\n * @public\n */\nexport async function downloadAndCheckLicense(\n config: Partial<Configuration>,\n fetchImpl: FetchLike | undefined = (globalThis as { fetch?: FetchLike }).fetch,\n): Promise<string> {\n if (\n !config.license ||\n config.license.length === 0 ||\n config.license === 'evaluation-license'\n ) {\n return '';\n }\n\n if (config.license.length >= 128) {\n return config.license;\n }\n\n // API-key path.\n if (!fetchImpl) {\n throw new Error(\n 'No global `fetch` available. Pass a `fetch` polyfill or use Node 18+.',\n );\n }\n const endpoint = pickEndpoint();\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n LICENSE_ACTIVATION_TIMEOUT_MS,\n );\n let response: Awaited<ReturnType<FetchLike>>;\n try {\n response = await fetchImpl(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n apiKey: config.license,\n userId: config.userId,\n }),\n signal: controller.signal,\n });\n } catch (e) {\n if (controller.signal.aborted) {\n throw new Error(\n `License activation timed out after ${LICENSE_ACTIVATION_TIMEOUT_MS}ms ` +\n `(${endpoint}). Check network connectivity or set CESDK_LICENSE_ENDPOINT.`,\n );\n }\n throw e;\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n throw new Error(\n 'Unfortunately we are experiencing a server down time and your License key cannot be validated. ' +\n \"We're already working on a fix and will restore service soon. Should services not restore within \" +\n 'the hour, kindly get in touch with our support team.',\n );\n }\n\n const data = (await response.json()) as LicenseResponse;\n if (data.status === 'valid') return data.license;\n if (data.status === 'expired') {\n throw new Error(\n 'Thanks for using IMG.LY for creative editing. Please note that your license file or commercial use is expired. ' +\n 'Please get in touch with our sales team to discuss extension of your commercial license.',\n );\n }\n throw new Error(\n 'The License Key (API Key) you are using to access the IMG.LY SDK is invalid. ' +\n 'Please ensure that you are using the license key tied to your subscription and get in touch with our support team.',\n );\n}\n", "/**\n * Type definitions for native Node.js bindings\n * Re-exported from @cesdk/shared for consistency with WASM version\n */\n\nimport type { Color } from '@cesdk/shared';\n\n// Re-export all shared types\nexport {\n // Core IDs\n type DesignBlockId,\n type HistoryId,\n type SubscriptionId,\n\n // Configuration\n type Configuration,\n type ExportOptions,\n type VideoExportOptions,\n type AudioExportOptions,\n\n // Color types\n type RGBAColor,\n type CMYKColor,\n type SpotColor,\n type Color,\n type ColorInternal,\n\n // Geometry types\n type Source,\n type XYWH,\n type Range,\n type Insets,\n\n // Typography types\n type Typeface,\n type Font,\n type GradientColorStop,\n\n // Asset types\n type Asset,\n type AssetFilter,\n type AssetPropertyFilter,\n type AssetsQuery,\n type AssetsQueryResult,\n type AssetSourceLicense,\n type AssetSourceCredits,\n type AudioTrackInfo,\n\n // Enums and constants\n MimeType,\n type SceneMode,\n type DesignUnit,\n type PositionMode,\n type SizeMode,\n type BlendMode,\n type StrokeStyle,\n type StrokePosition,\n type StrokeCornerGeometry,\n type TextHorizontalAlignment,\n type TextVerticalAlignment,\n type PropertyType,\n type BlockEvent,\n type SceneLayout\n} from '@cesdk/shared';\n\n/**\n * Options for creating a scene with a default page in one call.\n * @public\n */\nexport type CreateSceneOptions = {\n /** Page-level options applied to a freshly-created page. */\n page?: {\n /** Page dimensions. A number is treated as a square (w = h). */\n size: number | { width: number; height: number };\n /** Optional solid fill color applied to the page. */\n color?: Color;\n };\n /** Design unit. Also pairs the font-size unit (Pixel\u2192Pixel, else\u2192Point). */\n designUnit?: string;\n /** Font-size unit. Overrides the pairing from `designUnit`. */\n fontSizeUnit?: string;\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 interface FontMetrics {\n ascender: number;\n descender: number;\n unitsPerEm: number;\n lineGap: number;\n capHeight: number;\n xHeight: number;\n underlineOffset: number;\n underlineSize: number;\n strikeoutOffset: number;\n strikeoutSize: number;\n}\n\n/**\n * Compression format for `engine.scene.saveToString` / `loadFromString`.\n * `None` is the default (legacy base64 string output); `Zstd` returns raw\n * compressed bytes.\n * @public\n */\nexport enum CompressionFormat {\n None = 0,\n Zstd = 1\n}\n\n/**\n * Compression level preset for Zstd. `Default` is balanced; `Fastest`\n * trades ratio for speed; `Best` trades speed for ratio.\n * @public\n */\nexport enum CompressionLevel {\n Fastest = 0,\n Default = 1,\n Best = 2\n}\n\n/**\n * Lines that can be drawn as text decorations. `None` disables decorations.\n * Multiple lines may be combined in a single config.\n * @public\n */\nexport type TextDecorationLine =\n | 'None'\n | 'Underline'\n | 'Strikethrough'\n | 'Overline';\n\n/**\n * Visual style for text decoration lines.\n * @public\n */\nexport type TextDecorationStyle =\n | 'Solid'\n | 'Double'\n | 'Dotted'\n | 'Dashed'\n | 'Wavy';\n\n/**\n * Configuration for text decoration rendering.\n * @public\n */\nexport interface TextDecorationConfig {\n lines: TextDecorationLine[];\n style?: TextDecorationStyle;\n /** Override color for underlines (only). */\n underlineColor?: Color;\n /** Multiplier on the font-derived underline thickness. Default 1.0. */\n underlineThickness?: number;\n /** Relative offset multiplier for the underline position. */\n underlineOffset?: number;\n /** When true, underlines skip glyph descenders. Default true. */\n skipInk?: boolean;\n}\n\n/**\n * A movement constraint rule. The scope is determined by which key is\n * present: neither (scene-wide default), `block` (per-block, includes\n * pages), or `blockType` (per-block-type).\n *\n * `overshoot` is a non-negative fraction of the moved block's own size.\n * @public\n */\nexport type MovementConstraintRule =\n | { overshoot: number }\n | { overshoot: number; block: number }\n | { overshoot: number; blockType: string };\n\n/**\n * Scope descriptor used to identify an existing movement constraint for\n * removal.\n * @public\n */\nexport type MovementConstraintScope = { block: number } | { blockType: string };\n\n/**\n * Effective movement constraint for a block, or `null` when no constraint\n * applies.\n * @public\n */\nexport type ResolvedMovementConstraint = { overshoot: number } | null;\n\n/**\n * Animation easing types for animated operations\n * @public\n */\nexport type AnimationEasing =\n | 'Linear'\n | 'EaseIn'\n | 'EaseOut'\n | 'EaseInOut'\n | 'EaseInQuart'\n | 'EaseOutQuart'\n | 'EaseInOutQuart'\n | 'EaseInQuint'\n | 'EaseOutQuint'\n | 'EaseInOutQuint'\n | 'EaseInBack'\n | 'EaseOutBack'\n | 'EaseInOutBack'\n | 'EaseInSpring'\n | 'EaseOutSpring'\n | 'EaseInOutSpring';\n\n/**\n * Options for zooming to a block with optional animation.\n * @public\n */\nexport type ZoomOptions = {\n /** Padding configuration around the block */\n padding?:\n | number\n | { x?: number; y?: number }\n | { top?: number; bottom?: number; left?: number; right?: number };\n /** Animation configuration - boolean for default animation or object for custom settings */\n animate?:\n | boolean\n | {\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"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fs", "import_node_url", "isRGBAColor", "isSpotColor", "isCMYKColor", "NativeColorInternal", "ColorSpace", "CompressionFormat", "CompressionLevel"]
|
|
7
7
|
}
|