@hatiolab/figure-model 0.1.91 → 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.
Files changed (296) hide show
  1. package/CHANGELOG.md +12 -12
  2. package/README.md +25 -25
  3. package/dist/{v3-asset-types.d.ts → asset-types.d.ts} +67 -67
  4. package/dist/asset-types.d.ts.map +1 -0
  5. package/dist/asset-types.js +2 -0
  6. package/dist/asset-types.js.map +1 -0
  7. package/dist/asset.d.ts +8 -0
  8. package/dist/asset.d.ts.map +1 -0
  9. package/dist/{v3-asset.js → asset.js} +23 -23
  10. package/dist/asset.js.map +1 -0
  11. package/dist/{v3-authoring-actions.d.ts → authoring-actions.d.ts} +66 -66
  12. package/dist/authoring-actions.d.ts.map +1 -0
  13. package/dist/{v3-authoring-actions.js → authoring-actions.js} +107 -78
  14. package/dist/authoring-actions.js.map +1 -0
  15. package/dist/{v3-authoring-session.d.ts → authoring-session.d.ts} +21 -21
  16. package/dist/authoring-session.d.ts.map +1 -0
  17. package/dist/{v3-authoring-session.js → authoring-session.js} +4 -4
  18. package/dist/authoring-session.js.map +1 -0
  19. package/dist/capabilities.d.ts +3 -0
  20. package/dist/capabilities.d.ts.map +1 -0
  21. package/dist/{v3-capabilities.js → capabilities.js} +8 -8
  22. package/dist/capabilities.js.map +1 -0
  23. package/dist/contract.d.ts +7 -0
  24. package/dist/contract.d.ts.map +1 -0
  25. package/dist/contract.js +12 -0
  26. package/dist/contract.js.map +1 -0
  27. package/dist/{v3-cost.d.ts → cost.d.ts} +5 -5
  28. package/dist/cost.d.ts.map +1 -0
  29. package/dist/{v3-cost.js → cost.js} +11 -11
  30. package/dist/cost.js.map +1 -0
  31. package/dist/{v3-create.d.ts → create.d.ts} +8 -8
  32. package/dist/{v3-create.d.ts.map → create.d.ts.map} +1 -1
  33. package/dist/{v3-create.js → create.js} +26 -26
  34. package/dist/create.js.map +1 -0
  35. package/dist/document.d.ts +5 -0
  36. package/dist/document.d.ts.map +1 -0
  37. package/dist/document.js +31 -0
  38. package/dist/document.js.map +1 -0
  39. package/dist/{v3-driver.d.ts → driver.d.ts} +10 -10
  40. package/dist/driver.d.ts.map +1 -0
  41. package/dist/{v3-driver.js → driver.js} +10 -10
  42. package/dist/driver.js.map +1 -0
  43. package/dist/{v3-editor-workspace.d.ts → editor-workspace.d.ts} +73 -73
  44. package/dist/editor-workspace.d.ts.map +1 -0
  45. package/dist/{v3-editor-workspace.js → editor-workspace.js} +29 -29
  46. package/dist/editor-workspace.js.map +1 -0
  47. package/dist/{v3-examples.d.ts → examples.d.ts} +5 -5
  48. package/dist/examples.d.ts.map +1 -0
  49. package/dist/{v3-examples.js → examples.js} +11 -11
  50. package/dist/examples.js.map +1 -0
  51. package/dist/{v3-follow.d.ts → follow.d.ts} +5 -5
  52. package/dist/follow.d.ts.map +1 -0
  53. package/dist/{v3-follow.js → follow.js} +2 -2
  54. package/dist/follow.js.map +1 -0
  55. package/dist/{v3-gate.d.ts → gate.d.ts} +28 -28
  56. package/dist/gate.d.ts.map +1 -0
  57. package/dist/{v3-gate.js → gate.js} +42 -42
  58. package/dist/gate.js.map +1 -0
  59. package/dist/{v3-graph-types.d.ts → graph-types.d.ts} +33 -33
  60. package/dist/graph-types.d.ts.map +1 -0
  61. package/dist/graph-types.js +2 -0
  62. package/dist/graph-types.js.map +1 -0
  63. package/dist/{v3-graph.d.ts → graph.d.ts} +14 -14
  64. package/dist/graph.d.ts.map +1 -0
  65. package/dist/{v3-graph.js → graph.js} +16 -16
  66. package/dist/graph.js.map +1 -0
  67. package/dist/index.d.ts +33 -33
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +33 -33
  70. package/dist/index.js.map +1 -1
  71. package/dist/{v3-instance-size.d.ts → instance-size.d.ts} +14 -14
  72. package/dist/instance-size.d.ts.map +1 -0
  73. package/dist/{v3-instance-size.js → instance-size.js} +13 -13
  74. package/dist/instance-size.js.map +1 -0
  75. package/dist/json.d.ts +12 -0
  76. package/dist/json.d.ts.map +1 -0
  77. package/dist/{v3-json.js → json.js} +13 -13
  78. package/dist/json.js.map +1 -0
  79. package/dist/kernel-version.d.ts +8 -0
  80. package/dist/kernel-version.d.ts.map +1 -0
  81. package/dist/{v3-kernel-version.js → kernel-version.js} +4 -4
  82. package/dist/kernel-version.js.map +1 -0
  83. package/dist/{v3-part-edit.d.ts → part-edit.d.ts} +10 -10
  84. package/dist/part-edit.d.ts.map +1 -0
  85. package/dist/{v3-part-edit.js → part-edit.js} +65 -65
  86. package/dist/part-edit.js.map +1 -0
  87. package/dist/proposal.d.ts +42 -0
  88. package/dist/proposal.d.ts.map +1 -0
  89. package/dist/{v3-proposal.js → proposal.js} +21 -21
  90. package/dist/proposal.js.map +1 -0
  91. package/dist/{v3-public-inputs.d.ts → public-inputs.d.ts} +4 -4
  92. package/dist/public-inputs.d.ts.map +1 -0
  93. package/dist/{v3-public-inputs.js → public-inputs.js} +3 -3
  94. package/dist/public-inputs.js.map +1 -0
  95. package/dist/recipe-build.d.ts +27 -0
  96. package/dist/recipe-build.d.ts.map +1 -0
  97. package/dist/{v3-recipe-build.js → recipe-build.js} +9 -9
  98. package/dist/recipe-build.js.map +1 -0
  99. package/dist/recipe-from-parts.d.ts +8 -0
  100. package/dist/recipe-from-parts.d.ts.map +1 -0
  101. package/dist/{v3-recipe-from-parts.js → recipe-from-parts.js} +9 -9
  102. package/dist/recipe-from-parts.js.map +1 -0
  103. package/dist/{v3-recipe.d.ts → recipe.d.ts} +25 -25
  104. package/dist/recipe.d.ts.map +1 -0
  105. package/dist/{v3-recipe.js → recipe.js} +30 -30
  106. package/dist/recipe.js.map +1 -0
  107. package/dist/release-contract.d.ts +19 -0
  108. package/dist/release-contract.d.ts.map +1 -0
  109. package/dist/{v3-release-contract.js → release-contract.js} +5 -5
  110. package/dist/release-contract.js.map +1 -0
  111. package/dist/{v3-render-batches.d.ts → render-batches.d.ts} +8 -8
  112. package/dist/render-batches.d.ts.map +1 -0
  113. package/dist/{v3-render-batches.js → render-batches.js} +4 -4
  114. package/dist/render-batches.js.map +1 -0
  115. package/dist/{v3-score.d.ts → score.d.ts} +19 -19
  116. package/dist/score.d.ts.map +1 -0
  117. package/dist/{v3-score.js → score.js} +32 -32
  118. package/dist/score.js.map +1 -0
  119. package/dist/{v3-shape-sampling.d.ts → shape-sampling.d.ts} +4 -4
  120. package/dist/shape-sampling.d.ts.map +1 -0
  121. package/dist/{v3-shape-sampling.js → shape-sampling.js} +3 -3
  122. package/dist/shape-sampling.js.map +1 -0
  123. package/dist/{v3-surface.d.ts → surface.d.ts} +5 -5
  124. package/dist/surface.d.ts.map +1 -0
  125. package/dist/{v3-surface.js → surface.js} +7 -7
  126. package/dist/surface.js.map +1 -0
  127. package/dist/{v3-words.d.ts → words.d.ts} +3 -3
  128. package/dist/words.d.ts.map +1 -0
  129. package/dist/{v3-words.js → words.js} +3 -3
  130. package/dist/words.js.map +1 -0
  131. package/docs/{assembly-constraints-v3.md → assembly-constraints.md} +1 -1
  132. package/docs/{v3-asset-persistence.md → asset-persistence.md} +8 -8
  133. package/docs/{v3-authoring-transactions.md → authoring-transactions.md} +2 -2
  134. package/docs/{v3-capability-bindings.md → capability-bindings.md} +8 -8
  135. package/docs/{v3-common-kernel-experiment.md → common-kernel-experiment.md} +4 -4
  136. package/docs/{v3-core-semantics.md → core-semantics.md} +5 -5
  137. package/docs/{v3-cutover.md → cutover.md} +4 -4
  138. package/docs/{v3-design.md → design.md} +11 -11
  139. package/docs/{v3-document-contract.md → document-contract.md} +9 -9
  140. package/docs/{v3-dryroom-profile-validation.md → dryroom-profile-validation.md} +4 -4
  141. package/docs/{v3-editor-integration.md → editor-integration.md} +6 -6
  142. package/docs/{v3-full-conveyor-validation.md → full-conveyor-validation.md} +4 -4
  143. package/docs/{v3-full-dryroom-validation.md → full-dryroom-validation.md} +4 -4
  144. package/docs/{v3-full-forklift-validation.md → full-forklift-validation.md} +5 -5
  145. package/docs/{v3-full-robot-validation.md → full-robot-validation.md} +4 -4
  146. package/docs/{v3-layout-system.md → layout-system.md} +4 -4
  147. package/docs/{v3-legacy-risk-audit-2026-09-23.md → legacy-risk-audit-2026-09-23.md} +5 -5
  148. package/docs/{v3-minimal-model.md → minimal-model.md} +6 -6
  149. package/docs/{v3-motion-contract.md → motion-contract.md} +3 -3
  150. package/docs/{v3-openusd-review.md → openusd-review.md} +8 -8
  151. package/docs/{v3-operator-contracts.md → operator-contracts.md} +6 -6
  152. package/docs/{v3-payload-collision-validation.md → payload-collision-validation.md} +4 -4
  153. package/docs/{v3-payload-contact-validation.md → payload-contact-validation.md} +5 -5
  154. package/docs/prototypes/README.md +10 -10
  155. package/docs/prototypes/{v3-asset-samples.mjs → asset-samples.mjs} +6 -6
  156. package/docs/prototypes/{v3-asset-store.mjs → asset-store.mjs} +3 -3
  157. package/docs/prototypes/{v3-asset-store.test.mjs → asset-store.test.mjs} +6 -6
  158. package/docs/prototypes/asset.mjs +1 -0
  159. package/docs/prototypes/{v3-asset.schema.json → asset.schema.json} +2 -2
  160. package/docs/prototypes/{v3-asset.test.mjs → asset.test.mjs} +10 -10
  161. package/docs/prototypes/authoring-session.mjs +1 -0
  162. package/docs/prototypes/{v3-authoring-session.test.mjs → authoring-session.test.mjs} +6 -6
  163. package/docs/prototypes/capability-plan.mjs +1 -0
  164. package/docs/prototypes/{v3-capability-plan.test.mjs → capability-plan.test.mjs} +5 -5
  165. package/docs/prototypes/{v3-capability-samples.mjs → capability-samples.mjs} +2 -2
  166. package/docs/prototypes/document.mjs +2 -0
  167. package/docs/prototypes/{v3-document.schema.json → document.schema.json} +1 -1
  168. package/docs/prototypes/{v3-document.test.mjs → document.test.mjs} +7 -7
  169. package/docs/prototypes/{v3-dryroom-mesh.mjs → dryroom-mesh.mjs} +1 -1
  170. package/docs/prototypes/{v3-dryroom-mesh.test.mjs → dryroom-mesh.test.mjs} +1 -1
  171. package/docs/prototypes/{v3-editor-browser.mjs → editor-browser.mjs} +13 -13
  172. package/docs/prototypes/editor-workspace.mjs +1 -0
  173. package/docs/prototypes/{v3-editor-workspace.test.mjs → editor-workspace.test.mjs} +3 -3
  174. package/docs/prototypes/{v3-feature-pattern.test.mjs → feature-pattern.test.mjs} +1 -1
  175. package/docs/prototypes/{v3-full-conveyor.mjs → full-conveyor.mjs} +2 -2
  176. package/docs/prototypes/{v3-full-conveyor.test.mjs → full-conveyor.test.mjs} +3 -3
  177. package/docs/prototypes/{v3-full-dryroom.mjs → full-dryroom.mjs} +2 -2
  178. package/docs/prototypes/{v3-full-dryroom.test.mjs → full-dryroom.test.mjs} +3 -3
  179. package/docs/prototypes/{v3-full-forklift.mjs → full-forklift.mjs} +2 -2
  180. package/docs/prototypes/{v3-full-forklift.test.mjs → full-forklift.test.mjs} +3 -3
  181. package/docs/prototypes/{v3-full-robot.mjs → full-robot.mjs} +2 -2
  182. package/docs/prototypes/{v3-full-robot.test.mjs → full-robot.test.mjs} +4 -4
  183. package/docs/prototypes/{v3-kernel.test.mjs → kernel.test.mjs} +1 -1
  184. package/docs/prototypes/{v3-layout.test.mjs → layout.test.mjs} +1 -1
  185. package/docs/prototypes/{v3-more-samples.test.mjs → more-samples.test.mjs} +2 -2
  186. package/docs/prototypes/{v3-payload-collision.mjs → payload-collision.mjs} +2 -2
  187. package/docs/prototypes/{v3-payload-collision.test.mjs → payload-collision.test.mjs} +3 -3
  188. package/docs/prototypes/{v3-payload-fit.mjs → payload-fit.mjs} +2 -2
  189. package/docs/prototypes/{v3-payload-fit.test.mjs → payload-fit.test.mjs} +4 -4
  190. package/docs/prototypes/render-full-dryroom.mjs +12 -12
  191. package/docs/prototypes/{v3-repeated-binding.mjs → repeated-binding.mjs} +1 -1
  192. package/docs/prototypes/{v3-repeated-binding.test.mjs → repeated-binding.test.mjs} +6 -6
  193. package/docs/prototypes/{v3-runtime-browser.mjs → runtime-browser.mjs} +26 -26
  194. package/docs/prototypes/{v3-samples.test.mjs → samples.test.mjs} +1 -1
  195. package/docs/prototypes/{v3-spatial-plan.test.mjs → spatial-plan.test.mjs} +1 -1
  196. package/docs/prototypes/typed-plan.mjs +3 -0
  197. package/docs/prototypes/{v3-typed-plan.test.mjs → typed-plan.test.mjs} +1 -1
  198. package/docs/prototypes/{v3-typed-repeat.test.mjs → typed-repeat.test.mjs} +2 -2
  199. package/docs/{v3-repeated-binding-validation.md → repeated-binding-validation.md} +4 -4
  200. package/docs/{v3-research-review.md → research-review.md} +2 -2
  201. package/docs/{v3-review-2026-09-22.md → review-2026-09-22.md} +10 -10
  202. package/docs/{v3-runtime-extraction.md → runtime-extraction.md} +16 -16
  203. package/docs/{v3-sample-validation-expanded.md → sample-validation-expanded.md} +5 -5
  204. package/docs/{v3-sample-validation.md → sample-validation.md} +3 -3
  205. package/docs/{v3-shape-dimension-contract.md → shape-dimension-contract.md} +12 -12
  206. package/docs/{v3-shapeassembly-reproduction.md → shapeassembly-reproduction.md} +4 -4
  207. package/docs/{v3-spatial-contracts.md → spatial-contracts.md} +5 -5
  208. package/docs/status.md +12 -0
  209. package/docs/{v3-storage-integration.md → storage-integration.md} +5 -5
  210. package/docs/{v3-typed-repeat-contracts.md → typed-repeat-contracts.md} +3 -3
  211. package/package.json +3 -3
  212. package/dist/v3-asset-types.d.ts.map +0 -1
  213. package/dist/v3-asset-types.js +0 -2
  214. package/dist/v3-asset-types.js.map +0 -1
  215. package/dist/v3-asset.d.ts +0 -8
  216. package/dist/v3-asset.d.ts.map +0 -1
  217. package/dist/v3-asset.js.map +0 -1
  218. package/dist/v3-authoring-actions.d.ts.map +0 -1
  219. package/dist/v3-authoring-actions.js.map +0 -1
  220. package/dist/v3-authoring-session.d.ts.map +0 -1
  221. package/dist/v3-authoring-session.js.map +0 -1
  222. package/dist/v3-capabilities.d.ts +0 -3
  223. package/dist/v3-capabilities.d.ts.map +0 -1
  224. package/dist/v3-capabilities.js.map +0 -1
  225. package/dist/v3-contract.d.ts +0 -7
  226. package/dist/v3-contract.d.ts.map +0 -1
  227. package/dist/v3-contract.js +0 -12
  228. package/dist/v3-contract.js.map +0 -1
  229. package/dist/v3-cost.d.ts.map +0 -1
  230. package/dist/v3-cost.js.map +0 -1
  231. package/dist/v3-create.js.map +0 -1
  232. package/dist/v3-document.d.ts +0 -5
  233. package/dist/v3-document.d.ts.map +0 -1
  234. package/dist/v3-document.js +0 -31
  235. package/dist/v3-document.js.map +0 -1
  236. package/dist/v3-driver.d.ts.map +0 -1
  237. package/dist/v3-driver.js.map +0 -1
  238. package/dist/v3-editor-workspace.d.ts.map +0 -1
  239. package/dist/v3-editor-workspace.js.map +0 -1
  240. package/dist/v3-examples.d.ts.map +0 -1
  241. package/dist/v3-examples.js.map +0 -1
  242. package/dist/v3-follow.d.ts.map +0 -1
  243. package/dist/v3-follow.js.map +0 -1
  244. package/dist/v3-gate.d.ts.map +0 -1
  245. package/dist/v3-gate.js.map +0 -1
  246. package/dist/v3-graph-types.d.ts.map +0 -1
  247. package/dist/v3-graph-types.js +0 -2
  248. package/dist/v3-graph-types.js.map +0 -1
  249. package/dist/v3-graph.d.ts.map +0 -1
  250. package/dist/v3-graph.js.map +0 -1
  251. package/dist/v3-instance-size.d.ts.map +0 -1
  252. package/dist/v3-instance-size.js.map +0 -1
  253. package/dist/v3-json.d.ts +0 -12
  254. package/dist/v3-json.d.ts.map +0 -1
  255. package/dist/v3-json.js.map +0 -1
  256. package/dist/v3-kernel-version.d.ts +0 -8
  257. package/dist/v3-kernel-version.d.ts.map +0 -1
  258. package/dist/v3-kernel-version.js.map +0 -1
  259. package/dist/v3-part-edit.d.ts.map +0 -1
  260. package/dist/v3-part-edit.js.map +0 -1
  261. package/dist/v3-proposal.d.ts +0 -42
  262. package/dist/v3-proposal.d.ts.map +0 -1
  263. package/dist/v3-proposal.js.map +0 -1
  264. package/dist/v3-public-inputs.d.ts.map +0 -1
  265. package/dist/v3-public-inputs.js.map +0 -1
  266. package/dist/v3-recipe-build.d.ts +0 -27
  267. package/dist/v3-recipe-build.d.ts.map +0 -1
  268. package/dist/v3-recipe-build.js.map +0 -1
  269. package/dist/v3-recipe-from-parts.d.ts +0 -8
  270. package/dist/v3-recipe-from-parts.d.ts.map +0 -1
  271. package/dist/v3-recipe-from-parts.js.map +0 -1
  272. package/dist/v3-recipe.d.ts.map +0 -1
  273. package/dist/v3-recipe.js.map +0 -1
  274. package/dist/v3-release-contract.d.ts +0 -19
  275. package/dist/v3-release-contract.d.ts.map +0 -1
  276. package/dist/v3-release-contract.js.map +0 -1
  277. package/dist/v3-render-batches.d.ts.map +0 -1
  278. package/dist/v3-render-batches.js.map +0 -1
  279. package/dist/v3-score.d.ts.map +0 -1
  280. package/dist/v3-score.js.map +0 -1
  281. package/dist/v3-shape-sampling.d.ts.map +0 -1
  282. package/dist/v3-shape-sampling.js.map +0 -1
  283. package/dist/v3-surface.d.ts.map +0 -1
  284. package/dist/v3-surface.js.map +0 -1
  285. package/dist/v3-words.d.ts.map +0 -1
  286. package/dist/v3-words.js.map +0 -1
  287. package/docs/prototypes/v3-asset.mjs +0 -1
  288. package/docs/prototypes/v3-authoring-session.mjs +0 -1
  289. package/docs/prototypes/v3-capability-plan.mjs +0 -1
  290. package/docs/prototypes/v3-document.mjs +0 -2
  291. package/docs/prototypes/v3-editor-workspace.mjs +0 -1
  292. package/docs/prototypes/v3-typed-plan.mjs +0 -3
  293. package/docs/v3-status.md +0 -50
  294. /package/docs/prototypes/{v3-kernel.mjs → kernel.mjs} +0 -0
  295. /package/docs/prototypes/{v3-linear-comparison.py → linear-comparison.py} +0 -0
  296. /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 { compileV3Document as compileDocument } from "./v3-document.js";
