human2ai 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/assets/quaternius/License_Standard.txt +22 -0
  4. package/assets/quaternius/README.md +31 -0
  5. package/assets/quaternius/Superhero_Female_FullBody.bin +0 -0
  6. package/assets/quaternius/Superhero_Female_FullBody.gltf +2056 -0
  7. package/assets/quaternius/Superhero_Male_FullBody.bin +0 -0
  8. package/assets/quaternius/Superhero_Male_FullBody.gltf +2018 -0
  9. package/dist/cli/integration.d.ts +39 -0
  10. package/dist/cli/integration.js +466 -0
  11. package/dist/cli/integration.js.map +1 -0
  12. package/dist/cli/main.d.ts +17 -0
  13. package/dist/cli/main.js +1455 -0
  14. package/dist/cli/main.js.map +1 -0
  15. package/dist/database/composition-session-repository.d.ts +37 -0
  16. package/dist/database/composition-session-repository.js +147 -0
  17. package/dist/database/composition-session-repository.js.map +1 -0
  18. package/dist/database/draft-version-errors.d.ts +29 -0
  19. package/dist/database/draft-version-errors.js +47 -0
  20. package/dist/database/draft-version-errors.js.map +1 -0
  21. package/dist/database/draft-version-store.d.ts +30 -0
  22. package/dist/database/draft-version-store.js +168 -0
  23. package/dist/database/draft-version-store.js.map +1 -0
  24. package/dist/database/image-asset-repository.d.ts +37 -0
  25. package/dist/database/image-asset-repository.js +101 -0
  26. package/dist/database/image-asset-repository.js.map +1 -0
  27. package/dist/database/image-input.d.ts +15 -0
  28. package/dist/database/image-input.js +28 -0
  29. package/dist/database/image-input.js.map +1 -0
  30. package/dist/database/migrate.d.ts +4 -0
  31. package/dist/database/migrate.js +45 -0
  32. package/dist/database/migrate.js.map +1 -0
  33. package/dist/database/project-session-repository.d.ts +72 -0
  34. package/dist/database/project-session-repository.js +291 -0
  35. package/dist/database/project-session-repository.js.map +1 -0
  36. package/dist/database/spatial-session-repository.d.ts +26 -0
  37. package/dist/database/spatial-session-repository.js +44 -0
  38. package/dist/database/spatial-session-repository.js.map +1 -0
  39. package/dist/database/style-library-repository.d.ts +70 -0
  40. package/dist/database/style-library-repository.js +290 -0
  41. package/dist/database/style-library-repository.js.map +1 -0
  42. package/dist/database/svg-input.d.ts +1 -0
  43. package/dist/database/svg-input.js +77 -0
  44. package/dist/database/svg-input.js.map +1 -0
  45. package/dist/database/ui-sketch-session-repository.d.ts +19 -0
  46. package/dist/database/ui-sketch-session-repository.js +35 -0
  47. package/dist/database/ui-sketch-session-repository.js.map +1 -0
  48. package/dist/domain/canvas-layer-order.d.ts +6 -0
  49. package/dist/domain/canvas-layer-order.js +40 -0
  50. package/dist/domain/canvas-layer-order.js.map +1 -0
  51. package/dist/domain/canvas-node-metadata.d.ts +20 -0
  52. package/dist/domain/canvas-node-metadata.js +17 -0
  53. package/dist/domain/canvas-node-metadata.js.map +1 -0
  54. package/dist/domain/canvas-states.d.ts +8 -0
  55. package/dist/domain/canvas-states.js +23 -0
  56. package/dist/domain/canvas-states.js.map +1 -0
  57. package/dist/domain/composition/analysis.d.ts +104 -0
  58. package/dist/domain/composition/analysis.js +337 -0
  59. package/dist/domain/composition/analysis.js.map +1 -0
  60. package/dist/domain/composition/camera-reference.d.ts +24 -0
  61. package/dist/domain/composition/camera-reference.js +34 -0
  62. package/dist/domain/composition/camera-reference.js.map +1 -0
  63. package/dist/domain/composition/draft.d.ts +50 -0
  64. package/dist/domain/composition/draft.js +609 -0
  65. package/dist/domain/composition/draft.js.map +1 -0
  66. package/dist/domain/composition/frame.d.ts +23 -0
  67. package/dist/domain/composition/frame.js +154 -0
  68. package/dist/domain/composition/frame.js.map +1 -0
  69. package/dist/domain/composition/geometry.d.ts +15 -0
  70. package/dist/domain/composition/geometry.js +262 -0
  71. package/dist/domain/composition/geometry.js.map +1 -0
  72. package/dist/domain/composition/index.d.ts +13 -0
  73. package/dist/domain/composition/index.js +10 -0
  74. package/dist/domain/composition/index.js.map +1 -0
  75. package/dist/domain/composition/layers.d.ts +4 -0
  76. package/dist/domain/composition/layers.js +12 -0
  77. package/dist/domain/composition/layers.js.map +1 -0
  78. package/dist/domain/composition/records.d.ts +14 -0
  79. package/dist/domain/composition/records.js +2 -0
  80. package/dist/domain/composition/records.js.map +1 -0
  81. package/dist/domain/composition/refinement/engine.d.ts +12 -0
  82. package/dist/domain/composition/refinement/engine.js +521 -0
  83. package/dist/domain/composition/refinement/engine.js.map +1 -0
  84. package/dist/domain/composition/refinement/relations.d.ts +16 -0
  85. package/dist/domain/composition/refinement/relations.js +293 -0
  86. package/dist/domain/composition/refinement/relations.js.map +1 -0
  87. package/dist/domain/composition/refinement/types.d.ts +181 -0
  88. package/dist/domain/composition/refinement/types.js +2 -0
  89. package/dist/domain/composition/refinement/types.js.map +1 -0
  90. package/dist/domain/composition/render.d.ts +5 -0
  91. package/dist/domain/composition/render.js +169 -0
  92. package/dist/domain/composition/render.js.map +1 -0
  93. package/dist/domain/composition/states.d.ts +9 -0
  94. package/dist/domain/composition/states.js +104 -0
  95. package/dist/domain/composition/states.js.map +1 -0
  96. package/dist/domain/composition/types.d.ts +149 -0
  97. package/dist/domain/composition/types.js +2 -0
  98. package/dist/domain/composition/types.js.map +1 -0
  99. package/dist/domain/composition/workflow.d.ts +15 -0
  100. package/dist/domain/composition/workflow.js +77 -0
  101. package/dist/domain/composition/workflow.js.map +1 -0
  102. package/dist/domain/fingerprint.d.ts +2 -0
  103. package/dist/domain/fingerprint.js +25 -0
  104. package/dist/domain/fingerprint.js.map +1 -0
  105. package/dist/domain/session/canvas-edit-history.d.ts +17 -0
  106. package/dist/domain/session/canvas-edit-history.js +53 -0
  107. package/dist/domain/session/canvas-edit-history.js.map +1 -0
  108. package/dist/domain/session/capabilities.d.ts +16 -0
  109. package/dist/domain/session/capabilities.js +84 -0
  110. package/dist/domain/session/capabilities.js.map +1 -0
  111. package/dist/domain/session/draft-version.d.ts +41 -0
  112. package/dist/domain/session/draft-version.js +2 -0
  113. package/dist/domain/session/draft-version.js.map +1 -0
  114. package/dist/domain/session/index.d.ts +5 -0
  115. package/dist/domain/session/index.js +3 -0
  116. package/dist/domain/session/index.js.map +1 -0
  117. package/dist/domain/session/types.d.ts +23 -0
  118. package/dist/domain/session/types.js +2 -0
  119. package/dist/domain/session/types.js.map +1 -0
  120. package/dist/domain/spatial/assets/quaternius-female-rig.json +799 -0
  121. package/dist/domain/spatial/assets/quaternius-rig.json +799 -0
  122. package/dist/domain/spatial/assets/quaternius-superhero-female.json +1 -0
  123. package/dist/domain/spatial/assets/quaternius-superhero.json +1 -0
  124. package/dist/domain/spatial/camera-box.d.ts +13 -0
  125. package/dist/domain/spatial/camera-box.js +52 -0
  126. package/dist/domain/spatial/camera-box.js.map +1 -0
  127. package/dist/domain/spatial/geometric-model.d.ts +4 -0
  128. package/dist/domain/spatial/geometric-model.js +101 -0
  129. package/dist/domain/spatial/geometric-model.js.map +1 -0
  130. package/dist/domain/spatial/hands.d.ts +36 -0
  131. package/dist/domain/spatial/hands.js +128 -0
  132. package/dist/domain/spatial/hands.js.map +1 -0
  133. package/dist/domain/spatial/index.d.ts +30 -0
  134. package/dist/domain/spatial/index.js +381 -0
  135. package/dist/domain/spatial/index.js.map +1 -0
  136. package/dist/domain/spatial/kinematics.d.ts +27 -0
  137. package/dist/domain/spatial/kinematics.js +285 -0
  138. package/dist/domain/spatial/kinematics.js.map +1 -0
  139. package/dist/domain/spatial/lighting.d.ts +35 -0
  140. package/dist/domain/spatial/lighting.js +173 -0
  141. package/dist/domain/spatial/lighting.js.map +1 -0
  142. package/dist/domain/spatial/model.d.ts +5 -0
  143. package/dist/domain/spatial/model.js +193 -0
  144. package/dist/domain/spatial/model.js.map +1 -0
  145. package/dist/domain/spatial/morph.d.ts +3 -0
  146. package/dist/domain/spatial/morph.js +187 -0
  147. package/dist/domain/spatial/morph.js.map +1 -0
  148. package/dist/domain/spatial/proportions.d.ts +46 -0
  149. package/dist/domain/spatial/proportions.js +59 -0
  150. package/dist/domain/spatial/proportions.js.map +1 -0
  151. package/dist/domain/spatial/reference-lines.d.ts +6 -0
  152. package/dist/domain/spatial/reference-lines.js +58 -0
  153. package/dist/domain/spatial/reference-lines.js.map +1 -0
  154. package/dist/domain/spatial/scene-cache.d.ts +15 -0
  155. package/dist/domain/spatial/scene-cache.js +69 -0
  156. package/dist/domain/spatial/scene-cache.js.map +1 -0
  157. package/dist/domain/spatial/scene.d.ts +8 -0
  158. package/dist/domain/spatial/scene.js +69 -0
  159. package/dist/domain/spatial/scene.js.map +1 -0
  160. package/dist/domain/spatial/types.d.ts +187 -0
  161. package/dist/domain/spatial/types.js +5 -0
  162. package/dist/domain/spatial/types.js.map +1 -0
  163. package/dist/domain/style/index.d.ts +1 -0
  164. package/dist/domain/style/index.js +2 -0
  165. package/dist/domain/style/index.js.map +1 -0
  166. package/dist/domain/style/prompt-summary.d.ts +2 -0
  167. package/dist/domain/style/prompt-summary.js +11 -0
  168. package/dist/domain/style/prompt-summary.js.map +1 -0
  169. package/dist/domain/style/types.d.ts +32 -0
  170. package/dist/domain/style/types.js +3 -0
  171. package/dist/domain/style/types.js.map +1 -0
  172. package/dist/domain/ui-sketch/draft.d.ts +12 -0
  173. package/dist/domain/ui-sketch/draft.js +424 -0
  174. package/dist/domain/ui-sketch/draft.js.map +1 -0
  175. package/dist/domain/ui-sketch/geometry.d.ts +7 -0
  176. package/dist/domain/ui-sketch/geometry.js +11 -0
  177. package/dist/domain/ui-sketch/geometry.js.map +1 -0
  178. package/dist/domain/ui-sketch/groups.d.ts +5 -0
  179. package/dist/domain/ui-sketch/groups.js +40 -0
  180. package/dist/domain/ui-sketch/groups.js.map +1 -0
  181. package/dist/domain/ui-sketch/index.d.ts +8 -0
  182. package/dist/domain/ui-sketch/index.js +8 -0
  183. package/dist/domain/ui-sketch/index.js.map +1 -0
  184. package/dist/domain/ui-sketch/layers.d.ts +4 -0
  185. package/dist/domain/ui-sketch/layers.js +11 -0
  186. package/dist/domain/ui-sketch/layers.js.map +1 -0
  187. package/dist/domain/ui-sketch/render.d.ts +2 -0
  188. package/dist/domain/ui-sketch/render.js +58 -0
  189. package/dist/domain/ui-sketch/render.js.map +1 -0
  190. package/dist/domain/ui-sketch/standardize.d.ts +17 -0
  191. package/dist/domain/ui-sketch/standardize.js +139 -0
  192. package/dist/domain/ui-sketch/standardize.js.map +1 -0
  193. package/dist/domain/ui-sketch/states.d.ts +5 -0
  194. package/dist/domain/ui-sketch/states.js +21 -0
  195. package/dist/domain/ui-sketch/states.js.map +1 -0
  196. package/dist/domain/ui-sketch/types.d.ts +73 -0
  197. package/dist/domain/ui-sketch/types.js +2 -0
  198. package/dist/domain/ui-sketch/types.js.map +1 -0
  199. package/dist/server/app.d.ts +18 -0
  200. package/dist/server/app.js +108 -0
  201. package/dist/server/app.js.map +1 -0
  202. package/dist/server/image-content-type-parser.d.ts +2 -0
  203. package/dist/server/image-content-type-parser.js +5 -0
  204. package/dist/server/image-content-type-parser.js.map +1 -0
  205. package/dist/server/routes/composition-sessions.d.ts +3 -0
  206. package/dist/server/routes/composition-sessions.js +190 -0
  207. package/dist/server/routes/composition-sessions.js.map +1 -0
  208. package/dist/server/routes/draft-version-routes.d.ts +10 -0
  209. package/dist/server/routes/draft-version-routes.js +201 -0
  210. package/dist/server/routes/draft-version-routes.js.map +1 -0
  211. package/dist/server/routes/image-assets.d.ts +3 -0
  212. package/dist/server/routes/image-assets.js +114 -0
  213. package/dist/server/routes/image-assets.js.map +1 -0
  214. package/dist/server/routes/project-sessions.d.ts +48 -0
  215. package/dist/server/routes/project-sessions.js +305 -0
  216. package/dist/server/routes/project-sessions.js.map +1 -0
  217. package/dist/server/routes/spatial-sessions.d.ts +3 -0
  218. package/dist/server/routes/spatial-sessions.js +80 -0
  219. package/dist/server/routes/spatial-sessions.js.map +1 -0
  220. package/dist/server/routes/style-library.d.ts +3 -0
  221. package/dist/server/routes/style-library.js +308 -0
  222. package/dist/server/routes/style-library.js.map +1 -0
  223. package/dist/server/routes/ui-sketch-sessions.d.ts +3 -0
  224. package/dist/server/routes/ui-sketch-sessions.js +14 -0
  225. package/dist/server/routes/ui-sketch-sessions.js.map +1 -0
  226. package/dist/server/runtime.d.ts +30 -0
  227. package/dist/server/runtime.js +123 -0
  228. package/dist/server/runtime.js.map +1 -0
  229. package/dist/server/spatial-render.d.ts +5 -0
  230. package/dist/server/spatial-render.js +360 -0
  231. package/dist/server/spatial-render.js.map +1 -0
  232. package/dist/server/start.d.ts +1 -0
  233. package/dist/server/start.js +3 -0
  234. package/dist/server/start.js.map +1 -0
  235. package/licenses/THIRD-PARTY-NOTICES.txt +16664 -0
  236. package/licenses/YisiUI-LICENSE +21 -0
  237. package/locales/en/common.json +671 -0
  238. package/migrations/0001_projects_and_sessions.sql +45 -0
  239. package/migrations/0002_composition_versions_and_refinements.sql +26 -0
  240. package/migrations/0003_ui_sketch_draft_versions.sql +12 -0
  241. package/migrations/0004_image_assets.sql +16 -0
  242. package/migrations/0005_style_library.sql +31 -0
  243. package/migrations/0006_session_styles.sql +6 -0
  244. package/migrations/0007_svg_image_assets.sql +19 -0
  245. package/migrations/0008_spatial_spaces.sql +20 -0
  246. package/package.json +82 -0
  247. package/schemas/composition-draft.schema.json +234 -0
  248. package/schemas/composition-refinement-plan.schema.json +758 -0
  249. package/schemas/spatial-draft.schema.json +517 -0
  250. package/schemas/spatial-operations.schema.json +1082 -0
  251. package/schemas/ui-layout-standardization-plan.schema.json +29 -0
  252. package/schemas/ui-sketch-draft.schema.json +197 -0
  253. package/skills/human2ai/SKILL.md +149 -0
  254. package/skills/human2ai/agents/openai.yaml +3 -0
  255. package/skills/human2ai/references/composition-projection.md +170 -0
  256. package/skills/human2ai/references/composition.md +79 -0
  257. package/skills/human2ai/references/spatial.md +188 -0
  258. package/skills/human2ai/references/svg-images.md +27 -0
  259. package/skills/human2ai/references/ui-layout.md +100 -0
  260. package/web/out/404/index.html +1 -0
  261. package/web/out/404.html +1 -0
  262. package/web/out/__next.__PAGE__.txt +26 -0
  263. package/web/out/__next._full.txt +21 -0
  264. package/web/out/__next._tree.txt +4 -0
  265. package/web/out/_next/static/TV-jgcACg6HANZAMZTE2S/_buildManifest.js +1 -0
  266. package/web/out/_next/static/TV-jgcACg6HANZAMZTE2S/_ssgManifest.js +1 -0
  267. package/web/out/_next/static/chunks/130-9fadd0432daff55d.js +1 -0
  268. package/web/out/_next/static/chunks/158-eb00456e1bab68b3.js +52 -0
  269. package/web/out/_next/static/chunks/20-0801fc297cda2a7a.js +1 -0
  270. package/web/out/_next/static/chunks/248-d4a79649dae2a3f8.js +259 -0
  271. package/web/out/_next/static/chunks/678-1305cadf8254d814.js +1 -0
  272. package/web/out/_next/static/chunks/728-eb8b667f79229443.js +1 -0
  273. package/web/out/_next/static/chunks/83607670-bc1279370476e59f.js +1 -0
  274. package/web/out/_next/static/chunks/app/_global-error/page-5eece43b8152c414.js +1 -0
  275. package/web/out/_next/static/chunks/app/_not-found/page-c0cd75ac39fbf9cf.js +1 -0
  276. package/web/out/_next/static/chunks/app/composition/page-051ee2fabb12110a.js +1 -0
  277. package/web/out/_next/static/chunks/app/layout-745ca27ef8830f4f.js +1 -0
  278. package/web/out/_next/static/chunks/app/page-0027378a269a6168.js +1 -0
  279. package/web/out/_next/static/chunks/app/spatial/page-266dedc81784d4f6.js +1 -0
  280. package/web/out/_next/static/chunks/app/styles/page-d5cb83af828ea9ed.js +1 -0
  281. package/web/out/_next/static/chunks/app/ui-sketch/page-2a8436e05a05c618.js +1 -0
  282. package/web/out/_next/static/chunks/c3f2cda1-9e279dab137b7272.js +342 -0
  283. package/web/out/_next/static/chunks/c7879cf7-7873c8afd9c9c666.js +1 -0
  284. package/web/out/_next/static/chunks/framework-6eacf80ec1e4c887.js +1 -0
  285. package/web/out/_next/static/chunks/main-5ee8fd93319f955c.js +5 -0
  286. package/web/out/_next/static/chunks/main-app-0cf10803ab17c700.js +1 -0
  287. package/web/out/_next/static/chunks/next/dist/client/components/builtin/app-error-5eece43b8152c414.js +1 -0
  288. package/web/out/_next/static/chunks/next/dist/client/components/builtin/forbidden-5eece43b8152c414.js +1 -0
  289. package/web/out/_next/static/chunks/next/dist/client/components/builtin/global-error-728204b7cccc4ed2.js +1 -0
  290. package/web/out/_next/static/chunks/next/dist/client/components/builtin/not-found-5eece43b8152c414.js +1 -0
  291. package/web/out/_next/static/chunks/next/dist/client/components/builtin/unauthorized-5eece43b8152c414.js +1 -0
  292. package/web/out/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  293. package/web/out/_next/static/chunks/webpack-97ae63c0e0b2a512.js +1 -0
  294. package/web/out/_next/static/css/3b7982b41ed8eccd.css +4 -0
  295. package/web/out/_next/static/css/81ae71f1d3e9a866.css +1 -0
  296. package/web/out/_next/static/css/8c3843f4951fa9f6.css +5 -0
  297. package/web/out/_next/static/css/c739d0131cdcc891.css +1 -0
  298. package/web/out/_next/static/css/ce1b4bb3ad3c6073.css +1 -0
  299. package/web/out/_next/static/css/db96ae2e88545d96.css +1 -0
  300. package/web/out/_not-found/__next._full.txt +18 -0
  301. package/web/out/_not-found/__next._not-found.__PAGE__.txt +24 -0
  302. package/web/out/_not-found/__next._tree.txt +3 -0
  303. package/web/out/_not-found/index.html +1 -0
  304. package/web/out/_not-found/index.txt +18 -0
  305. package/web/out/composition/__next._full.txt +25 -0
  306. package/web/out/composition/__next._tree.txt +6 -0
  307. package/web/out/composition/__next.composition.__PAGE__.txt +31 -0
  308. package/web/out/composition/index.html +1 -0
  309. package/web/out/composition/index.txt +25 -0
  310. package/web/out/index.html +1 -0
  311. package/web/out/index.txt +21 -0
  312. package/web/out/spatial/__next._full.txt +23 -0
  313. package/web/out/spatial/__next._tree.txt +4 -0
  314. package/web/out/spatial/__next.spatial.__PAGE__.txt +29 -0
  315. package/web/out/spatial/index.html +1 -0
  316. package/web/out/spatial/index.txt +23 -0
  317. package/web/out/styles/__next._full.txt +23 -0
  318. package/web/out/styles/__next._tree.txt +4 -0
  319. package/web/out/styles/__next.styles.__PAGE__.txt +29 -0
  320. package/web/out/styles/index.html +1 -0
  321. package/web/out/styles/index.txt +23 -0
  322. package/web/out/ui-sketch/__next._full.txt +25 -0
  323. package/web/out/ui-sketch/__next._tree.txt +6 -0
  324. package/web/out/ui-sketch/__next.ui-sketch.__PAGE__.txt +31 -0
  325. package/web/out/ui-sketch/index.html +1 -0
  326. package/web/out/ui-sketch/index.txt +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/domain/composition/records.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { CompositionDraft } from "../types.ts";
