@hatiolab/figure-model 0.1.92 → 0.1.93
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/CHANGELOG.md +12 -12
- package/README.md +25 -25
- package/dist/{v3-asset-types.d.ts → asset-types.d.ts} +67 -67
- package/dist/asset-types.d.ts.map +1 -0
- package/dist/asset-types.js +2 -0
- package/dist/asset-types.js.map +1 -0
- package/dist/asset.d.ts +8 -0
- package/dist/asset.d.ts.map +1 -0
- package/dist/{v3-asset.js → asset.js} +23 -23
- package/dist/asset.js.map +1 -0
- package/dist/{v3-authoring-actions.d.ts → authoring-actions.d.ts} +66 -66
- package/dist/authoring-actions.d.ts.map +1 -0
- package/dist/{v3-authoring-actions.js → authoring-actions.js} +77 -77
- package/dist/authoring-actions.js.map +1 -0
- package/dist/{v3-authoring-session.d.ts → authoring-session.d.ts} +21 -21
- package/dist/authoring-session.d.ts.map +1 -0
- package/dist/{v3-authoring-session.js → authoring-session.js} +4 -4
- package/dist/authoring-session.js.map +1 -0
- package/dist/capabilities.d.ts +3 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/{v3-capabilities.js → capabilities.js} +8 -8
- package/dist/capabilities.js.map +1 -0
- package/dist/contract.d.ts +7 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +12 -0
- package/dist/contract.js.map +1 -0
- package/dist/{v3-cost.d.ts → cost.d.ts} +5 -5
- package/dist/cost.d.ts.map +1 -0
- package/dist/{v3-cost.js → cost.js} +11 -11
- package/dist/cost.js.map +1 -0
- package/dist/{v3-create.d.ts → create.d.ts} +8 -8
- package/dist/{v3-create.d.ts.map → create.d.ts.map} +1 -1
- package/dist/{v3-create.js → create.js} +26 -26
- package/dist/create.js.map +1 -0
- package/dist/document.d.ts +5 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +31 -0
- package/dist/document.js.map +1 -0
- package/dist/{v3-driver.d.ts → driver.d.ts} +10 -10
- package/dist/driver.d.ts.map +1 -0
- package/dist/{v3-driver.js → driver.js} +10 -10
- package/dist/driver.js.map +1 -0
- package/dist/{v3-editor-workspace.d.ts → editor-workspace.d.ts} +73 -73
- package/dist/editor-workspace.d.ts.map +1 -0
- package/dist/{v3-editor-workspace.js → editor-workspace.js} +29 -29
- package/dist/editor-workspace.js.map +1 -0
- package/dist/{v3-examples.d.ts → examples.d.ts} +5 -5
- package/dist/examples.d.ts.map +1 -0
- package/dist/{v3-examples.js → examples.js} +11 -11
- package/dist/examples.js.map +1 -0
- package/dist/{v3-follow.d.ts → follow.d.ts} +5 -5
- package/dist/follow.d.ts.map +1 -0
- package/dist/{v3-follow.js → follow.js} +2 -2
- package/dist/follow.js.map +1 -0
- package/dist/{v3-gate.d.ts → gate.d.ts} +28 -28
- package/dist/gate.d.ts.map +1 -0
- package/dist/{v3-gate.js → gate.js} +42 -42
- package/dist/gate.js.map +1 -0
- package/dist/{v3-graph-types.d.ts → graph-types.d.ts} +33 -33
- package/dist/graph-types.d.ts.map +1 -0
- package/dist/graph-types.js +2 -0
- package/dist/graph-types.js.map +1 -0
- package/dist/{v3-graph.d.ts → graph.d.ts} +14 -14
- package/dist/graph.d.ts.map +1 -0
- package/dist/{v3-graph.js → graph.js} +16 -16
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +33 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -33
- package/dist/index.js.map +1 -1
- package/dist/{v3-instance-size.d.ts → instance-size.d.ts} +14 -14
- package/dist/instance-size.d.ts.map +1 -0
- package/dist/{v3-instance-size.js → instance-size.js} +13 -13
- package/dist/instance-size.js.map +1 -0
- package/dist/json.d.ts +12 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/{v3-json.js → json.js} +13 -13
- package/dist/json.js.map +1 -0
- package/dist/kernel-version.d.ts +8 -0
- package/dist/kernel-version.d.ts.map +1 -0
- package/dist/{v3-kernel-version.js → kernel-version.js} +4 -4
- package/dist/kernel-version.js.map +1 -0
- package/dist/{v3-part-edit.d.ts → part-edit.d.ts} +10 -10
- package/dist/part-edit.d.ts.map +1 -0
- package/dist/{v3-part-edit.js → part-edit.js} +65 -65
- package/dist/part-edit.js.map +1 -0
- package/dist/proposal.d.ts +42 -0
- package/dist/proposal.d.ts.map +1 -0
- package/dist/{v3-proposal.js → proposal.js} +21 -21
- package/dist/proposal.js.map +1 -0
- package/dist/{v3-public-inputs.d.ts → public-inputs.d.ts} +4 -4
- package/dist/public-inputs.d.ts.map +1 -0
- package/dist/{v3-public-inputs.js → public-inputs.js} +3 -3
- package/dist/public-inputs.js.map +1 -0
- package/dist/recipe-build.d.ts +27 -0
- package/dist/recipe-build.d.ts.map +1 -0
- package/dist/{v3-recipe-build.js → recipe-build.js} +9 -9
- package/dist/recipe-build.js.map +1 -0
- package/dist/recipe-from-parts.d.ts +8 -0
- package/dist/recipe-from-parts.d.ts.map +1 -0
- package/dist/{v3-recipe-from-parts.js → recipe-from-parts.js} +9 -9
- package/dist/recipe-from-parts.js.map +1 -0
- package/dist/{v3-recipe.d.ts → recipe.d.ts} +25 -25
- package/dist/recipe.d.ts.map +1 -0
- package/dist/{v3-recipe.js → recipe.js} +30 -30
- package/dist/recipe.js.map +1 -0
- package/dist/release-contract.d.ts +19 -0
- package/dist/release-contract.d.ts.map +1 -0
- package/dist/{v3-release-contract.js → release-contract.js} +5 -5
- package/dist/release-contract.js.map +1 -0
- package/dist/{v3-render-batches.d.ts → render-batches.d.ts} +8 -8
- package/dist/render-batches.d.ts.map +1 -0
- package/dist/{v3-render-batches.js → render-batches.js} +4 -4
- package/dist/render-batches.js.map +1 -0
- package/dist/{v3-score.d.ts → score.d.ts} +19 -19
- package/dist/score.d.ts.map +1 -0
- package/dist/{v3-score.js → score.js} +32 -32
- package/dist/score.js.map +1 -0
- package/dist/{v3-shape-sampling.d.ts → shape-sampling.d.ts} +4 -4
- package/dist/shape-sampling.d.ts.map +1 -0
- package/dist/{v3-shape-sampling.js → shape-sampling.js} +3 -3
- package/dist/shape-sampling.js.map +1 -0
- package/dist/{v3-surface.d.ts → surface.d.ts} +5 -5
- package/dist/surface.d.ts.map +1 -0
- package/dist/{v3-surface.js → surface.js} +7 -7
- package/dist/surface.js.map +1 -0
- package/dist/{v3-words.d.ts → words.d.ts} +3 -3
- package/dist/words.d.ts.map +1 -0
- package/dist/{v3-words.js → words.js} +3 -3
- package/dist/words.js.map +1 -0
- package/docs/{assembly-constraints-v3.md → assembly-constraints.md} +1 -1
- package/docs/{v3-asset-persistence.md → asset-persistence.md} +8 -8
- package/docs/{v3-authoring-transactions.md → authoring-transactions.md} +2 -2
- package/docs/{v3-capability-bindings.md → capability-bindings.md} +8 -8
- package/docs/{v3-common-kernel-experiment.md → common-kernel-experiment.md} +4 -4
- package/docs/{v3-core-semantics.md → core-semantics.md} +5 -5
- package/docs/{v3-cutover.md → cutover.md} +4 -4
- package/docs/{v3-design.md → design.md} +11 -11
- package/docs/{v3-document-contract.md → document-contract.md} +9 -9
- package/docs/{v3-dryroom-profile-validation.md → dryroom-profile-validation.md} +4 -4
- package/docs/{v3-editor-integration.md → editor-integration.md} +6 -6
- package/docs/{v3-full-conveyor-validation.md → full-conveyor-validation.md} +4 -4
- package/docs/{v3-full-dryroom-validation.md → full-dryroom-validation.md} +4 -4
- package/docs/{v3-full-forklift-validation.md → full-forklift-validation.md} +5 -5
- package/docs/{v3-full-robot-validation.md → full-robot-validation.md} +4 -4
- package/docs/{v3-layout-system.md → layout-system.md} +4 -4
- package/docs/{v3-legacy-risk-audit-2026-09-23.md → legacy-risk-audit-2026-09-23.md} +5 -5
- package/docs/{v3-minimal-model.md → minimal-model.md} +6 -6
- package/docs/{v3-motion-contract.md → motion-contract.md} +3 -3
- package/docs/{v3-openusd-review.md → openusd-review.md} +8 -8
- package/docs/{v3-operator-contracts.md → operator-contracts.md} +6 -6
- package/docs/{v3-payload-collision-validation.md → payload-collision-validation.md} +4 -4
- package/docs/{v3-payload-contact-validation.md → payload-contact-validation.md} +5 -5
- package/docs/prototypes/README.md +10 -10
- package/docs/prototypes/{v3-asset-samples.mjs → asset-samples.mjs} +6 -6
- package/docs/prototypes/{v3-asset-store.mjs → asset-store.mjs} +3 -3
- package/docs/prototypes/{v3-asset-store.test.mjs → asset-store.test.mjs} +6 -6
- package/docs/prototypes/asset.mjs +1 -0
- package/docs/prototypes/{v3-asset.schema.json → asset.schema.json} +2 -2
- package/docs/prototypes/{v3-asset.test.mjs → asset.test.mjs} +10 -10
- package/docs/prototypes/authoring-session.mjs +1 -0
- package/docs/prototypes/{v3-authoring-session.test.mjs → authoring-session.test.mjs} +6 -6
- package/docs/prototypes/capability-plan.mjs +1 -0
- package/docs/prototypes/{v3-capability-plan.test.mjs → capability-plan.test.mjs} +5 -5
- package/docs/prototypes/{v3-capability-samples.mjs → capability-samples.mjs} +2 -2
- package/docs/prototypes/document.mjs +2 -0
- package/docs/prototypes/{v3-document.schema.json → document.schema.json} +1 -1
- package/docs/prototypes/{v3-document.test.mjs → document.test.mjs} +7 -7
- package/docs/prototypes/{v3-dryroom-mesh.mjs → dryroom-mesh.mjs} +1 -1
- package/docs/prototypes/{v3-dryroom-mesh.test.mjs → dryroom-mesh.test.mjs} +1 -1
- package/docs/prototypes/{v3-editor-browser.mjs → editor-browser.mjs} +13 -13
- package/docs/prototypes/editor-workspace.mjs +1 -0
- package/docs/prototypes/{v3-editor-workspace.test.mjs → editor-workspace.test.mjs} +3 -3
- package/docs/prototypes/{v3-feature-pattern.test.mjs → feature-pattern.test.mjs} +1 -1
- package/docs/prototypes/{v3-full-conveyor.mjs → full-conveyor.mjs} +2 -2
- package/docs/prototypes/{v3-full-conveyor.test.mjs → full-conveyor.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-dryroom.mjs → full-dryroom.mjs} +2 -2
- package/docs/prototypes/{v3-full-dryroom.test.mjs → full-dryroom.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-forklift.mjs → full-forklift.mjs} +2 -2
- package/docs/prototypes/{v3-full-forklift.test.mjs → full-forklift.test.mjs} +3 -3
- package/docs/prototypes/{v3-full-robot.mjs → full-robot.mjs} +2 -2
- package/docs/prototypes/{v3-full-robot.test.mjs → full-robot.test.mjs} +4 -4
- package/docs/prototypes/{v3-kernel.test.mjs → kernel.test.mjs} +1 -1
- package/docs/prototypes/{v3-layout.test.mjs → layout.test.mjs} +1 -1
- package/docs/prototypes/{v3-more-samples.test.mjs → more-samples.test.mjs} +2 -2
- package/docs/prototypes/{v3-payload-collision.mjs → payload-collision.mjs} +2 -2
- package/docs/prototypes/{v3-payload-collision.test.mjs → payload-collision.test.mjs} +3 -3
- package/docs/prototypes/{v3-payload-fit.mjs → payload-fit.mjs} +2 -2
- package/docs/prototypes/{v3-payload-fit.test.mjs → payload-fit.test.mjs} +4 -4
- package/docs/prototypes/render-full-dryroom.mjs +12 -12
- package/docs/prototypes/{v3-repeated-binding.mjs → repeated-binding.mjs} +1 -1
- package/docs/prototypes/{v3-repeated-binding.test.mjs → repeated-binding.test.mjs} +6 -6
- package/docs/prototypes/{v3-runtime-browser.mjs → runtime-browser.mjs} +26 -26
- package/docs/prototypes/{v3-samples.test.mjs → samples.test.mjs} +1 -1
- package/docs/prototypes/{v3-spatial-plan.test.mjs → spatial-plan.test.mjs} +1 -1
- package/docs/prototypes/typed-plan.mjs +3 -0
- package/docs/prototypes/{v3-typed-plan.test.mjs → typed-plan.test.mjs} +1 -1
- package/docs/prototypes/{v3-typed-repeat.test.mjs → typed-repeat.test.mjs} +2 -2
- package/docs/{v3-repeated-binding-validation.md → repeated-binding-validation.md} +4 -4
- package/docs/{v3-research-review.md → research-review.md} +2 -2
- package/docs/{v3-review-2026-09-22.md → review-2026-09-22.md} +10 -10
- package/docs/{v3-runtime-extraction.md → runtime-extraction.md} +16 -16
- package/docs/{v3-sample-validation-expanded.md → sample-validation-expanded.md} +5 -5
- package/docs/{v3-sample-validation.md → sample-validation.md} +3 -3
- package/docs/{v3-shape-dimension-contract.md → shape-dimension-contract.md} +12 -12
- package/docs/{v3-shapeassembly-reproduction.md → shapeassembly-reproduction.md} +4 -4
- package/docs/{v3-spatial-contracts.md → spatial-contracts.md} +5 -5
- package/docs/status.md +12 -0
- package/docs/{v3-storage-integration.md → storage-integration.md} +5 -5
- package/docs/{v3-typed-repeat-contracts.md → typed-repeat-contracts.md} +3 -3
- package/package.json +3 -3
- package/dist/v3-asset-types.d.ts.map +0 -1
- package/dist/v3-asset-types.js +0 -2
- package/dist/v3-asset-types.js.map +0 -1
- package/dist/v3-asset.d.ts +0 -8
- package/dist/v3-asset.d.ts.map +0 -1
- package/dist/v3-asset.js.map +0 -1
- package/dist/v3-authoring-actions.d.ts.map +0 -1
- package/dist/v3-authoring-actions.js.map +0 -1
- package/dist/v3-authoring-session.d.ts.map +0 -1
- package/dist/v3-authoring-session.js.map +0 -1
- package/dist/v3-capabilities.d.ts +0 -3
- package/dist/v3-capabilities.d.ts.map +0 -1
- package/dist/v3-capabilities.js.map +0 -1
- package/dist/v3-contract.d.ts +0 -7
- package/dist/v3-contract.d.ts.map +0 -1
- package/dist/v3-contract.js +0 -12
- package/dist/v3-contract.js.map +0 -1
- package/dist/v3-cost.d.ts.map +0 -1
- package/dist/v3-cost.js.map +0 -1
- package/dist/v3-create.js.map +0 -1
- package/dist/v3-document.d.ts +0 -5
- package/dist/v3-document.d.ts.map +0 -1
- package/dist/v3-document.js +0 -31
- package/dist/v3-document.js.map +0 -1
- package/dist/v3-driver.d.ts.map +0 -1
- package/dist/v3-driver.js.map +0 -1
- package/dist/v3-editor-workspace.d.ts.map +0 -1
- package/dist/v3-editor-workspace.js.map +0 -1
- package/dist/v3-examples.d.ts.map +0 -1
- package/dist/v3-examples.js.map +0 -1
- package/dist/v3-follow.d.ts.map +0 -1
- package/dist/v3-follow.js.map +0 -1
- package/dist/v3-gate.d.ts.map +0 -1
- package/dist/v3-gate.js.map +0 -1
- package/dist/v3-graph-types.d.ts.map +0 -1
- package/dist/v3-graph-types.js +0 -2
- package/dist/v3-graph-types.js.map +0 -1
- package/dist/v3-graph.d.ts.map +0 -1
- package/dist/v3-graph.js.map +0 -1
- package/dist/v3-instance-size.d.ts.map +0 -1
- package/dist/v3-instance-size.js.map +0 -1
- package/dist/v3-json.d.ts +0 -12
- package/dist/v3-json.d.ts.map +0 -1
- package/dist/v3-json.js.map +0 -1
- package/dist/v3-kernel-version.d.ts +0 -8
- package/dist/v3-kernel-version.d.ts.map +0 -1
- package/dist/v3-kernel-version.js.map +0 -1
- package/dist/v3-part-edit.d.ts.map +0 -1
- package/dist/v3-part-edit.js.map +0 -1
- package/dist/v3-proposal.d.ts +0 -42
- package/dist/v3-proposal.d.ts.map +0 -1
- package/dist/v3-proposal.js.map +0 -1
- package/dist/v3-public-inputs.d.ts.map +0 -1
- package/dist/v3-public-inputs.js.map +0 -1
- package/dist/v3-recipe-build.d.ts +0 -27
- package/dist/v3-recipe-build.d.ts.map +0 -1
- package/dist/v3-recipe-build.js.map +0 -1
- package/dist/v3-recipe-from-parts.d.ts +0 -8
- package/dist/v3-recipe-from-parts.d.ts.map +0 -1
- package/dist/v3-recipe-from-parts.js.map +0 -1
- package/dist/v3-recipe.d.ts.map +0 -1
- package/dist/v3-recipe.js.map +0 -1
- package/dist/v3-release-contract.d.ts +0 -19
- package/dist/v3-release-contract.d.ts.map +0 -1
- package/dist/v3-release-contract.js.map +0 -1
- package/dist/v3-render-batches.d.ts.map +0 -1
- package/dist/v3-render-batches.js.map +0 -1
- package/dist/v3-score.d.ts.map +0 -1
- package/dist/v3-score.js.map +0 -1
- package/dist/v3-shape-sampling.d.ts.map +0 -1
- package/dist/v3-shape-sampling.js.map +0 -1
- package/dist/v3-surface.d.ts.map +0 -1
- package/dist/v3-surface.js.map +0 -1
- package/dist/v3-words.d.ts.map +0 -1
- package/dist/v3-words.js.map +0 -1
- package/docs/prototypes/v3-asset.mjs +0 -1
- package/docs/prototypes/v3-authoring-session.mjs +0 -1
- package/docs/prototypes/v3-capability-plan.mjs +0 -1
- package/docs/prototypes/v3-document.mjs +0 -2
- package/docs/prototypes/v3-editor-workspace.mjs +0 -1
- package/docs/prototypes/v3-typed-plan.mjs +0 -3
- package/docs/v3-status.md +0 -50
- /package/docs/prototypes/{v3-kernel.mjs → kernel.mjs} +0 -0
- /package/docs/prototypes/{v3-linear-comparison.py → linear-comparison.py} +0 -0
- /package/docs/prototypes/{v3-semantics.test.mjs → semantics.test.mjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Shared UI/AI transaction experiment. In-memory, input edits only; not product persistence.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { compileFigureDocument as compileDocument } from "./document.js";
|
|
3
|
+
import { FigureContractError as ContractError } from "./contract.js";
|
|
4
4
|
function fail(code, path, message) {
|
|
5
5
|
throw new ContractError(code, path, message);
|
|
6
6
|
}
|
|
@@ -25,7 +25,7 @@ function diff(before, after) {
|
|
|
25
25
|
bindingsChanged: after.bindings.filter(b => !same(previous.get(b.id), b)).map(b => b.id)
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
export function
|
|
28
|
+
export function createFigureAuthoringSession(document, initialInputs) {
|
|
29
29
|
const compiled = compileDocument(document), definitions = new Map(document.model.inputs.map(i => [i.id, structuredClone(i)]));
|
|
30
30
|
let inputs = structuredClone(initialInputs), evaluation = compiled.evaluate(inputs), revision = 0;
|
|
31
31
|
const undo = [], redo = [];
|
|
@@ -129,4 +129,4 @@ export function createV3AuthoringSession(document, initialInputs) {
|
|
|
129
129
|
}
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
//# sourceMappingURL=
|
|
132
|
+
//# sourceMappingURL=authoring-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring-session.js","sourceRoot":"","sources":["../src/authoring-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAgBlE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,0BAA0B,CAE1G"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Experimental capability contracts; eligibility is not collision or safety certification.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { CAPABILITY_NEEDS, FIGURE_CAPABILITIES } from "./
|
|
5
|
-
import {
|
|
2
|
+
import { compileFigureGraph as compile } from "./graph.js";
|
|
3
|
+
import { FigureContractError as ContractError } from "./contract.js";
|
|
4
|
+
import { CAPABILITY_NEEDS, FIGURE_CAPABILITIES } from "./words.js";
|
|
5
|
+
import { resolveFigureSurface, evaluateFigureSurface } from "./surface.js";
|
|
6
6
|
const fail = (code, path, message) => {
|
|
7
7
|
throw new ContractError(code, path, message);
|
|
8
8
|
};
|
|
@@ -20,7 +20,7 @@ const name = (s, path) => {
|
|
|
20
20
|
if (typeof s !== 'string' || !s.trim())
|
|
21
21
|
fail('SCHEMA', path, 'nonempty string required');
|
|
22
22
|
};
|
|
23
|
-
export function
|
|
23
|
+
export function compileFigureCapabilities(model, declaration) {
|
|
24
24
|
return compileInternal(model, declaration);
|
|
25
25
|
}
|
|
26
26
|
function compileInternal(model, declaration) {
|
|
@@ -57,7 +57,7 @@ function compileInternal(model, declaration) {
|
|
|
57
57
|
if (t.kind !== 'transform' || t.to !== doc.assetFrame || (from !== undefined && t.from !== from))
|
|
58
58
|
fail('FRAME_TYPE', path, 'transform must map declared local frame to assetFrame');
|
|
59
59
|
};
|
|
60
|
-
const resolveSurface = (contact, path) =>
|
|
60
|
+
const resolveSurface = (contact, path) => resolveFigureSurface({ types, writers, model, assetFrame: doc.assetFrame }, contact, path);
|
|
61
61
|
const poses = new Map();
|
|
62
62
|
for (const b of doc.bindings) {
|
|
63
63
|
fields(b, ['id', 'label', 'role', 'frame', 'pose', 'accepts', 'capacity'], ['region', 'contacts'], 'binding');
|
|
@@ -113,7 +113,7 @@ function compileInternal(model, declaration) {
|
|
|
113
113
|
fields(requests, [], [...ids], 'requests');
|
|
114
114
|
// Entire result is produced atomically; a failed graph/binding cannot return partial success.
|
|
115
115
|
const result = graph.evaluate(input);
|
|
116
|
-
const evaluateSurface = (s) =>
|
|
116
|
+
const evaluateSurface = (s) => evaluateFigureSurface(result.values, s);
|
|
117
117
|
const bindings = doc.bindings.map((b) => {
|
|
118
118
|
let region = null;
|
|
119
119
|
if (b.region) {
|
|
@@ -170,4 +170,4 @@ function compileInternal(model, declaration) {
|
|
|
170
170
|
}
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
-
//# sourceMappingURL=
|
|
173
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Shared error boundary for the experimental runtime. */
|
|
2
|
+
export declare class FigureContractError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
readonly path: string;
|
|
5
|
+
constructor(code: string, path: string, detail: string);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMvD"}
|
package/dist/contract.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Shared error boundary for the experimental runtime. */
|
|
2
|
+
export class FigureContractError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
path;
|
|
5
|
+
constructor(code, path, detail) {
|
|
6
|
+
super(`${code}: ${path}: ${detail}`);
|
|
7
|
+
this.name = 'FigureContractError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.path = path;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAQ;IACZ,IAAI,CAAQ;IAErB,YAAY,IAAY,EAAE,IAAY,EAAE,MAAc;QACpD,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export interface
|
|
1
|
+
import type { FigureAsset, FigureAssetGeometry } from './asset-types.ts';
|
|
2
|
+
export interface FigureCost {
|
|
3
3
|
/** Estimated triangles for one instance, over the bodies that are drawn. */
|
|
4
4
|
triangles: number;
|
|
5
5
|
/** Draw groups: one per drawn body, which is what the renderer builds. */
|
|
@@ -8,7 +8,7 @@ export interface V3Cost {
|
|
|
8
8
|
hidden: number;
|
|
9
9
|
}
|
|
10
10
|
/** The triangles one drawn body costs. Unknown providers count as a box rather than as nothing. */
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function figureTrianglesOf(body: FigureAssetGeometry): number;
|
|
12
12
|
/** What one instance of this asset costs to draw. Evaluates the asset at its own design and state defaults. */
|
|
13
|
-
export declare function
|
|
14
|
-
//# sourceMappingURL=
|
|
13
|
+
export declare function figureCostOf(asset: FigureAsset): FigureCost;
|
|
14
|
+
//# sourceMappingURL=cost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAqCnE;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAU3D"}
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/*
|
|
5
|
-
* What a
|
|
5
|
+
* What a asset costs to draw, in the terms the catalogue already shows: triangles and draw groups.
|
|
6
6
|
*
|
|
7
7
|
* Read off the evaluated geometry with the renderer's formula, not a count of the vertex buffer, so a polygon's cap
|
|
8
8
|
* triangulation can differ.
|
|
9
9
|
*
|
|
10
10
|
* A body the asset hides is not drawn, so it costs nothing. It is still evaluated, placed and gated
|
|
11
|
-
* (
|
|
11
|
+
* (designer's ruling 2026-09-22); this counts what reaches the screen.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
import { SEGMENT_PRESETS } from "./
|
|
15
|
-
import {
|
|
13
|
+
import { figureRenderBatchesOf } from "./render-batches.js";
|
|
14
|
+
import { SEGMENT_PRESETS } from "./words.js";
|
|
15
|
+
import { compileFigureAsset } from "./asset.js";
|
|
16
16
|
const DEFAULT_SEGMENTS = 12;
|
|
17
17
|
/** The corner curve of a rounded outline, drawn with the same point count the renderer uses. */
|
|
18
18
|
const ROUND_OUTLINE_POINTS = 4 * SEGMENT_PRESETS[0] + 4;
|
|
19
19
|
/** The triangles one drawn body costs. Unknown providers count as a box rather than as nothing. */
|
|
20
|
-
export function
|
|
20
|
+
export function figureTrianglesOf(body) {
|
|
21
21
|
if (!('shape' in body))
|
|
22
22
|
return 0; // a scalar body carries no mesh
|
|
23
23
|
const shape = body.shape;
|
|
@@ -56,15 +56,15 @@ export function v3TrianglesOf(body) {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
/** What one instance of this asset costs to draw. Evaluates the asset at its own design and state defaults. */
|
|
59
|
-
export function
|
|
60
|
-
const geometry =
|
|
59
|
+
export function figureCostOf(asset) {
|
|
60
|
+
const geometry = compileFigureAsset(asset).evaluate().geometry;
|
|
61
61
|
const drawn = geometry.filter(body => body.visible !== false);
|
|
62
62
|
/* A draw group per batch of a row's copies and per body drawn alone: as the renderer draws them (ADR-0087 amended 2026-09-26). */
|
|
63
|
-
const plan =
|
|
63
|
+
const plan = figureRenderBatchesOf(drawn);
|
|
64
64
|
return {
|
|
65
|
-
triangles: drawn.reduce((sum, body) => sum +
|
|
65
|
+
triangles: drawn.reduce((sum, body) => sum + figureTrianglesOf(body), 0),
|
|
66
66
|
groups: plan.batches.length + plan.alone.length,
|
|
67
67
|
hidden: geometry.length - drawn.length
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=cost.js.map
|
package/dist/cost.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FigureAsset, FigureMaterial } from './asset-types.ts';
|
|
2
2
|
/** New assets start empty. A box is created only by an explicit authoring action. */
|
|
3
|
-
export declare function
|
|
4
|
-
export interface
|
|
3
|
+
export declare function createFigureAsset(name: string): FigureAsset;
|
|
4
|
+
export interface FigureBoxCreation {
|
|
5
5
|
id: string;
|
|
6
6
|
size: {
|
|
7
7
|
x: number;
|
|
@@ -18,9 +18,9 @@ export interface V3BoxCreation {
|
|
|
18
18
|
y: number;
|
|
19
19
|
z: number;
|
|
20
20
|
};
|
|
21
|
-
material?:
|
|
21
|
+
material?: FigureMaterial;
|
|
22
22
|
}
|
|
23
|
-
export type
|
|
23
|
+
export type FigurePrimitiveCreation = Omit<FigureBoxCreation, 'size'> & ({
|
|
24
24
|
kind: 'box';
|
|
25
25
|
dimensions: {
|
|
26
26
|
width: number;
|
|
@@ -96,7 +96,7 @@ export type V3PrimitiveCreation = Omit<V3BoxCreation, 'size'> & ({
|
|
|
96
96
|
z: number;
|
|
97
97
|
}>;
|
|
98
98
|
});
|
|
99
|
-
export declare function
|
|
99
|
+
export declare function addFigurePrimitive(source: FigureAsset, part: FigurePrimitiveCreation): FigureAsset;
|
|
100
100
|
/** Pure authoring operation. Expands to standard graph operators, not a second runtime geometry model. */
|
|
101
|
-
export declare function
|
|
102
|
-
//# sourceMappingURL=
|
|
101
|
+
export declare function addFigureBox(source: FigureAsset, box: FigureBoxCreation): FigureAsset;
|
|
102
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { compileFigureAsset } from "./asset.js";
|
|
2
|
+
import { FigureContractError } from "./contract.js";
|
|
3
3
|
/** New assets start empty. A box is created only by an explicit authoring action. */
|
|
4
|
-
export function
|
|
4
|
+
export function createFigureAsset(name) {
|
|
5
5
|
const asset = {
|
|
6
|
-
version: 'figure-
|
|
6
|
+
version: 'figure-asset-1',
|
|
7
7
|
name,
|
|
8
8
|
document: {
|
|
9
|
-
version: 'figure-
|
|
9
|
+
version: 'figure-prototype-1',
|
|
10
10
|
model: { version: 'r3-spatial-1', inputs: [], constants: [], nodes: [] },
|
|
11
11
|
capabilities: { version: 'r3-capability-3', assetFrame: 'asset', bindings: [] }
|
|
12
12
|
},
|
|
@@ -15,13 +15,13 @@ export function createV3Asset(name) {
|
|
|
15
15
|
palette: { 'palette.primary': '#477b9e' },
|
|
16
16
|
appearance: []
|
|
17
17
|
};
|
|
18
|
-
|
|
18
|
+
compileFigureAsset(asset);
|
|
19
19
|
return asset;
|
|
20
20
|
}
|
|
21
21
|
/** Authoring recipes use existing providers; they introduce no extra evaluation rules. */
|
|
22
22
|
/** The dimensions that are sizes: never below zero, so a bound can add them up without knowing their values. */
|
|
23
23
|
const MEASURES = new Set(['width', 'height', 'depth', 'jamb', 'head', 'roundX', 'roundZ', 'wallX', 'wallZ', 'floor', 'radius', 'length', 'round', 'radiusX', 'radiusY', 'radiusZ', 'radiusTop', 'radiusBottom']);
|
|
24
|
-
export function
|
|
24
|
+
export function addFigurePrimitive(source, part) {
|
|
25
25
|
const recipes = {
|
|
26
26
|
box: { op: 'box-shape@1', keys: ['width', 'height', 'depth'] },
|
|
27
27
|
cylinder: { op: 'cylinder-shape@1', keys: ['radius', 'length'] },
|
|
@@ -33,13 +33,13 @@ export function addV3Primitive(source, part) {
|
|
|
33
33
|
polygon: { op: 'polygon-shape@1', keys: ['height'] }
|
|
34
34
|
};
|
|
35
35
|
if (!part || !Object.hasOwn(recipes, part.kind))
|
|
36
|
-
throw new
|
|
36
|
+
throw new FigureContractError('PROVIDER', 'part', 'unknown primitive');
|
|
37
37
|
const recipe = recipes[part.kind];
|
|
38
38
|
if (!part.dimensions ||
|
|
39
39
|
Object.keys(part.dimensions).length !== recipe.keys.length ||
|
|
40
40
|
recipe.keys.some(k => !Object.hasOwn(part.dimensions, k)))
|
|
41
|
-
throw new
|
|
42
|
-
const asset =
|
|
41
|
+
throw new FigureContractError('SCHEMA', part.id, 'provider dimensions must match declared fields');
|
|
42
|
+
const asset = addFigureBox(source, {
|
|
43
43
|
id: part.id,
|
|
44
44
|
size: { x: 1, y: 1, z: 1 },
|
|
45
45
|
position: part.position,
|
|
@@ -61,13 +61,13 @@ export function addV3Primitive(source, part) {
|
|
|
61
61
|
for (const key of recipe.keys) {
|
|
62
62
|
const id = part.id + '.dimension.' + key, value = part.dimensions[key];
|
|
63
63
|
if (existing.has(id))
|
|
64
|
-
throw new
|
|
64
|
+
throw new FigureContractError('DUPLICATE_WRITER', id, 'input already exists');
|
|
65
65
|
if (!Number.isFinite(value))
|
|
66
|
-
throw new
|
|
66
|
+
throw new FigureContractError('NON_FINITE', id, 'finite dimension required');
|
|
67
67
|
/* A size is never below zero. */
|
|
68
68
|
const min = MEASURES.has(key) ? 0 : -Number.MAX_VALUE;
|
|
69
69
|
if (value < min)
|
|
70
|
-
throw new
|
|
70
|
+
throw new FigureContractError('SCHEMA', id, `${key} is a size, zero or more`);
|
|
71
71
|
model.inputs.push({ id, unit: 'mm', min, max: Number.MAX_VALUE, role: 'design' });
|
|
72
72
|
asset.designInputs[id] = value;
|
|
73
73
|
shape.args.push(id);
|
|
@@ -76,14 +76,14 @@ export function addV3Primitive(source, part) {
|
|
|
76
76
|
if (part.kind === 'polygon') {
|
|
77
77
|
const points = Array.isArray(part.points) ? part.points : [];
|
|
78
78
|
if (points.length < 3)
|
|
79
|
-
throw new
|
|
79
|
+
throw new FigureContractError('SCHEMA', part.id, 'a polygon has at least three corners');
|
|
80
80
|
points.forEach((point, i) => {
|
|
81
81
|
for (const axis of ['x', 'z']) {
|
|
82
82
|
const id = `${part.id}.corner.${i}.${axis}`, value = point?.[axis];
|
|
83
83
|
if (existing.has(id))
|
|
84
|
-
throw new
|
|
84
|
+
throw new FigureContractError('DUPLICATE_WRITER', id, 'input already exists');
|
|
85
85
|
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
86
|
-
throw new
|
|
86
|
+
throw new FigureContractError('NON_FINITE', id, 'finite corner required');
|
|
87
87
|
model.inputs.push({ id, unit: 'mm', min: -Number.MAX_VALUE, max: Number.MAX_VALUE, role: 'design' });
|
|
88
88
|
asset.designInputs[id] = value;
|
|
89
89
|
shape.args.push(id);
|
|
@@ -91,19 +91,19 @@ export function addV3Primitive(source, part) {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
else if (part.points !== undefined)
|
|
94
|
-
throw new
|
|
94
|
+
throw new FigureContractError('SCHEMA', part.id, 'only a polygon has corners');
|
|
95
95
|
if (part.kind === 'cylinder')
|
|
96
96
|
asset.appearance.find(a => a.target === part.id).segments = 12;
|
|
97
97
|
if (part.kind === 'sphere' || part.kind === 'frustum')
|
|
98
98
|
asset.appearance.find(a => a.target === part.id).segments = 16;
|
|
99
|
-
|
|
99
|
+
compileFigureAsset(asset);
|
|
100
100
|
return asset;
|
|
101
101
|
}
|
|
102
102
|
/** Pure authoring operation. Expands to standard graph operators, not a second runtime geometry model. */
|
|
103
|
-
export function
|
|
104
|
-
|
|
103
|
+
export function addFigureBox(source, box) {
|
|
104
|
+
compileFigureAsset(source);
|
|
105
105
|
if (!box || typeof box.id !== 'string' || !/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(box.id)) {
|
|
106
|
-
throw new
|
|
106
|
+
throw new FigureContractError('ID', 'box', 'letter-led part ID required');
|
|
107
107
|
}
|
|
108
108
|
const asset = structuredClone(source), model = asset.document.model, prefix = box.id;
|
|
109
109
|
const keys = [
|
|
@@ -132,16 +132,16 @@ export function addV3Box(source, box) {
|
|
|
132
132
|
...model.nodes.flatMap(n => [n.id, ...Object.values(n.outputs)])
|
|
133
133
|
];
|
|
134
134
|
if (existing.some(id => reserved.has(id)))
|
|
135
|
-
throw new
|
|
135
|
+
throw new FigureContractError('DUPLICATE_PART', prefix, 'part IDs overlap existing graph identifiers');
|
|
136
136
|
const rotation = box.rotation ?? { x: 0, y: 0, z: 0 };
|
|
137
137
|
for (const group of ['size', 'position', 'rotation']) {
|
|
138
138
|
const values = group === 'rotation' ? rotation : box[group];
|
|
139
139
|
if (!values || Object.keys(values).length !== 3)
|
|
140
|
-
throw new
|
|
140
|
+
throw new FigureContractError('SCHEMA', prefix, `${group} requires x, y, z`);
|
|
141
141
|
for (const axis of ['x', 'y', 'z']) {
|
|
142
142
|
const value = values[axis];
|
|
143
143
|
if (!Number.isFinite(value) || (group === 'size' && value <= 0))
|
|
144
|
-
throw new
|
|
144
|
+
throw new FigureContractError('GEOMETRY_DOMAIN', `${prefix}.${group}.${axis}`, 'finite value and positive size required');
|
|
145
145
|
const id = `${prefix}.${group}.${axis}`;
|
|
146
146
|
// These are broad authoring limits, not a rendering safety/performance guarantee.
|
|
147
147
|
model.inputs.push({
|
|
@@ -174,7 +174,7 @@ export function addV3Box(source, box) {
|
|
|
174
174
|
outputs: { placed: `${prefix}.placed` }
|
|
175
175
|
});
|
|
176
176
|
asset.appearance.push({ target: prefix, material: structuredClone(box.material ?? { token: 'palette.primary' }) });
|
|
177
|
-
|
|
177
|
+
compileFigureAsset(asset);
|
|
178
178
|
return asset;
|
|
179
179
|
}
|
|
180
|
-
//# sourceMappingURL=
|
|
180
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FigureDocument, FigureCompiledCapabilities } from './asset-types.ts';
|
|
2
|
+
export declare function compileFigureDocument(source: unknown): FigureCompiledCapabilities;
|
|
3
|
+
export declare function serializeFigureDocument(doc: unknown): string;
|
|
4
|
+
export declare function parseFigureDocument(text: string): FigureDocument;
|
|
5
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAElF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,0BAA0B,CAmBjF;AACD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAG5D;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAIhE"}
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { compileFigureCapabilities } from "./capabilities.js";
|
|
2
|
+
import { FigureContractError } from "./contract.js";
|
|
3
|
+
import { assertFigureJson, parseFigureJson, FIGURE_JSON_MAX_BYTES, figureUtf8ByteLength } from "./json.js";
|
|
4
|
+
export function compileFigureDocument(source) {
|
|
5
|
+
assertFigureJson(source);
|
|
6
|
+
if (!source ||
|
|
7
|
+
Array.isArray(source) ||
|
|
8
|
+
typeof source !== 'object' ||
|
|
9
|
+
Object.keys(source).length !== 3 ||
|
|
10
|
+
!['version', 'model', 'capabilities'].every(k => Object.hasOwn(source, k))) {
|
|
11
|
+
throw new FigureContractError('SCHEMA', 'document', 'expected version, model, capabilities only');
|
|
12
|
+
}
|
|
13
|
+
if (source.version !== 'figure-prototype-1')
|
|
14
|
+
throw new FigureContractError('VERSION', 'document', 'unsupported document version');
|
|
15
|
+
if (figureUtf8ByteLength(JSON.stringify(source)) > FIGURE_JSON_MAX_BYTES)
|
|
16
|
+
throw new FigureContractError('DOCUMENT_LIMIT', 'document', 'over 1 MiB');
|
|
17
|
+
const doc = source;
|
|
18
|
+
if (!Array.isArray(doc.model?.nodes) || doc.model.nodes.length > 512)
|
|
19
|
+
throw new FigureContractError('DOCUMENT_LIMIT', 'document', 'maximum 512 nodes');
|
|
20
|
+
return compileFigureCapabilities(doc.model, doc.capabilities);
|
|
21
|
+
}
|
|
22
|
+
export function serializeFigureDocument(doc) {
|
|
23
|
+
compileFigureDocument(doc);
|
|
24
|
+
return JSON.stringify(doc);
|
|
25
|
+
}
|
|
26
|
+
export function parseFigureDocument(text) {
|
|
27
|
+
const doc = parseFigureJson(text);
|
|
28
|
+
compileFigureDocument(doc);
|
|
29
|
+
return doc;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAG1G,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACxB,IACE,CAAC,MAAM;QACP,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrB,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,4CAA4C,CAAC,CAAA;IACnG,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,oBAAoB;QACzC,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,8BAA8B,CAAC,CAAA;IACtF,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,qBAAqB;QACtE,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IAC3E,MAAM,GAAG,GAAG,MAAmC,CAAA;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;QAClE,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAA;IAClF,OAAO,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;AAC/D,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAClD,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACjC,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,GAAgC,CAAA;AACzC,CAAC"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
/** Refuses a driver list the contract does not allow. Called by `
|
|
3
|
-
export declare function
|
|
1
|
+
import type { FigureAsset, FigureDriver, FigureStateInputPolicy } from './asset-types.ts';
|
|
2
|
+
/** Refuses a driver list the contract does not allow. Called by `compileFigureAsset`. */
|
|
3
|
+
export declare function validateFigureDrivers(asset: FigureAsset): void;
|
|
4
4
|
/** Wraps an angle into [-half, half) for the unit: half is 180 for degrees, π for radians. */
|
|
5
5
|
export declare function normalisePhase(value: number, unit: 'deg' | 'rad'): number;
|
|
6
6
|
/**
|
|
7
7
|
* The state value a driver writes at a time in seconds. Time before 0 reads as 0.
|
|
8
8
|
* Interpolation first, then the loop, then (for an accumulating driver) the phase. Never the other order.
|
|
9
9
|
*/
|
|
10
|
-
export declare function driverValue(driver:
|
|
10
|
+
export declare function driverValue(driver: FigureDriver, timeSeconds: number, unit?: 'deg' | 'rad' | 'other'): number;
|
|
11
11
|
/**
|
|
12
12
|
* Every driven state at one time, ready to pass as state overrides. The consumer chooses, per state, whether
|
|
13
13
|
* the driver or an external input is the active control source; this returns the drivers' side only.
|
|
14
14
|
*/
|
|
15
|
-
export declare function driverStates(asset:
|
|
16
|
-
/** Refuses a `stateInputs` map the contract does not allow. Called by `
|
|
17
|
-
export declare function
|
|
15
|
+
export declare function driverStates(asset: FigureAsset, timeSeconds: number): Record<string, number>;
|
|
16
|
+
/** Refuses a `stateInputs` map the contract does not allow. Called by `compileFigureAsset`. */
|
|
17
|
+
export declare function validateFigureStateInputs(asset: FigureAsset): void;
|
|
18
18
|
/**
|
|
19
|
-
* One step of a state value toward a target (
|
|
19
|
+
* One step of a state value toward a target (designer's ruling 2026-09-22).
|
|
20
20
|
*
|
|
21
21
|
* The rule lives here, not in each consumer: the renderer, a thumbnail and a test all call this. Straight
|
|
22
22
|
* line, no easing — the whole range of the input takes `sweep` seconds, so a half-range move takes half
|
|
@@ -35,5 +35,5 @@ export declare function advanceStateValue(current: number, target: number, input
|
|
|
35
35
|
sweep?: number;
|
|
36
36
|
}, dtSeconds: number): number;
|
|
37
37
|
/** The policy for one state input, or an empty one. */
|
|
38
|
-
export declare function stateInputPolicy(asset:
|
|
39
|
-
//# sourceMappingURL=
|
|
38
|
+
export declare function stateInputPolicy(asset: FigureAsset, id: string): FigureStateInputPolicy;
|
|
39
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAWzF,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CA4C9D;AAiBD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAKzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,KAAK,GAAG,OAAiB,GAAG,MAAM,CAqBtH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5F;AAED,+FAA+F;AAC/F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAelE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,SAAS,EAAE,MAAM,GAChB,MAAM,CAWR;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,sBAAsB,CAEvF"}
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/*
|
|
5
|
-
* Drivers: time → state value (docs/
|
|
5
|
+
* Drivers: time → state value (docs/motion-contract.md).
|
|
6
6
|
*
|
|
7
7
|
* This is the one place interpolation, looping and phase normalisation are written. things-scene, a thumbnail
|
|
8
8
|
* renderer and a test all call `driverValue`; none of them reimplements it. The kernel itself never reads time:
|
|
9
|
-
* the consumer takes the value this returns and passes it as a state override to `
|
|
9
|
+
* the consumer takes the value this returns and passes it as a state override to `compileFigureAsset(...).evaluate`.
|
|
10
10
|
*
|
|
11
11
|
* Continuous rotation is two numbers, an accumulated angle and a phase. Keys hold the accumulated angle; the
|
|
12
12
|
* interpolation happens on it; only then is the result wrapped into [-180°, 180°) for the kernel. Wrapping the
|
|
13
13
|
* keys first would make 350° → 370° turn the wrong way.
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { FigureContractError } from "./contract.js";
|
|
16
16
|
const fail = (code, path, detail) => {
|
|
17
|
-
throw new
|
|
17
|
+
throw new FigureContractError(code, path, detail);
|
|
18
18
|
};
|
|
19
19
|
/** The inputs a driver may write, with their units: the asset's state inputs. */
|
|
20
20
|
function stateUnits(asset) {
|
|
21
21
|
return new Map(asset.document.model.inputs.filter(i => i.role === 'state').map(i => [i.id, i.unit]));
|
|
22
22
|
}
|
|
23
|
-
/** Refuses a driver list the contract does not allow. Called by `
|
|
24
|
-
export function
|
|
23
|
+
/** Refuses a driver list the contract does not allow. Called by `compileFigureAsset`. */
|
|
24
|
+
export function validateFigureDrivers(asset) {
|
|
25
25
|
const drivers = asset.drivers;
|
|
26
26
|
if (drivers === undefined)
|
|
27
27
|
return;
|
|
@@ -150,8 +150,8 @@ export function driverStates(asset, timeSeconds) {
|
|
|
150
150
|
}
|
|
151
151
|
return out;
|
|
152
152
|
}
|
|
153
|
-
/** Refuses a `stateInputs` map the contract does not allow. Called by `
|
|
154
|
-
export function
|
|
153
|
+
/** Refuses a `stateInputs` map the contract does not allow. Called by `compileFigureAsset`. */
|
|
154
|
+
export function validateFigureStateInputs(asset) {
|
|
155
155
|
const policies = asset.stateInputs;
|
|
156
156
|
if (policies === undefined)
|
|
157
157
|
return;
|
|
@@ -174,7 +174,7 @@ export function validateV3StateInputs(asset) {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
/**
|
|
177
|
-
* One step of a state value toward a target (
|
|
177
|
+
* One step of a state value toward a target (designer's ruling 2026-09-22).
|
|
178
178
|
*
|
|
179
179
|
* The rule lives here, not in each consumer: the renderer, a thumbnail and a test all call this. Straight
|
|
180
180
|
* line, no easing — the whole range of the input takes `sweep` seconds, so a half-range move takes half
|
|
@@ -208,4 +208,4 @@ export function advanceStateValue(current, target, input, dtSeconds) {
|
|
|
208
208
|
export function stateInputPolicy(asset, id) {
|
|
209
209
|
return asset.stateInputs?.[id] ?? {};
|
|
210
210
|
}
|
|
211
|
-
//# sourceMappingURL=
|
|
211
|
+
//# sourceMappingURL=driver.js.map
|