3
- import { V3ContractError as ContractError } from "./v3-contract.js";
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 createV3AuthoringSession(document, initialInputs) {
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=v3-authoring-session.js.map
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,3 @@
1
+ import type { FigureCompiledCapabilities } from './asset-types.ts';
2
+ export declare function compileFigureCapabilities(model: unknown, declaration: unknown): FigureCompiledCapabilities;
3
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -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 { compileV3Graph as compile } from "./v3-graph.js";
3
- import { V3ContractError as ContractError } from "./v3-contract.js";
4
- import { CAPABILITY_NEEDS, FIGURE_CAPABILITIES } from "./v3-words.js";
5
- import { resolveV3Surface, evaluateV3Surface } from "./v3-surface.js";
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 compileV3Capabilities(model, declaration) {
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) => resolveV3Surface({ types, writers, model, assetFrame: doc.assetFrame }, 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) => evaluateV3Surface(result.values, 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=v3-capabilities.js.map
173
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,eAAe,CAAA;AAEpE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAG1E,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe,EAAS,EAAE;IAClE,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAC9C,CAAC,CAAA;AACD,SAAS,MAAM,CAAC,CAAU,EAAE,QAAkB,EAAE,QAAkB,EAAE,IAAY;IAC9E,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAA;IAC5F,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAA;IACxF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAA;AACnH,CAAC;AACD,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,IAAY,EAAE,EAAE;IACxC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1F,CAAC,CAAA;AACD,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,WAAoB;IAC5E,OAAO,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;AAC5C,CAAC;AACD,SAAS,eAAe,CAAC,KAAc,EAAE,WAAoB;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EACzB,GAAG,GAAY,eAAe,CAAC,WAAW,CAAC,EAC3C,KAAK,GAAY,IAAI,CAAC,WAAW,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CACnB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAU,EAAE,EAAE,CACjC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAiC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CACnG,CACF,EACD,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;IACtB,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAA;IAC7E,IAAI,GAAG,CAAC,OAAO,KAAK,iBAAiB;QAAE,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACnF,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAClC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,uGAAuG;QACvG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAA;QACxE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK;YACvB,IAAI,CAAE,mBAAyC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAA;QAC/G,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACvD,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACzE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACvF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAA;IAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;QAC3C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAChE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa,EAAE,EAAE;QAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;YAC9F,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,uDAAuD,CAAC,CAAA;IACrF,CAAC,CAAA;IACD,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAW,EAAE,CACjE,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC5F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;IACvB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAA;QAC7G,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7D,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;QAClE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACb,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAA;QAC/G,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;aAC3D,CAAC;YACJ,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YACtC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,kDAAkD,CAAC,CAAA;YACrG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAA;QACrG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChD,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAA;QACjG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC;YACrD,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAA;QAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAA;YAC9D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,gCAAgC,CAAC,CAAA;YAC5F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBACzE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,qCAAqC,CAAC,CAAA;YAC7D,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU;gBACnC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS;oBAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,mCAAmC,CAAC,CAAA;QAChH,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAA;YAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,EACpB,QAAQ,GAAG,EAAE,CAAA;YACf,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;gBAChE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,wHAAwH;IACxH,SAAS,YAAY,CAAC,KAA2D,EAAE,KAA6B,EAAE,WAAoC,EAAE;QACpJ,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC,CAAA;QAC1C,8FAA8F;QAC9F,MAAM,MAAM,GAAY,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,eAAe,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACxF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;YAC/C,IAAI,MAAM,GAAG,IAAI,CAAA;YACjB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,qCAAqC,CAAC,CAAA;gBACpE,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,CAAA;YAC9C,CAAC;YACD,IAAI,WAAW,GAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;YACzE,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACxB,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAA;gBACtD,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;gBAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC;oBACrD,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,iDAAiD,CAAC,CAAA;gBAC5E,MAAM,OAAO,GAAG,EAAE,CAAA;gBAClB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;gBAClE,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC3D,WAAW,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAA;YAC5E,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,EAC9D,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACnE,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM;gBACN,QAAQ;gBACR,MAAM,EAAE;oBACN,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;oBACpC,WAAW;oBACX,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,0BAA0B,EAAE;oBACrE,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE;oBAC1D,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE;iBACxD;aACF,CAAA;QACH,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;IACzE,CAAC;IACD,OAAO;QACL,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC;QACnC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5C,QAAQ,CAAC,KAA6B,EAAE,WAAoC,EAAE;YAC5E,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC5C,CAAC;QACD,0GAA0G;QAC1G,SAAS;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC9B,OAAO,EAAE,QAAQ,EAAE,CAAC,KAA6B,EAAE,WAAoC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAA;QACtI,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -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"}
@@ -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 { V3Asset, V3AssetGeometry } from './v3-asset-types.ts';
2
- export interface V3Cost {
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 v3TrianglesOf(body: V3AssetGeometry): number;
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 v3CostOf(asset: V3Asset): V3Cost;
14
- //# sourceMappingURL=v3-cost.d.ts.map
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 V3 asset costs to draw, in the terms the catalogue already shows: triangles and draw groups.
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
- * (V3 designer's ruling 2026-09-22); this counts what reaches the screen.
11
+ * (designer's ruling 2026-09-22); this counts what reaches the screen.
12
12
  */
13
- import { v3RenderBatchesOf } from "./v3-render-batches.js";
14
- import { SEGMENT_PRESETS } from "./v3-words.js";
15
- import { compileV3Asset } from "./v3-asset.js";
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 v3TrianglesOf(body) {
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 v3CostOf(asset) {
60
- const geometry = compileV3Asset(asset).evaluate().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 = v3RenderBatchesOf(drawn);
63
+ const plan = figureRenderBatchesOf(drawn);
64
64
  return {
65
- triangles: drawn.reduce((sum, body) => sum + v3TrianglesOf(body), 0),
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=v3-cost.js.map
70
+ //# sourceMappingURL=cost.js.map
@@ -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 { V3Asset, V3Material } from './v3-asset-types.ts';
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 createV3Asset(name: string): V3Asset;
4
- export interface V3BoxCreation {
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?: V3Material;
21
+ material?: FigureMaterial;
22
22
  }
23
- export type V3PrimitiveCreation = Omit<V3BoxCreation, 'size'> & ({
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 addV3Primitive(source: V3Asset, part: V3PrimitiveCreation): V3Asset;
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 addV3Box(source: V3Asset, box: V3BoxCreation): V3Asset;
102
- //# sourceMappingURL=v3-create.d.ts.map
101
+ export declare function addFigureBox(source: FigureAsset, box: FigureBoxCreation): FigureAsset;
102
+ //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3-create.d.ts","sourceRoot":"","sources":["../src/v3-create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { compileV3Asset } from "./v3-asset.js";
2
- import { V3ContractError } from "./v3-contract.js";
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 createV3Asset(name) {
4
+ export function createFigureAsset(name) {
5
5
  const asset = {
6
- version: 'figure-v3-asset-1',
6
+ version: 'figure-asset-1',
7
7
  name,
8
8
  document: {
9
- version: 'figure-v3-prototype-1',
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
- compileV3Asset(asset);
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 addV3Primitive(source, part) {
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 V3ContractError('PROVIDER', 'part', 'unknown primitive');
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 V3ContractError('SCHEMA', part.id, 'provider dimensions must match declared fields');
42
- const asset = addV3Box(source, {
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 V3ContractError('DUPLICATE_WRITER', id, 'input already exists');
64
+ throw new FigureContractError('DUPLICATE_WRITER', id, 'input already exists');
65
65
  if (!Number.isFinite(value))
66
- throw new V3ContractError('NON_FINITE', id, 'finite dimension required');
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 V3ContractError('SCHEMA', id, `${key} is a size, zero or more`);
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 V3ContractError('SCHEMA', part.id, 'a polygon has at least three corners');
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 V3ContractError('DUPLICATE_WRITER', id, 'input already exists');
84
+ throw new FigureContractError('DUPLICATE_WRITER', id, 'input already exists');
85
85
  if (typeof value !== 'number' || !Number.isFinite(value))
86
- throw new V3ContractError('NON_FINITE', id, 'finite corner required');
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 V3ContractError('SCHEMA', part.id, 'only a polygon has corners');
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
- compileV3Asset(asset);
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 addV3Box(source, box) {
104
- compileV3Asset(source);
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 V3ContractError('ID', 'box', 'letter-led part ID required');
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 V3ContractError('DUPLICATE_PART', prefix, 'part IDs overlap existing graph identifiers');
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 V3ContractError('SCHEMA', prefix, `${group} requires x, y, z`);
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 V3ContractError('GEOMETRY_DOMAIN', `${prefix}.${group}.${axis}`, 'finite value and positive size required');
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
- compileV3Asset(asset);
177
+ compileFigureAsset(asset);
178
178
  return asset;
179
179
  }
180
- //# sourceMappingURL=v3-create.js.map
180
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAGnD,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAgB;QACzB,OAAO,EAAE,gBAAgB;QACzB,IAAI;QACJ,QAAQ,EAAE;YACR,OAAO,EAAE,oBAAoB;YAC7B,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACxE,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;SAChF;QACD,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE;QACzC,UAAU,EAAE,EAAE;KACf,CAAA;IACD,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,KAAK,CAAA;AACd,CAAC;AA2BD,0FAA0F;AAC1F,gHAAgH;AAChH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;AAEhN,MAAM,UAAU,kBAAkB,CAAC,MAAmB,EAAE,IAA6B;IACnF,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;QAC9D,QAAQ,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;QAChE,aAAa,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QACnF,MAAM,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QACtF,YAAY,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QACvH,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;QACzE,OAAO,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE;QACjF,OAAO,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;KACsB,CAAA;IAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAA;IACvH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,IACE,CAAC,IAAI,CAAC,UAAU;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,gDAAgD,CAAC,CAAA;IACpG,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE;QACjC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAChC,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAA;IACrE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3D,KAAK,MAAM,EAAE,IAAI,OAAO;QAAE,OAAO,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAE,CAAA;IACjE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;IACpB,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;IACf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KACjE,CAAC,CAAA;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,aAAa,GAAG,GAAG,EACtC,KAAK,GAAI,IAAI,CAAC,UAAqC,CAAC,GAAG,CAAE,CAAA;QAC3D,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAA;QACnG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,YAAY,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAA;QACzG,iCAAiC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAA;QACrD,IAAI,KAAK,GAAG,GAAG;YAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,0BAA0B,CAAC,CAAA;QAC9F,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACjF,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrB,CAAC;IACD,8GAA8G;IAC9G,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAA;QAC/G,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;gBACvC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE,EACzC,KAAK,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;gBACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAA;gBACnG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,mBAAmB,CAAC,YAAY,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAA;gBACnI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;gBACpG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;gBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACrB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;SAAM,IAAK,IAA6B,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAA;IAC9I,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAE,CAAC,QAAQ,GAAG,EAAE,CAAA;IAC7F,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAE,CAAC,QAAQ,GAAG,EAAE,CAAA;IACtH,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,GAAsB;IACtE,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAA;IAC3E,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,EACnC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAC5B,MAAM,GAAG,GAAG,CAAC,EAAE,CAAA;IACjB,MAAM,IAAI,GAAG;QACX,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;KACb,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,MAAM;QACN,GAAG,MAAM,QAAQ;QACjB,GAAG,MAAM,aAAa;QACtB,GAAG,MAAM,OAAO;QAChB,GAAG,MAAM,YAAY;QACrB,GAAG,MAAM,SAAS;QAClB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;KACnC,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG;QACf,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KACjE,CAAA;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,6CAA6C,CAAC,CAAA;IACxG,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACrD,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAU,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAC7C,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAA;QAC9E,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC;gBAC7D,MAAM,IAAI,mBAAmB,CAC3B,iBAAiB,EACjB,GAAG,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,EAC5B,yCAAyC,CAC1C,CAAA;YACH,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAA;YACvC,kFAAkF;YAClF,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChB,EAAE;gBACF,IAAI,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBACzC,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;gBAC5D,GAAG,EAAE,MAAM,CAAC,SAAS;gBACrB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;YACF,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;QAChC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,MAAM,QAAQ,CAAA;IAC/B,KAAK,CAAC,KAAK,CAAC,IAAI,CACd;QACE,EAAE,EAAE,GAAG,MAAM,QAAQ;QACrB,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,EAAE;QAC1C,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;KACzB,EACD;QACE,EAAE,EAAE,GAAG,MAAM,OAAO;QACpB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,EAAE;QACxC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE;KACpE,EACD;QACE,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,CAAC,GAAG,MAAM,aAAa,EAAE,GAAG,MAAM,YAAY,CAAC;QACrD,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE;KACxC,CACF,CAAA;IACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAA;IAClH,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -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"}
@@ -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 { V3Asset, V3Driver, V3StateInputPolicy } from './v3-asset-types.ts';
2
- /** Refuses a driver list the contract does not allow. Called by `compileV3Asset`. */
3
- export declare function validateV3Drivers(asset: V3Asset): void;
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: V3Driver, timeSeconds: number, unit?: 'deg' | 'rad' | 'other'): number;
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: V3Asset, timeSeconds: number): Record<string, number>;
16
- /** Refuses a `stateInputs` map the contract does not allow. Called by `compileV3Asset`. */
17
- export declare function validateV3StateInputs(asset: V3Asset): void;
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 (V3 designer's ruling 2026-09-22).
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: V3Asset, id: string): V3StateInputPolicy;
39
- //# sourceMappingURL=v3-driver.d.ts.map
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/v3-motion-contract.md).
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 `compileV3Asset(...).evaluate`.
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 { V3ContractError } from "./v3-contract.js";
15
+ import { FigureContractError } from "./contract.js";
16
16
  const fail = (code, path, detail) => {
17
- throw new V3ContractError(code, path, detail);
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 `compileV3Asset`. */
24
- export function validateV3Drivers(asset) {
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 `compileV3Asset`. */
154
- export function validateV3StateInputs(asset) {
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 (V3 designer's ruling 2026-09-22).
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=v3-driver.js.map
211
+ //# sourceMappingURL=driver.js.map