2
+ import type { AnchorPointMap, CompositionRefinementAudit, CompositionRefinementPlan, CompositionRefinementResult, RefinementMethodDescription } from "./types.ts";
3
+ export declare const FOCUS_ANCHORS: AnchorPointMap;
4
+ export declare class RefinementConstraintError extends Error {
5
+ readonly audit: CompositionRefinementAudit;
6
+ constructor(audit: CompositionRefinementAudit);
7
+ }
8
+ export declare function refinementMethods(): RefinementMethodDescription[];
9
+ export declare function refinementPlanSchema(): object;
10
+ export declare function validateRefinementPlan(input: unknown): CompositionRefinementPlan;
11
+ export declare function applyRefinementPlan(input: CompositionDraft, planInput: unknown): CompositionRefinementResult;
12
+ export declare function auditRefinement(sourceInput: CompositionDraft, refinedInput: CompositionDraft, plan?: CompositionRefinementPlan): CompositionRefinementAudit;
@@ -0,0 +1,521 @@
1
+ import { Ajv2020 } from "ajv/dist/2020.js";
2
+ import compositionRefinementPlanSchema from "../../../../schemas/composition-refinement-plan.schema.json" with {
3
+ type: "json"
4
+ };
5
+ import { areaClippedSides, draftFingerprint } from "../analysis.js";
6
+ import { moveItem, rotateArea, validateDraft, visibleAreaMetrics, } from "../draft.js";
7
+ import { areaGeometry, geometryBounds } from "../geometry.js";
8
+ import { COMPOSITION_CANVAS, canvasPointToFrame, framePointToCanvas, } from "../frame.js";
9
+ import { applyRelation, carryLinkedFocuses, checkRefinementRelation, refinementItem, validateRefinementLinks, } from "./relations.js";
10
+ const EPSILON = 1e-9;
11
+ export const FOCUS_ANCHORS = Object.freeze({
12
+ "optical-center": { x: 0.5, y: 0.55 },
13
+ "geometric-center": { x: 0.5, y: 0.5 },
14
+ "golden-right-upper": { x: 0.61803398875, y: 0.38196601125 },
15
+ "golden-left-upper": { x: 0.38196601125, y: 0.38196601125 },
16
+ "golden-right-lower": { x: 0.61803398875, y: 0.61803398875 },
17
+ "golden-left-lower": { x: 0.38196601125, y: 0.61803398875 },
18
+ "third-right-upper": { x: 2 / 3, y: 1 / 3 },
19
+ "third-left-upper": { x: 1 / 3, y: 1 / 3 },
20
+ "third-right-lower": { x: 2 / 3, y: 2 / 3 },
21
+ "third-left-lower": { x: 1 / 3, y: 2 / 3 },
22
+ });
23
+ const REFINEMENT_METHODS = [
24
+ {
25
+ id: "focus-anchor",
26
+ version: 1,
27
+ decisionOwner: "agent",
28
+ processingSemantics: ["scene-composition", "editorial-layout"],
29
+ description: "Move one Agent-selected focus to a named center, golden-section, or thirds anchor.",
30
+ },
31
+ {
32
+ id: "axis-relation",
33
+ version: 1,
34
+ decisionOwner: "agent",
35
+ processingSemantics: ["scene-composition", "editorial-layout"],
36
+ description: "Strengthen an Agent-selected parallel, perpendicular, or mirrored relation between two focus and area axes.",
37
+ },
38
+ {
39
+ id: "rotation-alignment",
40
+ version: 1,
41
+ decisionOwner: "agent",
42
+ processingSemantics: ["scene-composition", "editorial-layout"],
43
+ description: "Align Agent-selected non-circular areas to a named horizontal, vertical, or diagonal axis.",
44
+ },
45
+ {
46
+ id: "block-alignment",
47
+ version: 1,
48
+ decisionOwner: "agent",
49
+ processingSemantics: ["editorial-layout"],
50
+ description: "Align Agent-selected area edges or centers to an Agent-selected anchor area.",
51
+ },
52
+ {
53
+ id: "spacing-rhythm",
54
+ version: 1,
55
+ decisionOwner: "agent",
56
+ processingSemantics: ["editorial-layout"],
57
+ description: "Equalize horizontal or vertical edge spacing across Agent-selected areas.",
58
+ },
59
+ ...[
60
+ { id: "frame-placement", description: "Place a subject center, edge, or focus on an Agent-selected frame division." },
61
+ { id: "size-ratio", description: "Set an explicit physical length or area ratio between selected measurements." },
62
+ { id: "mirror-symmetry", description: "Mirror a target area across a named frame axis, matching position or geometry." },
63
+ { id: "focus-flow", description: "Aim an existing direction line or a subject's local axis at a selected focus." },
64
+ ].map((method) => ({ ...method, id: method.id, version: 1,
65
+ decisionOwner: "agent", processingSemantics: ["scene-composition", "editorial-layout"] })),
66
+ ];
67
+ const METHOD_EXECUTORS = {
68
+ "focus-anchor": applyFocusAnchor,
69
+ "axis-relation": applyAxisRelation,
70
+ "rotation-alignment": applyRotationAlignment,
71
+ "block-alignment": applyBlockAlignment,
72
+ "spacing-rhythm": applySpacingRhythm,
73
+ "frame-placement": applyNamedRelation,
74
+ "size-ratio": applyNamedRelation,
75
+ "mirror-symmetry": applyNamedRelation,
76
+ "focus-flow": applyNamedRelation,
77
+ };
78
+ const ajv = new Ajv2020({ allErrors: true });
79
+ const validatePlanSchema = ajv.compile(compositionRefinementPlanSchema);
80
+ export class RefinementConstraintError extends Error {
81
+ audit;
82
+ constructor(audit) {
83
+ super(`Refinement violates protection constraints: ${audit.failedChecks.join(", ")}.`);
84
+ this.audit = audit;
85
+ this.name = "RefinementConstraintError";
86
+ }
87
+ }
88
+ export function refinementMethods() {
89
+ return structuredClone(REFINEMENT_METHODS);
90
+ }
91
+ export function refinementPlanSchema() {
92
+ return structuredClone(compositionRefinementPlanSchema);
93
+ }
94
+ export function validateRefinementPlan(input) {
95
+ if (!validatePlanSchema(input)) {
96
+ throw new Error(formatValidationErrors(validatePlanSchema.errors));
97
+ }
98
+ return structuredClone(input);
99
+ }
100
+ export function applyRefinementPlan(input, planInput) {
101
+ const source = validateDraft(input);
102
+ const processingSemantic = source.processingSemantic;
103
+ if (processingSemantic === null) {
104
+ throw new Error("Composition mode is not selected. Ask the user to choose scene-composition or editorial-layout before refining.");
105
+ }
106
+ const plan = validateRefinementPlan(planInput);
107
+ const sourceFingerprint = draftFingerprint(source);
108
+ if (plan.sourceFingerprint !== sourceFingerprint) {
109
+ throw new Error(`Refinement plan is stale: expected ${sourceFingerprint}, received ${plan.sourceFingerprint}.`);
110
+ }
111
+ if (plan.version === 2)
112
+ validateRefinementLinks(source, plan);
113
+ let refinedDraft = source;
114
+ const appliedOperations = [];
115
+ for (const operation of plan.operations) {
116
+ const method = REFINEMENT_METHODS.find(({ id }) => id === operation.method);
117
+ if (!method.processingSemantics.includes(processingSemantic)) {
118
+ throw new Error(`${operation.method} does not support ${processingSemantic}.`);
119
+ }
120
+ const result = METHOD_EXECUTORS[operation.method](refinedDraft, operation);
121
+ const before = refinedDraft;
122
+ refinedDraft = plan.version === 2 ? carryLinkedFocuses(before, result.draft, plan) : result.draft;
123
+ appliedOperations.push(result.applied);
124
+ }
125
+ refinedDraft = validateDraft(refinedDraft);
126
+ const audit = auditRefinement(source, refinedDraft, plan);
127
+ if (plan.version === 2) {
128
+ audit.relations = plan.operations.map((operation, index) => checkRefinementRelation(source, refinedDraft, operation, index, (draft, op) => METHOD_EXECUTORS[op.method](draft, op).draft));
129
+ audit.failedChecks.push(...audit.relations.filter((check) => !check.passed)
130
+ .map((check) => `relations.${check.operationIndex}.${check.method}`));
131
+ audit.failedChecks.push(...plan.fixedIds.filter((id) => !equal(refinementItem(source, id), refinementItem(refinedDraft, id))).map((id) => `fixed.${id}`));
132
+ audit.passed = audit.failedChecks.length === 0;
133
+ }
134
+ if (!audit.passed)
135
+ throw new RefinementConstraintError(audit);
136
+ return {
137
+ version: 1,
138
+ kind: "composition-refinement-result",
139
+ sourceFingerprint,
140
+ plan,
141
+ refinedDraft,
142
+ appliedOperations,
143
+ audit,
144
+ };
145
+ }
146
+ export function auditRefinement(sourceInput, refinedInput, plan) {
147
+ const source = validateDraft(sourceInput);
148
+ const refined = validateDraft(refinedInput);
149
+ const sourceMetrics = visibleAreaMetrics(source);
150
+ const refinedMetrics = visibleAreaMetrics(refined);
151
+ const focusShifts = source.focusPoints.map((focus, index) => frameDistance(focus, refined.focusPoints[index] ?? focus, source));
152
+ const areaShifts = source.areas.map((area, index) => frameDistance(area, refined.areas[index] ?? area, source));
153
+ const rotationShifts = source.areas.map((area, index) => Math.abs(angleDifference(refined.areas[index]?.rotation ?? 0, area.rotation ?? 0)));
154
+ const visibleAreaDeltas = sourceMetrics.visibleAreaShares.map((value, index) => Math.abs(value - (refinedMetrics.visibleAreaShares[index] ?? value)));
155
+ const changes = {
156
+ maximumFocusShift: maximum(focusShifts),
157
+ maximumAreaShift: maximum(areaShifts),
158
+ maximumRotationShift: maximum(rotationShifts),
159
+ maximumVisibleAreaShareDelta: maximum(visibleAreaDeltas),
160
+ occupiedAreaDelta: Math.abs(sourceMetrics.occupiedArea - refinedMetrics.occupiedArea),
161
+ clippedAreaDelta: Math.abs(sourceMetrics.clippedArea - refinedMetrics.clippedArea),
162
+ overlapAreaDelta: Math.abs(sourceMetrics.overlapArea - refinedMetrics.overlapArea),
163
+ visualCenterShift: distance(sourceMetrics.visualCenter, refinedMetrics.visualCenter),
164
+ };
165
+ const sourceAreaIds = source.areas.map(({ id }) => id);
166
+ const refinedAreaIds = refined.areas.map(({ id }) => id);
167
+ const resizeIds = new Set(plan?.version === 2 ? plan.operations.flatMap((operation) => operation.method === "size-ratio" || operation.method === "mirror-symmetry" && operation.match === "geometry"
168
+ ? [operation.targetAreaId] : []) : []);
169
+ const geometryInputs = (area) => resizeIds.has(area.id)
170
+ ? { id: area.id, primitive: area.primitive } : areaGeometryInputs(area);
171
+ const directionMayRotate = plan?.version === 2 && plan.operations.some((operation) => operation.method === "focus-flow" && operation.sourceId === "direction-1");
172
+ const directionContent = (draft) => draft.directionLine && directionMayRotate
173
+ ? { ...draft.directionLine, rotation: 0 } : draft.directionLine;
174
+ const preserved = {
175
+ processingSemantic: source.processingSemantic === refined.processingSemantic,
176
+ frame: equal(source.frame, refined.frame),
177
+ focusIdentity: equal(source.focusPoints.map(({ id }) => id), refined.focusPoints.map(({ id }) => id)),
178
+ areaIdentity: sourceAreaIds.length === refinedAreaIds.length &&
179
+ [...sourceAreaIds].sort().join("\u0000") === [...refinedAreaIds].sort().join("\u0000"),
180
+ areaGeometryInputs: equal(source.areas.map(geometryInputs), refined.areas.map(geometryInputs)),
181
+ areaMetadata: equal(source.areas.map(areaMetadata), refined.areas.map(areaMetadata)),
182
+ areaOrder: equal(sourceAreaIds, refinedAreaIds),
183
+ directionLine: equal(directionContent(source), directionContent(refined)),
184
+ clippingSides: equal(source.areas.map((area) => areaClippedSides(area, source)), refined.areas.map((area) => areaClippedSides(area, refined))),
185
+ };
186
+ // Clipping is an observed result of the Agent's geometry choices, not an invariant.
187
+ const failedChecks = Object.entries(preserved)
188
+ .filter(([name, passed]) => name !== "clippingSides" && !passed)
189
+ .map(([name]) => `preserved.${name}`);
190
+ if (source.overallNote !== refined.overallNote)
191
+ failedChecks.push("preserved.overallNote");
192
+ if (!equal(source.images, refined.images))
193
+ failedChecks.push("preserved.images");
194
+ const focusMetadata = (draft) => draft.focusPoints.map(({ x: _x, y: _y, ...metadata }) => metadata);
195
+ if (!equal(focusMetadata(source), focusMetadata(refined)))
196
+ failedChecks.push("preserved.focusMetadata");
197
+ return {
198
+ passed: failedChecks.length === 0,
199
+ changes,
200
+ preserved,
201
+ failedChecks,
202
+ };
203
+ }
204
+ function applyNamedRelation(draft, operation) {
205
+ if (operation.method !== "frame-placement" && operation.method !== "size-ratio"
206
+ && operation.method !== "mirror-symmetry" && operation.method !== "focus-flow") {
207
+ throw new Error("Expected a named composition relation.");
208
+ }
209
+ const refined = applyRelation(draft, operation);
210
+ const items = [...draft.areas, ...draft.focusPoints, ...(draft.directionLine ? [draft.directionLine] : [])];
211
+ const changed = items.filter((item) => !equal(item, refinementItem(refined, item.id)));
212
+ return { draft: refined, applied: {
213
+ method: operation.method, methodVersion: 1, targetIds: changed.map(({ id }) => id),
214
+ positionShifts: Object.fromEntries(changed.map((item) => [item.id, frameDistance(item, refinementItem(refined, item.id), draft)])),
215
+ rotationShifts: Object.fromEntries(changed.filter((item) => "rotation" in item).map((item) => {
216
+ const next = refinementItem(refined, item.id);
217
+ return [item.id, Math.abs(angleDifference("rotation" in next ? next.rotation ?? 0 : 0, "rotation" in item ? item.rotation ?? 0 : 0))];
218
+ })),
219
+ } };
220
+ }
221
+ function applyFocusAnchor(draft, operation) {
222
+ if (operation.method !== "focus-anchor")
223
+ throw new Error("Invalid focus-anchor operation.");
224
+ const focus = draft.focusPoints.find(({ id }) => id === operation.targetFocusId);
225
+ if (!focus)
226
+ throw new Error(`Unknown focus point: ${operation.targetFocusId}.`);
227
+ const targetInFrame = FOCUS_ANCHORS[operation.anchor];
228
+ const target = framePointToCanvas(targetInFrame, draft.frame);
229
+ const shift = distance(canvasPointToFrame(focus, draft.frame), targetInFrame);
230
+ const refined = moveItem(draft, focus.id, target);
231
+ const refinedFocus = refined.focusPoints.find(({ id }) => id === focus.id);
232
+ if (distance(canvasPointToFrame(refinedFocus, draft.frame), targetInFrame) > EPSILON) {
233
+ throw new Error(`focus-anchor could not reach ${operation.anchor} within draft constraints.`);
234
+ }
235
+ return {
236
+ draft: refined,
237
+ applied: {
238
+ method: operation.method,
239
+ methodVersion: 1,
240
+ targetIds: [focus.id],
241
+ positionShifts: { [focus.id]: round(shift) },
242
+ rotationShifts: {},
243
+ },
244
+ };
245
+ }
246
+ function applyAxisRelation(draft, operation) {
247
+ if (operation.method !== "axis-relation")
248
+ throw new Error("Invalid axis-relation operation.");
249
+ const focuses = operation.focusIds.map((id) => {
250
+ const focus = draft.focusPoints.find((item) => item.id === id);
251
+ if (!focus)
252
+ throw new Error(`Unknown focus point: ${id}.`);
253
+ return focus;
254
+ });
255
+ const areas = operation.areaIds.map((id) => {
256
+ const area = draft.areas.find((item) => item.id === id);
257
+ if (!area)
258
+ throw new Error(`Unknown area: ${id}.`);
259
+ return area;
260
+ });
261
+ if (distance(focuses[0], focuses[1]) < EPSILON || distance(areas[0], areas[1]) < EPSILON) {
262
+ throw new Error("An axis relation requires distinct focus positions and distinct area centers.");
263
+ }
264
+ const focusAngle = axisAngle(focuses[0], focuses[1]);
265
+ const sourceAngle = axisAngle(areas[0], areas[1]);
266
+ const focusSlope = axisSlopeAngle(focusAngle);
267
+ const candidates = operation.relation === "parallel"
268
+ ? [focusAngle, focusAngle + 180]
269
+ : operation.relation === "mirrored-cross"
270
+ ? [-focusSlope, 180 - focusSlope]
271
+ : [focusAngle + 90, focusAngle - 90];
272
+ const targetAngle = candidates.sort((first, second) => Math.abs(angleDifference(first, sourceAngle)) - Math.abs(angleDifference(second, sourceAngle)))[0];
273
+ const first = toPixels(areas[0]);
274
+ const second = toPixels(areas[1]);
275
+ const center = { x: (first.x + second.x) / 2, y: (first.y + second.y) / 2 };
276
+ const halfDistance = distance(first, second) / 2;
277
+ const radians = (targetAngle * Math.PI) / 180;
278
+ const targets = [
279
+ {
280
+ x: (center.x - Math.cos(radians) * halfDistance) / COMPOSITION_CANVAS.width,
281
+ y: (center.y - Math.sin(radians) * halfDistance) / COMPOSITION_CANVAS.height,
282
+ },
283
+ {
284
+ x: (center.x + Math.cos(radians) * halfDistance) / COMPOSITION_CANVAS.width,
285
+ y: (center.y + Math.sin(radians) * halfDistance) / COMPOSITION_CANVAS.height,
286
+ },
287
+ ];
288
+ const shifts = areas.map((area, index) => frameDistance(area, targets[index], draft));
289
+ let refined = draft;
290
+ areas.forEach((area, index) => {
291
+ refined = moveItem(refined, area.id, targets[index]);
292
+ });
293
+ const refinedAreas = operation.areaIds.map((id) => refined.areas.find((area) => area.id === id));
294
+ const refinedAngle = axisAngle(refinedAreas[0], refinedAreas[1]);
295
+ if (acuteAxisDifference(refinedAngle, targetAngle) > 1e-6) {
296
+ throw new Error("axis-relation could not reach the requested relation within draft constraints.");
297
+ }
298
+ return {
299
+ draft: refined,
300
+ applied: {
301
+ method: operation.method,
302
+ methodVersion: 1,
303
+ targetIds: [...operation.focusIds, ...operation.areaIds],
304
+ positionShifts: Object.fromEntries(areas.map((area, index) => [area.id, round(shifts[index])])),
305
+ rotationShifts: {},
306
+ },
307
+ };
308
+ }
309
+ function applyRotationAlignment(draft, operation) {
310
+ if (operation.method !== "rotation-alignment") {
311
+ throw new Error("Invalid rotation-alignment operation.");
312
+ }
313
+ const baseAngle = {
314
+ horizontal: 0,
315
+ vertical: 90,
316
+ "rising-diagonal": 315,
317
+ "falling-diagonal": 45,
318
+ }[operation.axis];
319
+ const targets = operation.targetAreaIds.map((id) => {
320
+ const area = draft.areas.find((item) => item.id === id);
321
+ if (!area)
322
+ throw new Error(`Unknown area: ${id}.`);
323
+ if (area.primitive === "circle") {
324
+ throw new Error(`rotation-alignment does not support circle area: ${id}.`);
325
+ }
326
+ const sourceRotation = area.rotation ?? 0;
327
+ const candidates = [baseAngle, (baseAngle + 180) % 360];
328
+ const targetRotation = candidates.sort((first, second) => Math.abs(angleDifference(first, sourceRotation)) -
329
+ Math.abs(angleDifference(second, sourceRotation)))[0];
330
+ const shift = Math.abs(angleDifference(targetRotation, sourceRotation));
331
+ return { area, targetRotation, shift };
332
+ });
333
+ let refined = draft;
334
+ targets.forEach(({ area, targetRotation }) => {
335
+ refined = rotateArea(refined, area.id, targetRotation);
336
+ });
337
+ return {
338
+ draft: refined,
339
+ applied: {
340
+ method: operation.method,
341
+ methodVersion: 1,
342
+ targetIds: [...operation.targetAreaIds],
343
+ positionShifts: {},
344
+ rotationShifts: Object.fromEntries(targets.map(({ area, shift }) => [area.id, round(shift)])),
345
+ },
346
+ };
347
+ }
348
+ function applyBlockAlignment(draft, operation) {
349
+ if (operation.method !== "block-alignment") {
350
+ throw new Error("Invalid block-alignment operation.");
351
+ }
352
+ if (!operation.targetAreaIds.includes(operation.anchorAreaId)) {
353
+ throw new Error("block-alignment anchorAreaId must be included in targetAreaIds.");
354
+ }
355
+ const areas = operation.targetAreaIds.map((id) => {
356
+ const area = draft.areas.find((candidate) => candidate.id === id);
357
+ if (!area)
358
+ throw new Error(`Unknown area: ${id}.`);
359
+ return area;
360
+ });
361
+ const anchor = areas.find(({ id }) => id === operation.anchorAreaId);
362
+ const anchorBounds = boundsForArea(anchor);
363
+ const anchorCoordinate = alignmentCoordinate(anchorBounds, operation.alignment);
364
+ const targets = areas.map((area) => {
365
+ const bounds = boundsForArea(area);
366
+ const coordinate = alignmentCoordinate(bounds, operation.alignment);
367
+ const horizontal = ["left", "horizontal-center", "right"].includes(operation.alignment);
368
+ const target = {
369
+ x: area.x + (horizontal ? anchorCoordinate - coordinate : 0) / COMPOSITION_CANVAS.width,
370
+ y: area.y + (horizontal ? 0 : anchorCoordinate - coordinate) / COMPOSITION_CANVAS.height,
371
+ };
372
+ return { area, target, shift: frameDistance(area, target, draft) };
373
+ });
374
+ let refined = draft;
375
+ targets.forEach(({ area, target }) => {
376
+ refined = moveItem(refined, area.id, target);
377
+ });
378
+ return {
379
+ draft: refined,
380
+ applied: {
381
+ method: operation.method,
382
+ methodVersion: 1,
383
+ targetIds: [...operation.targetAreaIds],
384
+ positionShifts: Object.fromEntries(targets.map(({ area, shift }) => [area.id, round(shift)])),
385
+ rotationShifts: {},
386
+ },
387
+ };
388
+ }
389
+ function applySpacingRhythm(draft, operation) {
390
+ if (operation.method !== "spacing-rhythm") {
391
+ throw new Error("Invalid spacing-rhythm operation.");
392
+ }
393
+ const horizontal = operation.axis === "horizontal";
394
+ const areas = operation.targetAreaIds.map((id) => {
395
+ const area = draft.areas.find((candidate) => candidate.id === id);
396
+ if (!area)
397
+ throw new Error(`Unknown area: ${id}.`);
398
+ const bounds = boundsForArea(area);
399
+ return {
400
+ area,
401
+ minimum: horizontal ? bounds.minimumX : bounds.minimumY,
402
+ maximum: horizontal ? bounds.maximumX : bounds.maximumY,
403
+ };
404
+ }).sort((first, second) => ((first.minimum + first.maximum) - (second.minimum + second.maximum)));
405
+ const first = areas[0];
406
+ const last = areas.at(-1);
407
+ const totalSize = areas.reduce((sum, area) => sum + area.maximum - area.minimum, 0);
408
+ const gap = (last.maximum - first.minimum - totalSize) / (areas.length - 1);
409
+ let cursor = first.minimum;
410
+ const targets = areas.map(({ area, minimum, maximum }) => {
411
+ const size = maximum - minimum;
412
+ const targetCenter = cursor + size / 2;
413
+ const currentCenter = (minimum + maximum) / 2;
414
+ const target = {
415
+ x: area.x + (horizontal ? targetCenter - currentCenter : 0) / COMPOSITION_CANVAS.width,
416
+ y: area.y + (horizontal ? 0 : targetCenter - currentCenter) / COMPOSITION_CANVAS.height,
417
+ };
418
+ cursor += size + gap;
419
+ return { area, target, shift: frameDistance(area, target, draft) };
420
+ });
421
+ let refined = draft;
422
+ targets.forEach(({ area, target }) => {
423
+ refined = moveItem(refined, area.id, target);
424
+ });
425
+ return {
426
+ draft: refined,
427
+ applied: {
428
+ method: operation.method,
429
+ methodVersion: 1,
430
+ targetIds: [...operation.targetAreaIds],
431
+ positionShifts: Object.fromEntries(targets.map(({ area, shift }) => [area.id, round(shift)])),
432
+ rotationShifts: {},
433
+ },
434
+ };
435
+ }
436
+ function boundsForArea(area) {
437
+ return geometryBounds(areaGeometry(area, COMPOSITION_CANVAS));
438
+ }
439
+ function alignmentCoordinate(bounds, alignment) {
440
+ if (alignment === "left")
441
+ return bounds.minimumX;
442
+ if (alignment === "horizontal-center")
443
+ return (bounds.minimumX + bounds.maximumX) / 2;
444
+ if (alignment === "right")
445
+ return bounds.maximumX;
446
+ if (alignment === "top")
447
+ return bounds.minimumY;
448
+ if (alignment === "vertical-center")
449
+ return (bounds.minimumY + bounds.maximumY) / 2;
450
+ return bounds.maximumY;
451
+ }
452
+ function areaGeometryInputs(area) {
453
+ return {
454
+ id: area.id,
455
+ primitive: area.primitive,
456
+ area: area.area,
457
+ aspect: area.aspect,
458
+ width: area.width,
459
+ height: area.height,
460
+ };
461
+ }
462
+ function areaMetadata(area) {
463
+ return {
464
+ id: area.id,
465
+ origin: area.origin,
466
+ note: area.note,
467
+ annotation: area.annotation,
468
+ semanticType: area.semanticType,
469
+ shotScale: area.shotScale,
470
+ visualWeight: area.visualWeight,
471
+ displayText: area.displayText,
472
+ isLightSource: area.isLightSource ?? false,
473
+ };
474
+ }
475
+ function axisAngle(first, second) {
476
+ const start = toPixels(first);
477
+ const end = toPixels(second);
478
+ return (Math.atan2(end.y - start.y, end.x - start.x) * 180) / Math.PI;
479
+ }
480
+ function axisSlopeAngle(angle) {
481
+ return ((angle + 270) % 180) - 90;
482
+ }
483
+ function angleDifference(first, second) {
484
+ return ((first - second + 540) % 360) - 180;
485
+ }
486
+ function acuteAxisDifference(first, second) {
487
+ const difference = Math.abs(angleDifference(first, second));
488
+ return Math.min(difference, 180 - difference);
489
+ }
490
+ function toPixels(point) {
491
+ return {
492
+ x: point.x * COMPOSITION_CANVAS.width,
493
+ y: point.y * COMPOSITION_CANVAS.height,
494
+ };
495
+ }
496
+ function frameDistance(first, second, draft) {
497
+ return distance(canvasPointToFrame(first, draft.frame), canvasPointToFrame(second, draft.frame));
498
+ }
499
+ function distance(first, second) {
500
+ return Math.hypot(first.x - second.x, first.y - second.y);
501
+ }
502
+ function maximum(values) {
503
+ return Math.max(0, ...values);
504
+ }
505
+ function equal(first, second) {
506
+ return JSON.stringify(first) === JSON.stringify(second);
507
+ }
508
+ function round(value) {
509
+ return Math.round(value * 1e6) / 1e6;
510
+ }
511
+ function formatValidationErrors(errors) {
512
+ return (errors ?? [])
513
+ .map((error) => {
514
+ if (error.keyword === "additionalProperties") {
515
+ return `${error.instancePath || "plan"} contains unknown field: ${String(error.params.additionalProperty)}`;
516
+ }
517
+ return `${error.instancePath || "plan"} ${error.message ?? "is invalid"}`;
518
+ })
519
+ .join("; ");
520
+ }
521
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/domain/composition/refinement/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CompositionArea, CompositionDraft, DirectionLine, FocusPoint } from "../types.ts";
2
+ import type { CompositionRefinementOperation, DirectedRefinementPlan, FrameDivision, RefinementRelationCheck, RelationOperation } from "./types.ts";
3
+ export declare const FRAME_DIVISIONS: Record<FrameDivision, number>;
4
+ export declare function refinementItem(draft: CompositionDraft, id: string): CompositionArea | FocusPoint | DirectionLine;
5
+ export declare function refinementArea(draft: CompositionDraft, id: string): CompositionArea;
6
+ /** Unrotated dimensions in the common physical coordinate system, not frame fractions. */
7
+ export declare function areaDimensions(area: CompositionArea): {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ export declare function angleError(first: number, second: number): number;
12
+ export declare function applyRelation(draft: CompositionDraft, operation: RelationOperation): CompositionDraft;
13
+ /** Linked focuses retain their local position when their subject is transformed. Moving a linked focus translates its subject. */
14
+ export declare function carryLinkedFocuses(before: CompositionDraft, after: CompositionDraft, plan: DirectedRefinementPlan): CompositionDraft;
15
+ export declare function validateRefinementLinks(draft: CompositionDraft, plan: DirectedRefinementPlan): void;
16
+ export declare function checkRefinementRelation(source: CompositionDraft, final: CompositionDraft, operation: CompositionRefinementOperation, operationIndex: number, execute: (draft: CompositionDraft, operation: CompositionRefinementOperation) => CompositionDraft): RefinementRelationCheck;