@pygmalionjs/pygmalion 0.15.0 → 0.17.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.
@@ -34,6 +34,7 @@ export interface RasterExportRequest {
34
34
  height: number;
35
35
  scale: number;
36
36
  contentsOnly: boolean;
37
+ signal?: AbortSignal;
37
38
  }
38
39
  export type RasterExportRenderer = (request: RasterExportRequest) => Promise<Uint8Array>;
39
40
  export interface DesignExportArtifact {
@@ -42,4 +43,6 @@ export interface DesignExportArtifact {
42
43
  bytes: Uint8Array;
43
44
  }
44
45
  /** Raster bytes come only from an explicit host renderer; no hidden capture or network access. */
45
- export declare function exportDesignNode(document: DesignDocument, nodeId: string, setting: ExportSetting, renderer?: RasterExportRenderer): Promise<DesignExportArtifact>;
46
+ export declare function exportDesignNode(document: DesignDocument, nodeId: string, setting: ExportSetting, renderer?: RasterExportRenderer, options?: {
47
+ signal?: AbortSignal;
48
+ }): Promise<DesignExportArtifact>;
@@ -183,3 +183,13 @@ export declare function fontFaceSetLoader(fonts: {
183
183
  } | undefined | null): TextFontLoader | null;
184
184
  /** A convenience for text nodes: the node's own font needs. */
185
185
  export declare function textNodeFontRequirements(node: DocumentNode): TextFontRequirement[];
186
+ /** An exact preparation request. A missing family remains unresolved; no default is guessed. */
187
+ export interface TextFontFaceRequest {
188
+ readonly family: string | null;
189
+ readonly weight: number;
190
+ readonly style: 'normal' | 'italic';
191
+ /** Written sample in UTF-16. Rendered case or connected substitutions require explicit resolution. */
192
+ readonly sample: string;
193
+ }
194
+ /** Preserves family expressions and sample bytes, keeping weight/style/sample combinations distinct. */
195
+ export declare function textFontFaceRequests(model: RichText, base?: TextNodeCharacterStyle): readonly TextFontFaceRequest[];
@@ -0,0 +1,36 @@
1
+ import type { TextFontFaceRequest } from './richText.js';
2
+ export type TextFontFaceResult = {
3
+ readonly status: 'ready';
4
+ readonly faceId: string;
5
+ readonly family: string;
6
+ readonly weight: number;
7
+ readonly style: 'normal' | 'italic';
8
+ readonly sample: string;
9
+ } | {
10
+ readonly status: 'unavailable';
11
+ readonly code: string;
12
+ readonly message: string;
13
+ } | {
14
+ readonly status: 'failed';
15
+ readonly code: string;
16
+ readonly message: string;
17
+ };
18
+ /** The provider explicitly attests to the exact face and sample coverage in this environment. */
19
+ export interface TextFontFaceResolver {
20
+ readonly environmentId: string;
21
+ resolve(request: TextFontFaceRequest, context: {
22
+ readonly signal: AbortSignal;
23
+ }): Promise<TextFontFaceResult>;
24
+ }
25
+ export interface PreparedTextFont {
26
+ readonly request: TextFontFaceRequest;
27
+ readonly result: TextFontFaceResult;
28
+ }
29
+ export interface TextFontPreparationReport {
30
+ readonly environmentId: string;
31
+ readonly status: 'ready' | 'unavailable' | 'failed';
32
+ readonly fonts: readonly PreparedTextFont[];
33
+ }
34
+ export declare function textFontRequestKey(request: TextFontFaceRequest): string;
35
+ /** Invalid provider attestations fail closed; a fallback or a different sample is not a ready face. */
36
+ export declare function validateTextFontFaceResult(request: TextFontFaceRequest, result: TextFontFaceResult): TextFontFaceResult;
@@ -55,8 +55,15 @@ export { planScopeTransfer, resolveScopeTransfer, applyScopeTransfer } from './w
55
55
  export type { ScopeTransferPlan, ScopeTransferDecisionPlan, ScopeTransferItem, ScopeTransferChoice, ScopeTransferDecision, ScopeTransferOptions, ResolvedScopeTransfer } from './workspace/edit/scopeTransfer.js';
56
56
  export { planDocumentLayerMove, applyDocumentLayerMove, normalizeDocumentLayerSelection } from './workspace/edit/layerMoves.js';
57
57
  export type { DocumentLayerMoveRequest, DocumentLayerMovePlan, DocumentLayerMoveOperation, ReadyDocumentLayerMove } from './workspace/edit/layerMoves.js';
58
- export { TEXT_CHARACTER_KEYS, TEXT_PARAGRAPH_KEYS, TEXT_RESIZE_MODES, RICH_TEXT_CASES, RICH_TEXT_LISTS, RICH_TEXT_ALIGNMENTS, TEXT_PARAGRAPH_PROPERTY, TEXT_NODE_PROPERTY_KEYS, isTextLink, isTextResizeMode, isRichTextCharacterValue, isRichTextParagraphValue, isRichTextCharacterStyle, isRichTextParagraphStyle, isRichTextRun, isRichTextParagraph, isRichText, richTextPlain, richTextLength, richTextFromPlain, normalizeRichText, applyRichTextCharacterStyle, clearRichTextCharacterStyle, setRichTextParagraphStyle, clearRichTextParagraphStyle, richTextInheritedStyle, insertRichText, deleteRichText, replaceRichText, splitRichTextParagraph, mergeRichTextParagraphs, applyPlainTextEdit, richTextCharacterStyleAt, richTextParagraphStyleAt, richTextVaryingKeys, textNodeStyle, textResizeMode, textNodePlain, textNodeModel, isRichTextTrivial, hoistRichTextStyle, richTextValue, normalizeTextProperties, plainTextProperties, textFontRequirements, documentFontRequirements, textNodeFontRequirements, loadTextFonts, loadDocumentFonts, fontFaceSetLoader, } from './document/richText.js';
58
+ export { TEXT_CHARACTER_KEYS, TEXT_PARAGRAPH_KEYS, TEXT_RESIZE_MODES, RICH_TEXT_CASES, RICH_TEXT_LISTS, RICH_TEXT_ALIGNMENTS, TEXT_PARAGRAPH_PROPERTY, TEXT_NODE_PROPERTY_KEYS, isTextLink, isTextResizeMode, isRichTextCharacterValue, isRichTextParagraphValue, isRichTextCharacterStyle, isRichTextParagraphStyle, isRichTextRun, isRichTextParagraph, isRichText, richTextPlain, richTextLength, richTextFromPlain, normalizeRichText, applyRichTextCharacterStyle, clearRichTextCharacterStyle, setRichTextParagraphStyle, clearRichTextParagraphStyle, richTextInheritedStyle, insertRichText, deleteRichText, replaceRichText, splitRichTextParagraph, mergeRichTextParagraphs, applyPlainTextEdit, richTextCharacterStyleAt, richTextParagraphStyleAt, richTextVaryingKeys, textNodeStyle, textResizeMode, textNodePlain, textNodeModel, isRichTextTrivial, hoistRichTextStyle, richTextValue, normalizeTextProperties, plainTextProperties, textFontRequirements, documentFontRequirements, textNodeFontRequirements, loadTextFonts, loadDocumentFonts, fontFaceSetLoader, textFontFaceRequests, } from './document/richText.js';
59
59
  export type * from './document/richText.js';
60
+ export * from './document/textFontPreparation.js';
61
+ export { createTextFontPreparationRuntime } from './workspace/edit/textFontRuntime.js';
62
+ export type { TextFontPreparationRuntime } from './workspace/edit/textFontRuntime.js';
63
+ export { collectTextFontOccurrences, textFontAddressKey } from './workspace/edit/textFontOccurrences.js';
64
+ export type { TextFontAddress, TextFontOccurrence, TextFontCollection, TextFontCollectionOptions } from './workspace/edit/textFontOccurrences.js';
65
+ export { useTextFontPreparation } from './workspace/edit/useTextFontPreparation.js';
66
+ export type { TextFontPreparationState } from './workspace/edit/useTextFontPreparation.js';
60
67
  export { VECTOR_SHAPES, VECTOR_BOOLEAN_OPERATIONS, VECTOR_FLATNESS, VECTOR_MERGE_DISTANCE, VECTOR_SIDE_SAMPLE, isVectorProperties, parseVector, serializeVector, vectorPathAnchors, vectorPathFromAnchors, vectorPathSegments, vectorBounds, transformVector, translateVector, vectorFitTransform, normalizeVectorOrigin, fitVectorNode, rectangleVector, ellipseVector, arcVector, lineVector, polygonVector, starVector, createShapeVector, roundVectorCorners, vectorPathData, vectorAnchorMode, moveVectorAnchor, moveVectorHandle, setVectorAnchorMode, insertVectorAnchor, deleteVectorAnchor, canSplitVectorPath, splitVectorPath, canJoinVectorPaths, joinVectorPaths, nearestVectorSegmentPoint, flattenVector, vectorContainsPoint, vectorArea, booleanRings, booleanVectors, booleanVectorPrecision, vectorRenderTransform, } from './document/vector.js';
61
68
  export type * from './document/vector.js';
62
69
  export { VectorEditor, VectorInspector, VectorNodeSurface, useVectorEditing } from './workspace/edit/VectorEditor.js';
@@ -438,4 +445,5 @@ export type { PrototypeInputFrame } from './workspace/view/prototypeInputFrame.j
438
445
  export { createPrototypeProjectionContext } from './workspace/edit/prototypeProjection.js';
439
446
  export type { PrototypeProjectionContext } from './workspace/edit/prototypeProjection.js';
440
447
  export * from './workspace/edit/rasterExport.js';
448
+ export type { PreparedTextRasterFaceReference, TextRasterFaceResolver } from './workspace/edit/staticTextRaster.js';
441
449
  export * from './document/imagePaintGeometry.js';
@@ -4,11 +4,17 @@ import type { DesignDocument, DocumentNode, DocumentDuplicateMetadataRemapper }
4
4
  import type { WorkspaceSourceCapabilities } from './source/flowContracts.js';
5
5
  import type { WorkspaceTarget } from './contracts.js';
6
6
  import type { WorkspaceTokenLibraryCapabilities } from './tokens/contracts.js';
7
+ import type { TextFontPreparationRuntime } from './edit/textFontRuntime.js';
8
+ import type { TextRasterFaceResolver } from './edit/staticTextRaster.js';
7
9
  /** One target's source, data, rendering, and persistence capabilities travel together. */
8
10
  export interface WorkspaceTargetConfiguration {
9
11
  data?: HostDataCapabilities;
10
12
  source?: WorkspaceSourceCapabilities;
11
13
  duplicateMetadata?: DocumentDuplicateMetadataRemapper;
14
+ /** Explicit font face and sample preparation; browser fallback rendering is not exact readiness. */
15
+ textFontPreparation?: TextFontPreparationRuntime;
16
+ /** Bind a prepared face identity to its exact registered browser FontFace for static text output. */
17
+ textRasterFaceResolver?: TextRasterFaceResolver;
12
18
  loadDocument?(target: WorkspaceTarget, options: {
13
19
  signal: AbortSignal;
14
20
  }): Promise<DesignDocument>;
@@ -10,8 +10,10 @@ export interface AssetsPanelProps {
10
10
  onSelect?: (nodeId: string) => void;
11
11
  onExport?: (artifact: DesignExportArtifact) => void | Promise<void>;
12
12
  rasterRenderer?: RasterExportRenderer;
13
+ lifetimeKey?: string;
14
+ subscribeLifetime?: (invalidate: () => void) => () => void;
13
15
  disabled?: boolean;
14
16
  }
15
- export declare function AssetsPanel({ engine, pageId, parentId, selectedNodeId, allocateId, onSelect, onExport, rasterRenderer, disabled }: AssetsPanelProps): import("react").JSX.Element;
17
+ export declare function AssetsPanel({ engine, pageId, parentId, selectedNodeId, allocateId, onSelect, onExport, rasterRenderer, lifetimeKey, subscribeLifetime, disabled }: AssetsPanelProps): import("react").JSX.Element;
16
18
  /** Explicit local download callback for the panel; raster output still needs a separate host renderer. */
17
19
  export declare function downloadDesignArtifact(artifact: DesignExportArtifact): void;
@@ -1,10 +1,12 @@
1
1
  import type { DocumentEngine } from '../../document/contracts.js';
2
2
  import { type DesignExportArtifact, type RasterExportRenderer } from '../../document/exportSettings.js';
3
3
  /** The inspector and asset browser share one persisted export-settings editor. */
4
- export declare function NodeExportPanel({ engine, nodeId, onExport, rasterRenderer, disabled }: {
4
+ export declare function NodeExportPanel({ engine, nodeId, onExport, rasterRenderer, disabled, lifetimeKey, subscribeLifetime }: {
5
5
  engine: DocumentEngine;
6
6
  nodeId?: string;
7
7
  onExport?(artifact: DesignExportArtifact): void | Promise<void>;
8
8
  rasterRenderer?: RasterExportRenderer;
9
9
  disabled?: boolean;
10
+ lifetimeKey?: string;
11
+ subscribeLifetime?: (invalidate: () => void) => () => void;
10
12
  }): import("react").JSX.Element;
@@ -1,5 +1,7 @@
1
1
  import type { DesignDocument, DocumentNode, DocumentTransaction } from '../../document/contracts.js';
2
2
  import { type TextFontLoader, type TextFontLoadReport } from '../../document/richText.js';
3
+ import type { TextFontPreparationRuntime } from './textFontRuntime.js';
4
+ import type { TextFontCollection } from './textFontOccurrences.js';
3
5
 
4
6
  type Act = (label: string, apply: (transaction: DocumentTransaction) => void) => boolean;
5
7
  /**
@@ -40,11 +42,15 @@ export interface TextEditorProps {
40
42
  connected?: boolean;
41
43
  /** Resolves required faces; the browser font set when omitted, no loading when null. */
42
44
  fontLoader?: TextFontLoader | null;
45
+ /** Optional exact face preparation; legacy loading stays separate. */
46
+ fontPreparation?: TextFontPreparationRuntime | null;
47
+ /** The selected resolved occurrence, including projected sample and overrides when relevant. */
48
+ fontCollection?: TextFontCollection;
43
49
  }
44
50
  /**
45
51
  * Inspector section for a text node. The written text is edited in a textarea whose selection decides
46
52
  * whether a style applies to a character range or to the whole layer. Every committed edit is one
47
53
  * document transaction; Escape discards the uncommitted draft.
48
54
  */
49
- export declare function TextEditor({ document, node, act, connected, fontLoader }: TextEditorProps): import("react").JSX.Element;
55
+ export declare function TextEditor({ document, node, act, connected, fontLoader, fontPreparation, fontCollection }: TextEditorProps): import("react").JSX.Element;
50
56
  export {};
@@ -0,0 +1,6 @@
1
+ import type { DesignDocument } from '../../document/contracts.js';
2
+
3
+ /** Browse authored style metadata without selecting a layer or requesting fonts. */
4
+ export declare function TextStyleCatalog({ document }: {
5
+ document: DesignDocument;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { RasterExportRequest } from '../../document/exportSettings.js';
2
+ export declare function assertRasterActive(signal?: AbortSignal): void;
3
+ export declare function validateRasterSize(request: Pick<RasterExportRequest, 'width' | 'height'>): void;
4
+ /** Cancellation ends this reader even if a browser decode or encode cannot be interrupted internally. */
5
+ export declare function awaitRasterActive<T>(work: Promise<T>, signal?: AbortSignal): Promise<T>;
6
+ export declare function encodeRasterCanvas(canvas: HTMLCanvasElement, format: RasterExportRequest['format'], signal?: AbortSignal): Promise<Uint8Array>;
@@ -1,5 +1,13 @@
1
+ import { type TextRasterFaceResolver } from './staticTextRaster.js';
2
+ import type { TextFontPreparationRuntime } from './textFontRuntime.js';
1
3
  import { type RasterExportRenderer, type RasterExportRequest } from '../../document/exportSettings.js';
2
4
  /** The same supported SVG geometry supplies browser raster output; unsupported visuals stay explicit. */
3
5
  export declare function rasterExportSvg(request: RasterExportRequest): string;
4
- /** Explicit browser renderer for supported geometry. It never captures a page or fetches external resources. */
6
+ /** Adds bounded authored text output only when an explicit exact-face provider is available. */
7
+ export declare function createDesignRasterRenderer(options?: {
8
+ textFontPreparation?: TextFontPreparationRuntime;
9
+ sourceMapped?: boolean;
10
+ resolvePreparedFace?: TextRasterFaceResolver;
11
+ }): RasterExportRenderer;
12
+ /** Backward-compatible geometry renderer. Exact text output is explicitly enabled through the factory. */
5
13
  export declare const renderDesignRaster: RasterExportRenderer;
@@ -0,0 +1,50 @@
1
+ import { type RasterExportRequest } from '../../document/exportSettings.js';
2
+ import { type TextFontFaceRequest } from '../../document/richText.js';
3
+ import type { TextFontPreparationRuntime } from './textFontRuntime.js';
4
+ export interface PreparedTextRasterFaceReference {
5
+ readonly environmentId: string;
6
+ readonly faceId: string;
7
+ readonly family: string;
8
+ readonly weight: number;
9
+ readonly style: 'normal' | 'italic';
10
+ readonly sample: string;
11
+ }
12
+ /** The owner maps its exact prepared identity to the same FontFace object registered for drawing. */
13
+ export type TextRasterFaceResolver = (reference: PreparedTextRasterFaceReference) => FontFace | undefined;
14
+ export interface StaticTextRasterPlan {
15
+ readonly nodeId: string;
16
+ readonly width: number;
17
+ readonly height: number;
18
+ readonly outputWidth: number;
19
+ readonly outputHeight: number;
20
+ readonly font: TextFontFaceRequest;
21
+ readonly fontSize: number;
22
+ readonly lineHeight: number;
23
+ readonly align: 'start' | 'center' | 'end';
24
+ readonly color: string;
25
+ readonly opacity: number;
26
+ }
27
+ /** The first text raster slice is a single authored, fixed-size, undecorated line with explicit typography. */
28
+ export declare function createStaticTextRasterPlan(request: RasterExportRequest, options?: {
29
+ sourceMapped?: boolean;
30
+ }): StaticTextRasterPlan;
31
+ /** Registered face descriptors must support the requested style and weight without synthesis. */
32
+ export declare function supportsStaticTextFace(face: Pick<FontFace, 'family' | 'style' | 'weight' | 'stretch' | 'status'>, family: string, request: TextFontFaceRequest): boolean;
33
+ /** Registered unicode-range restrictions are distinct from the provider's glyph-coverage attestation. */
34
+ export declare function staticTextFaceCoversSample(unicodeRange: string, sample: string): boolean;
35
+ /** Matches the SVG renderer's default xMidYMid meet behavior after output dimension rounding. */
36
+ export declare function staticTextRasterViewport(plan: Pick<StaticTextRasterPlan, 'width' | 'height' | 'outputWidth' | 'outputHeight'>): {
37
+ scale: number;
38
+ x: number;
39
+ y: number;
40
+ };
41
+ /** Measures the same pre-wrap line box as TextNodeSurface, using a zero-height inline baseline marker. */
42
+ export declare function measureStaticTextRaster(plan: StaticTextRasterPlan, family: string, owner: Document): {
43
+ x: number;
44
+ baseline: number;
45
+ };
46
+ /** A ready explicit provider plus a registered browser face is required; platform fallback checks are insufficient. */
47
+ export declare function renderStaticTextRaster(request: RasterExportRequest, runtime: TextFontPreparationRuntime, options?: {
48
+ sourceMapped?: boolean;
49
+ resolvePreparedFace?: TextRasterFaceResolver;
50
+ }): Promise<Uint8Array>;
@@ -0,0 +1,34 @@
1
+ import type { DesignDocument, DocumentResolveOptions } from '../../document/contracts.js';
2
+ import type { DataProjection } from '../../binding/preview.js';
3
+ import { type TextFontFaceRequest } from '../../document/richText.js';
4
+ import { type ProjectedDocumentNode } from './projection.js';
5
+ export interface TextFontAddress {
6
+ readonly sourceNodeId: string;
7
+ readonly instancePath: readonly string[];
8
+ readonly rowPath: ProjectedDocumentNode['rowPath'];
9
+ }
10
+ export interface TextFontOccurrence extends TextFontAddress {
11
+ readonly origin: 'authored' | 'source' | 'bound';
12
+ readonly requests: readonly TextFontFaceRequest[];
13
+ }
14
+ export interface TextFontCollection {
15
+ readonly occurrences: readonly TextFontOccurrence[];
16
+ readonly diagnostics: readonly {
17
+ readonly code: string;
18
+ readonly message: string;
19
+ readonly address?: TextFontAddress;
20
+ }[];
21
+ }
22
+ export interface TextFontCollectionOptions {
23
+ readonly projection?: DataProjection | null;
24
+ readonly resolveOptions?: DocumentResolveOptions;
25
+ /** Supply the same resolved scene the canvas uses, when it has custom resolution. */
26
+ readonly scene?: ProjectedDocumentNode;
27
+ readonly visibleRootIds?: readonly string[];
28
+ readonly subtree?: TextFontAddress;
29
+ /** Required for connected/source content or case-transformed samples. It must describe rendered text. */
30
+ readonly resolveText?: (item: ProjectedDocumentNode, address: TextFontAddress) => string | undefined;
31
+ }
32
+ export declare const textFontAddressKey: (address: TextFontAddress) => string;
33
+ /** Read-only effective occurrences; hidden pages/rows and unselected shared definitions do not preload. */
34
+ export declare function collectTextFontOccurrences(document: DesignDocument, options?: TextFontCollectionOptions): TextFontCollection;
@@ -0,0 +1,15 @@
1
+ import { type TextFontFaceResolver, type TextFontPreparationReport } from '../../document/textFontPreparation.js';
2
+ import type { TextFontFaceRequest } from '../../document/richText.js';
3
+ export interface TextFontPreparationRuntime {
4
+ readonly environmentId: string;
5
+ prepare(requests: readonly TextFontFaceRequest[], options?: {
6
+ signal?: AbortSignal;
7
+ retry?: boolean;
8
+ }): Promise<TextFontPreparationReport>;
9
+ clear(): void;
10
+ dispose(): void;
11
+ }
12
+ /** A bounded successful-result cache with shared in-flight work and independently cancellable readers. */
13
+ export declare function createTextFontPreparationRuntime(resolver: TextFontFaceResolver, options?: {
14
+ maxEntries?: number;
15
+ }): TextFontPreparationRuntime;
@@ -0,0 +1,12 @@
1
+ import type { DesignDocument, DocumentNode } from '../../document/contracts.js';
2
+ import type { TextFontPreparationReport } from '../../document/textFontPreparation.js';
3
+ import { type TextFontCollection } from './textFontOccurrences.js';
4
+ import type { TextFontPreparationRuntime } from './textFontRuntime.js';
5
+ export interface TextFontPreparationState {
6
+ readonly status: 'idle' | 'loading' | 'ready' | 'unavailable' | 'failed';
7
+ readonly messages: readonly string[];
8
+ readonly report?: TextFontPreparationReport;
9
+ retry(): void;
10
+ }
11
+ /** Exact readiness is opt-in; legacy font-set loading never becomes an identity attestation. */
12
+ export declare function useTextFontPreparation(document: DesignDocument, node: DocumentNode, runtime?: TextFontPreparationRuntime | null, supplied?: TextFontCollection): TextFontPreparationState;
@@ -30,8 +30,18 @@ export interface PrototypeInterruptedTiming {
30
30
  }
31
31
  /** One shared timing table per interrupted transition, never one solver per layer/channel. */
32
32
  export declare function createPrototypeInterruptedTiming(transition: PrototypeTransition, durationMs: number): PrototypeInterruptedTiming;
33
- /** Existing computed 2D/px/RGB tracks only. Unsupported values retain explicit diagnostics. */
34
- export declare function createPrototypeInterruptedFrames(captured: PrototypeMotionCapture, target: Partial<PrototypeMotionStyles>, timing: PrototypeInterruptedTiming): {
33
+ interface PrototypeInterruptedFrames {
35
34
  frames: Keyframe[];
36
35
  unsupported: PrototypeMotionProperty[];
37
- };
36
+ }
37
+ interface PrototypeInterruptedFramePlannerOptions {
38
+ maxTracks?: number;
39
+ maxBytes?: number;
40
+ }
41
+ /** A single preparation pass owns this cache; it retains no DOM, captures or animation records.
42
+ * Limits bound cached track count and UTF-16 string payload bytes, not total JavaScript heap size.
43
+ * Returned frames are detached even when their immutable property strings are reused. */
44
+ export declare function createPrototypeInterruptedFramePlanner(inputTiming: PrototypeInterruptedTiming, options?: PrototypeInterruptedFramePlannerOptions): (captured: PrototypeMotionCapture, target: Partial<PrototypeMotionStyles>) => PrototypeInterruptedFrames;
45
+ /** Existing computed 2D/px/RGB tracks only. Unsupported values retain explicit diagnostics. */
46
+ export declare function createPrototypeInterruptedFrames(captured: PrototypeMotionCapture, target: Partial<PrototypeMotionStyles>, timing: PrototypeInterruptedTiming): PrototypeInterruptedFrames;
47
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pygmalionjs/pygmalion",
3
- "version": "0.15.0",
3
+ "version": "0.17.0",
4
4
  "description": "Code-backed DOM design sandbox and visual QA editor",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {