@photivra/engine 0.5.1 → 1.0.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 (753) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +218 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +157 -56
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +101 -7
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +99 -7
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +76 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +111 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
  212. package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
  218. package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
  220. package/dist/motion/capture-rotation-trajectory.js +168 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -0
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +23 -4
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +22 -2
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +101 -23
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +32 -11
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +212 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
  394. package/dist/sensor/capture-color-sampling-binding.js +437 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts +157 -0
  401. package/dist/sensor/capture-mode.d.ts.map +1 -0
  402. package/dist/sensor/capture-mode.js +447 -0
  403. package/dist/sensor/capture-mode.js.map +1 -0
  404. package/dist/sensor/color-sampling.d.ts +133 -0
  405. package/dist/sensor/color-sampling.d.ts.map +1 -0
  406. package/dist/sensor/color-sampling.js +245 -0
  407. package/dist/sensor/color-sampling.js.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  409. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  410. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  411. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  412. package/dist/sensor/dark-current.d.ts +169 -0
  413. package/dist/sensor/dark-current.d.ts.map +1 -0
  414. package/dist/sensor/dark-current.js +427 -0
  415. package/dist/sensor/dark-current.js.map +1 -0
  416. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  417. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  418. package/dist/sensor/environment-photo-signal.js +186 -0
  419. package/dist/sensor/environment-photo-signal.js.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  421. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  422. package/dist/sensor/eqe-electron-rate.js +561 -0
  423. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  425. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  426. package/dist/sensor/eqe-local-exposure.js +84 -0
  427. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  429. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  430. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  431. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  432. package/dist/sensor/exposure-window.d.ts +117 -0
  433. package/dist/sensor/exposure-window.d.ts.map +1 -0
  434. package/dist/sensor/exposure-window.js +305 -0
  435. package/dist/sensor/exposure-window.js.map +1 -0
  436. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  437. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  438. package/dist/sensor/iso-signal-chain.js +411 -0
  439. package/dist/sensor/iso-signal-chain.js.map +1 -0
  440. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  441. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  442. package/dist/sensor/local-exposure-binding.js +214 -0
  443. package/dist/sensor/local-exposure-binding.js.map +1 -0
  444. package/dist/sensor/optical-stack.d.ts +132 -0
  445. package/dist/sensor/optical-stack.d.ts.map +1 -0
  446. package/dist/sensor/optical-stack.js +303 -0
  447. package/dist/sensor/optical-stack.js.map +1 -0
  448. package/dist/sensor/photon-energy.d.ts +97 -0
  449. package/dist/sensor/photon-energy.d.ts.map +1 -0
  450. package/dist/sensor/photon-energy.js +390 -0
  451. package/dist/sensor/photon-energy.js.map +1 -0
  452. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  453. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  454. package/dist/sensor/physical-charge-capacity.js +345 -0
  455. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  456. package/dist/sensor/pixel-pitch.d.ts +6 -0
  457. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  458. package/dist/sensor/pixel-pitch.js +6 -0
  459. package/dist/sensor/pixel-pitch.js.map +1 -1
  460. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  461. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  462. package/dist/sensor/radiometry-readiness.js +10 -0
  463. package/dist/sensor/radiometry-readiness.js.map +1 -1
  464. package/dist/sensor/raw-readout.d.ts +314 -0
  465. package/dist/sensor/raw-readout.d.ts.map +1 -0
  466. package/dist/sensor/raw-readout.js +914 -0
  467. package/dist/sensor/raw-readout.js.map +1 -0
  468. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  469. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  470. package/dist/sensor/raw-reconstruction.js +424 -0
  471. package/dist/sensor/raw-reconstruction.js.map +1 -0
  472. package/dist/sensor/readout-exposure-linkage.d.ts +123 -0
  473. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
  474. package/dist/sensor/readout-exposure-linkage.js +222 -0
  475. package/dist/sensor/readout-exposure-linkage.js.map +1 -0
  476. package/dist/sensor/readout-timing.d.ts +137 -0
  477. package/dist/sensor/readout-timing.d.ts.map +1 -0
  478. package/dist/sensor/readout-timing.js +243 -0
  479. package/dist/sensor/readout-timing.js.map +1 -0
  480. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  481. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  482. package/dist/sensor/response-application-compatibility.js +408 -0
  483. package/dist/sensor/response-application-compatibility.js.map +1 -0
  484. package/dist/sensor/response-operating-range.d.ts +173 -0
  485. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  486. package/dist/sensor/response-operating-range.js +672 -0
  487. package/dist/sensor/response-operating-range.js.map +1 -0
  488. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  489. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  490. package/dist/sensor/responsivity-photocurrent.js +644 -0
  491. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  492. package/dist/sensor/sampling-aperture.d.ts +154 -0
  493. package/dist/sensor/sampling-aperture.d.ts.map +1 -0
  494. package/dist/sensor/sampling-aperture.js +388 -0
  495. package/dist/sensor/sampling-aperture.js.map +1 -0
  496. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  497. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  498. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  499. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  500. package/dist/sensor/sensor-geometry.d.ts +12 -0
  501. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  502. package/dist/sensor/sensor-geometry.js +12 -0
  503. package/dist/sensor/sensor-geometry.js.map +1 -1
  504. package/dist/sensor/signal-noise.d.ts +10 -0
  505. package/dist/sensor/signal-noise.d.ts.map +1 -1
  506. package/dist/sensor/signal-noise.js +10 -0
  507. package/dist/sensor/signal-noise.js.map +1 -1
  508. package/dist/sensor/spatial-sample-reduction.d.ts +171 -0
  509. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
  510. package/dist/sensor/spatial-sample-reduction.js +345 -0
  511. package/dist/sensor/spatial-sample-reduction.js.map +1 -0
  512. package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
  513. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
  514. package/dist/sensor/spatial-sampling-quadrature.js +224 -0
  515. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
  516. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  517. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  518. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  519. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  520. package/dist/sensor/spectral-coverage.d.ts +24 -0
  521. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  522. package/dist/sensor/spectral-coverage.js +86 -0
  523. package/dist/sensor/spectral-coverage.js.map +1 -0
  524. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  525. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  526. package/dist/sensor/spectral-quadrature.js +542 -0
  527. package/dist/sensor/spectral-quadrature.js.map +1 -0
  528. package/dist/sensor/spectral-response.d.ts +192 -0
  529. package/dist/sensor/spectral-response.d.ts.map +1 -0
  530. package/dist/sensor/spectral-response.js +664 -0
  531. package/dist/sensor/spectral-response.js.map +1 -0
  532. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  533. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  534. package/dist/sensor/temporal-eqe-sum.js +30 -0
  535. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  536. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  537. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  538. package/dist/sensor/temporal-photo-signal.js +110 -0
  539. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  540. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  541. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  542. package/dist/sensor/temporal-sample-binding.js +32 -0
  543. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  544. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  545. package/dist/simulation/poc-simulation.js +34 -11
  546. package/dist/simulation/poc-simulation.js.map +1 -1
  547. package/dist/stabilization/camera-shake.d.ts +11 -0
  548. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  549. package/dist/stabilization/camera-shake.js +11 -0
  550. package/dist/stabilization/camera-shake.js.map +1 -1
  551. package/dist/stabilization/system.d.ts +218 -0
  552. package/dist/stabilization/system.d.ts.map +1 -0
  553. package/dist/stabilization/system.js +695 -0
  554. package/dist/stabilization/system.js.map +1 -0
  555. package/docs/API_REFERENCE.md +2017 -0
  556. package/docs/API_STYLE.md +132 -0
  557. package/docs/ARCHITECTURE.md +150 -23
  558. package/docs/AUTOMATION_COORDINATION.md +190 -0
  559. package/docs/CAPTURE_COLOR.md +25 -0
  560. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  561. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  562. package/docs/CAPTURE_SDR.md +20 -0
  563. package/docs/DEVELOPERS.md +60 -0
  564. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  565. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  566. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  567. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  568. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  569. package/docs/IMAGE_FORMATION.md +105 -9
  570. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  571. package/docs/MOTION_AND_SIGNAL.md +145 -1
  572. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  573. package/docs/PERFORMANCE_BASELINE.md +56 -0
  574. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  575. package/docs/PHYSICS_FOUNDATION.md +152 -5
  576. package/docs/POC_API.md +2 -0
  577. package/docs/POC_PROJECTION_REUSE.md +124 -0
  578. package/docs/PROCESSED_OUTPUT.md +157 -0
  579. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  580. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  581. package/docs/PROVENANCE.md +4 -0
  582. package/docs/PSF_FOUNDATION.md +110 -88
  583. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  584. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  585. package/docs/RELEASE_1_0.md +65 -0
  586. package/docs/RELEASE_AUDIT.md +38 -0
  587. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  588. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  589. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  590. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  591. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  592. package/docs/SDR_RENDERING.md +33 -0
  593. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  594. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  595. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  596. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  597. package/docs/SENSOR_RAW_FRAME.md +20 -0
  598. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  599. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  600. package/docs/SIMULATED_CAPTURE.md +65 -0
  601. package/docs/STABILIZATION.md +160 -17
  602. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  603. package/docs/TIER_ACCEPTANCE.md +129 -0
  604. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  605. package/docs/USAGE.md +5604 -331
  606. package/docs/V1_COMPOSITION_MAP.md +123 -0
  607. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  608. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  609. package/docs/api/camera-equivalent-focal-length.md +53 -0
  610. package/docs/api/camera-field-of-view.md +119 -0
  611. package/docs/api/camera-projected-object-size.md +54 -0
  612. package/docs/api/capture-capture-export-metadata.md +107 -0
  613. package/docs/api/capture-environment-raw-producer.md +56 -0
  614. package/docs/api/capture-focus-control.md +419 -0
  615. package/docs/api/capture-linear-encoding.md +99 -0
  616. package/docs/api/capture-photographic-export.md +172 -0
  617. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  618. package/docs/api/capture-release-sequence.md +252 -0
  619. package/docs/api/capture-sensor-raw-frame.md +66 -0
  620. package/docs/api/capture-sensor-raw-producer.md +98 -0
  621. package/docs/api/capture-simulated-capture.md +179 -0
  622. package/docs/api/color-capture-color.md +122 -0
  623. package/docs/api/color-white-balance.md +386 -0
  624. package/docs/api/composition-image-formation-plan.md +825 -0
  625. package/docs/api/composition-plan-consumer.md +98 -0
  626. package/docs/api/core-calculation-result.md +220 -0
  627. package/docs/api/core-configuration-error.md +19 -0
  628. package/docs/api/core-image-formation.md +204 -0
  629. package/docs/api/core-scientific-assurance.md +214 -0
  630. package/docs/api/core-spectral-composition.md +268 -0
  631. package/docs/api/core-spectral.md +78 -0
  632. package/docs/api/core-validation.md +34 -0
  633. package/docs/api/core-version.md +14 -0
  634. package/docs/api/equipment-exposure-capabilities.md +270 -0
  635. package/docs/api/equipment-generic-tier-assets.md +82 -0
  636. package/docs/api/equipment-generic-tier-presets.md +103 -0
  637. package/docs/api/equipment-iso-capabilities.md +295 -0
  638. package/docs/api/equipment-metering-capabilities.md +126 -0
  639. package/docs/api/equipment-release-capabilities.md +91 -0
  640. package/docs/api/exports.json +5656 -0
  641. package/docs/api/exposure-exposure-duration-control.md +115 -0
  642. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  643. package/docs/api/exposure-exposure.md +150 -0
  644. package/docs/api/exposure-flash.md +327 -0
  645. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  646. package/docs/api/exposure-metering-target.md +134 -0
  647. package/docs/api/exposure-metering-temporal.md +77 -0
  648. package/docs/api/exposure-metering.md +172 -0
  649. package/docs/api/exposure-program-line.md +64 -0
  650. package/docs/api/motion-camera-rotation.md +215 -0
  651. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  652. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  653. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  654. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  655. package/docs/api/motion-extended-object-projection.md +312 -0
  656. package/docs/api/motion-projected-motion.md +60 -0
  657. package/docs/api/optics-aperture.md +69 -0
  658. package/docs/api/optics-circle-of-confusion.md +46 -0
  659. package/docs/api/optics-complex-pupil-psf.md +193 -0
  660. package/docs/api/optics-depth-of-field.md +92 -0
  661. package/docs/api/optics-diffraction.md +46 -0
  662. package/docs/api/optics-focus-breathing.md +119 -0
  663. package/docs/api/optics-focus-state.md +64 -0
  664. package/docs/api/optics-front-of-lens-filter.md +263 -0
  665. package/docs/api/optics-illumination-vignetting.md +95 -0
  666. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  667. package/docs/api/optics-lens-psf-profile.md +380 -0
  668. package/docs/api/optics-polygon-diffraction.md +68 -0
  669. package/docs/api/optics-profile-contract.md +47 -0
  670. package/docs/api/optics-psf-foundation.md +181 -0
  671. package/docs/api/optics-radial-distortion.md +194 -0
  672. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  673. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  674. package/docs/api/optics-sensor-environment-query.md +58 -0
  675. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  676. package/docs/api/optics-stray-light.md +109 -0
  677. package/docs/api/optics-thin-lens.md +53 -0
  678. package/docs/api/output-capture-corrected-sdr.md +71 -0
  679. package/docs/api/output-capture-geometry.md +500 -0
  680. package/docs/api/output-capture-sdr.md +69 -0
  681. package/docs/api/output-crop.md +47 -0
  682. package/docs/api/output-geometric-transforms.md +199 -0
  683. package/docs/api/output-lens-corrections.md +162 -0
  684. package/docs/api/output-sdr-rendering.md +122 -0
  685. package/docs/api/output-subject-framing-crop.md +59 -0
  686. package/docs/api/schema-camera.md +84 -0
  687. package/docs/api/schema-illumination-spectral.md +77 -0
  688. package/docs/api/schema-illumination-temporal.md +289 -0
  689. package/docs/api/schema-illumination.md +246 -0
  690. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  691. package/docs/api/schema-scene-radiance.md +415 -0
  692. package/docs/api/schema-scene.md +105 -0
  693. package/docs/api/schema-validation.md +25 -0
  694. package/docs/api/sensor-accumulated-charge.md +273 -0
  695. package/docs/api/sensor-architecture.md +155 -0
  696. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  697. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  698. package/docs/api/sensor-capture-mode-timing.md +123 -0
  699. package/docs/api/sensor-capture-mode.md +321 -0
  700. package/docs/api/sensor-color-sampling.md +228 -0
  701. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  702. package/docs/api/sensor-dark-current.md +227 -0
  703. package/docs/api/sensor-environment-photo-signal.md +77 -0
  704. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  705. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  706. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  707. package/docs/api/sensor-exposure-window.md +183 -0
  708. package/docs/api/sensor-iso-signal-chain.md +264 -0
  709. package/docs/api/sensor-local-exposure-binding.md +126 -0
  710. package/docs/api/sensor-optical-stack.md +211 -0
  711. package/docs/api/sensor-photon-energy.md +149 -0
  712. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  713. package/docs/api/sensor-pixel-pitch.md +41 -0
  714. package/docs/api/sensor-radiometry-readiness.md +240 -0
  715. package/docs/api/sensor-raw-readout.md +499 -0
  716. package/docs/api/sensor-raw-reconstruction.md +260 -0
  717. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  718. package/docs/api/sensor-readout-timing.md +209 -0
  719. package/docs/api/sensor-response-application-compatibility.md +256 -0
  720. package/docs/api/sensor-response-operating-range.md +293 -0
  721. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  722. package/docs/api/sensor-sampling-aperture.md +221 -0
  723. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  724. package/docs/api/sensor-sensor-geometry.md +143 -0
  725. package/docs/api/sensor-signal-noise.md +75 -0
  726. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  727. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  728. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  729. package/docs/api/sensor-spectral-coverage.md +33 -0
  730. package/docs/api/sensor-spectral-quadrature.md +183 -0
  731. package/docs/api/sensor-spectral-response.md +291 -0
  732. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  733. package/docs/api/simulation-poc-simulation.md +364 -0
  734. package/docs/api/stabilization-camera-shake.md +71 -0
  735. package/docs/api/stabilization-system.md +442 -0
  736. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  737. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  738. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  739. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  740. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  741. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  742. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  743. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  744. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  745. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  746. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  747. package/docs/examples/production-capture.mjs +34 -0
  748. package/docs/examples/production-request.json +4613 -0
  749. package/docs/examples/quick-start.mjs +12 -0
  750. package/docs/validation/documentation-fragments.json +212 -0
  751. package/docs/validation/release-audit-inventory.json +1306 -0
  752. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  753. package/package.json +18 -4
@@ -0,0 +1,664 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Module boundary and integration notes.
4
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
+ * missing required fields and incompatible scientific data fail at this boundary. Focus is a
6
+ * longitudinal plane or explicit infinity state, never a screen-space distance. The ideal actuator
7
+ * resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring scale or
8
+ * acquisition latency. Target loss, reacquisition, focus lock and release priority remain separate
9
+ * state transitions.
10
+ * Create the initial ideal focus-controller state from an explicit profile, focus plane and public
11
+ * state identity. Focus is a longitudinal plane or explicit infinity state, never a screen-space
12
+ * distance. The ideal actuator resolves supplied target observations; it does not infer a commercial
13
+ * AF sensor, focus-ring scale or acquisition latency. Target loss, reacquisition, focus lock and
14
+ * release priority remain separate state transitions.
15
+ * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
16
+ * limits.
17
+ */
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
19
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
20
+ import { InvalidScientificInputError } from "../core/validation.js";
21
+ import { parseFocusPlane } from "../optics/focus-state.js";
22
+ export const FOCUS_CONTROL_PROFILE_SCHEMA_VERSION = "0.1.0";
23
+ export const FOCUS_CONTROL_STATE_VERSION = "0.1.0";
24
+ const FOCUS_MODES = new Set([
25
+ "manual",
26
+ "single-af",
27
+ "continuous-af"
28
+ ]);
29
+ const RELEASE_PRIORITIES = new Set([
30
+ "focus-priority",
31
+ "release-priority",
32
+ "balanced"
33
+ ]);
34
+ const TARGET_LOSS_REASONS = new Set([
35
+ "occluded",
36
+ "out-of-frame",
37
+ "identity-lost",
38
+ "outside-focus-area"
39
+ ]);
40
+ function requireRecord(value, path) {
41
+ if (typeof value !== "object" ||
42
+ value === null ||
43
+ Array.isArray(value)) {
44
+ throw new InvalidConfigurationError(path + " must be an object.");
45
+ }
46
+ return value;
47
+ }
48
+ function requireNonEmptyString(value, path) {
49
+ if (typeof value !== "string" ||
50
+ value.trim().length === 0) {
51
+ throw new InvalidConfigurationError(path +
52
+ " must be a non-empty string.");
53
+ }
54
+ return value.trim();
55
+ }
56
+ function requireScientificNonEmptyString(value, path) {
57
+ if (typeof value !== "string" ||
58
+ value.trim().length === 0) {
59
+ throw new InvalidScientificInputError(path +
60
+ " must be a non-empty string.");
61
+ }
62
+ return value.trim();
63
+ }
64
+ function requireScientificNonNegativeFinite(value, path) {
65
+ if (typeof value !== "number" ||
66
+ !Number.isFinite(value) ||
67
+ value < 0) {
68
+ throw new InvalidScientificInputError(path +
69
+ " must be finite and greater than or equal to zero.");
70
+ }
71
+ return value;
72
+ }
73
+ function requireScientificPositiveFinite(value, path) {
74
+ if (typeof value !== "number" ||
75
+ !Number.isFinite(value) ||
76
+ value <= 0) {
77
+ throw new InvalidScientificInputError(path +
78
+ " must be finite and greater than zero.");
79
+ }
80
+ return value;
81
+ }
82
+ function parseLimitations(value, path) {
83
+ if (!Array.isArray(value)) {
84
+ throw new InvalidConfigurationError(path + " must be an array.");
85
+ }
86
+ const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
87
+ "[" +
88
+ index +
89
+ "]"));
90
+ if (new Set(parsed).size !==
91
+ parsed.length) {
92
+ throw new InvalidConfigurationError(path +
93
+ " must not contain duplicates.");
94
+ }
95
+ return parsed;
96
+ }
97
+ function parseUniqueEnumList(value, path, allowed) {
98
+ if (!Array.isArray(value) ||
99
+ value.length === 0) {
100
+ throw new InvalidConfigurationError(path +
101
+ " must be a non-empty array.");
102
+ }
103
+ const parsed = value.map((entry, index) => {
104
+ if (typeof entry !==
105
+ "string" ||
106
+ !allowed.has(entry)) {
107
+ throw new InvalidConfigurationError(path +
108
+ "[" +
109
+ index +
110
+ "] is invalid.");
111
+ }
112
+ return entry;
113
+ });
114
+ if (new Set(parsed).size !==
115
+ parsed.length) {
116
+ throw new InvalidConfigurationError(path +
117
+ " must not contain duplicates.");
118
+ }
119
+ return parsed;
120
+ }
121
+ /**
122
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
123
+ * missing required fields and incompatible scientific data fail at this boundary.
124
+ *
125
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
126
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
127
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
128
+ * separate state transitions.
129
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
130
+ * @returns FocusControlProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
131
+ *
132
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
133
+ */
134
+ export function parseFocusControlProfile(value) {
135
+ const record = requireRecord(value, "focusControlProfile");
136
+ if (record.schemaVersion !==
137
+ FOCUS_CONTROL_PROFILE_SCHEMA_VERSION) {
138
+ throw new InvalidConfigurationError('focusControlProfile.schemaVersion must be "' +
139
+ FOCUS_CONTROL_PROFILE_SCHEMA_VERSION +
140
+ '".');
141
+ }
142
+ if (record.scientificStatus !==
143
+ "approximation") {
144
+ throw new InvalidConfigurationError('focusControlProfile.scientificStatus must be "approximation".');
145
+ }
146
+ const actuator = requireRecord(record.actuator, "focusControlProfile.actuator");
147
+ if (actuator.kind !==
148
+ "ideal-instantaneous") {
149
+ throw new InvalidConfigurationError('focusControlProfile.actuator.kind must be "ideal-instantaneous" in schema 0.1.0.');
150
+ }
151
+ if (record
152
+ .continuousTargetLossPolicy !==
153
+ "hold-last-focus-require-explicit-reacquisition") {
154
+ throw new InvalidConfigurationError('focusControlProfile.continuousTargetLossPolicy must be "hold-last-focus-require-explicit-reacquisition".');
155
+ }
156
+ return {
157
+ schemaVersion: FOCUS_CONTROL_PROFILE_SCHEMA_VERSION,
158
+ profileId: requireNonEmptyString(record.profileId, "focusControlProfile.profileId"),
159
+ profileVersion: requireNonEmptyString(record.profileVersion, "focusControlProfile.profileVersion"),
160
+ scientificStatus: "approximation",
161
+ supportedModes: parseUniqueEnumList(record.supportedModes, "focusControlProfile.supportedModes", FOCUS_MODES),
162
+ actuator: {
163
+ kind: "ideal-instantaneous",
164
+ evidence: parseEvidenceList(actuator.evidence, "focusControlProfile.actuator.evidence")
165
+ },
166
+ continuousTargetLossPolicy: "hold-last-focus-require-explicit-reacquisition",
167
+ supportedReleasePriorities: parseUniqueEnumList(record
168
+ .supportedReleasePriorities, "focusControlProfile.supportedReleasePriorities", RELEASE_PRIORITIES),
169
+ evidence: parseEvidenceList(record.evidence, "focusControlProfile.evidence"),
170
+ limitations: parseLimitations(record.limitations, "focusControlProfile.limitations")
171
+ };
172
+ }
173
+ function cloneJson(value) {
174
+ return JSON.parse(JSON.stringify(value));
175
+ }
176
+ function deepFreeze(value) {
177
+ if (typeof value !== "object" ||
178
+ value === null ||
179
+ Object.isFrozen(value)) {
180
+ return value;
181
+ }
182
+ Object.freeze(value);
183
+ for (const child of Object.values(value)) {
184
+ deepFreeze(child);
185
+ }
186
+ return value;
187
+ }
188
+ function immutableState(state) {
189
+ return deepFreeze(cloneJson(state));
190
+ }
191
+ function stateBase(stateId, profile, mode, focus, acquisitionState, eventTimeSeconds, focusResolvedAtSeconds, activeTargetId, activeFocusAreaId, lock) {
192
+ return immutableState({
193
+ version: FOCUS_CONTROL_STATE_VERSION,
194
+ stateId: requireScientificNonEmptyString(stateId, "stateId"),
195
+ sourceProfile: {
196
+ profileId: profile.profileId,
197
+ profileVersion: profile.profileVersion
198
+ },
199
+ profileLimitations: [
200
+ ...profile.limitations
201
+ ],
202
+ mode,
203
+ acquisitionState,
204
+ focus: parseFocusPlane(focus),
205
+ ...(activeTargetId ===
206
+ undefined
207
+ ? {}
208
+ : {
209
+ activeTargetId
210
+ }),
211
+ ...(activeFocusAreaId ===
212
+ undefined
213
+ ? {}
214
+ : {
215
+ activeFocusAreaId
216
+ }),
217
+ lastEventTimeSeconds: eventTimeSeconds,
218
+ focusResolvedAtSeconds,
219
+ locked: acquisitionState ===
220
+ "locked",
221
+ ...(lock === undefined
222
+ ? {}
223
+ : {
224
+ lock
225
+ }),
226
+ actuatorModel: "ideal-instantaneous",
227
+ continuousTargetLossPolicy: profile
228
+ .continuousTargetLossPolicy,
229
+ exposureModified: false,
230
+ meteringModified: false,
231
+ whiteBalanceModified: false,
232
+ subjectTrackingRecognitionModeled: false,
233
+ rendererCoordinatesConsumed: false,
234
+ limitations: [
235
+ ...profile.limitations,
236
+ "Focus target observations use longitudinal camera-space/conjugate distance, not renderer ray length.",
237
+ "Ideal instantaneous focus actuation is an approximation and does not represent commercial AF speed, error, hunting, recognition, or low-light behavior.",
238
+ "Focus control does not modify exposure, metering, white balance, or scene illumination."
239
+ ]
240
+ });
241
+ }
242
+ function requireSupportedMode(profile, mode) {
243
+ if (!profile.supportedModes
244
+ .includes(mode)) {
245
+ throw new InvalidScientificInputError("Selected focus-control mode is not supported by the profile.");
246
+ }
247
+ }
248
+ function requireMonotonicEventTime(current, eventTimeSeconds) {
249
+ const parsed = requireScientificNonNegativeFinite(eventTimeSeconds, "eventTimeSeconds");
250
+ if (parsed <
251
+ current.lastEventTimeSeconds) {
252
+ throw new InvalidScientificInputError("Focus-control event time must not move backward.");
253
+ }
254
+ return parsed;
255
+ }
256
+ function verifyStateProfile(state, profile) {
257
+ if (state.sourceProfile
258
+ .profileId !==
259
+ profile.profileId ||
260
+ state.sourceProfile
261
+ .profileVersion !==
262
+ profile.profileVersion) {
263
+ throw new InvalidScientificInputError("Focus-control state/profile identity does not match.");
264
+ }
265
+ }
266
+ /**
267
+ * Create the initial ideal focus-controller state from an explicit profile, focus plane and public
268
+ * state identity.
269
+ *
270
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
271
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
272
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
273
+ * separate state transitions.
274
+ * @param input - CreateFocusControlStateInput. See the linked contract for coordinate, unit and profile binding semantics.
275
+ * @returns FocusControlState. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
276
+ *
277
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
278
+ */
279
+ export function createFocusControlState(input) {
280
+ const profile = parseFocusControlProfile(input.profile);
281
+ requireSupportedMode(profile, input.mode);
282
+ const time = input.initialTimeSeconds ===
283
+ undefined
284
+ ? 0
285
+ : requireScientificNonNegativeFinite(input.initialTimeSeconds, "initialTimeSeconds");
286
+ return stateBase(input.stateId, profile, input.mode, input.initialFocus, "idle", time, time);
287
+ }
288
+ function stateProfileView(state) {
289
+ return {
290
+ schemaVersion: FOCUS_CONTROL_PROFILE_SCHEMA_VERSION,
291
+ profileId: state.sourceProfile
292
+ .profileId,
293
+ profileVersion: state.sourceProfile
294
+ .profileVersion,
295
+ scientificStatus: "approximation",
296
+ supportedModes: [
297
+ state.mode
298
+ ],
299
+ actuator: {
300
+ kind: "ideal-instantaneous",
301
+ evidence: []
302
+ },
303
+ continuousTargetLossPolicy: state
304
+ .continuousTargetLossPolicy,
305
+ supportedReleasePriorities: [
306
+ "focus-priority",
307
+ "release-priority",
308
+ "balanced"
309
+ ],
310
+ evidence: [],
311
+ limitations: state.profileLimitations
312
+ };
313
+ }
314
+ /**
315
+ * Return a manual focus transition to the supplied finite/infinity plane without inventing a lens
316
+ * actuator or focus-ring conversion.
317
+ *
318
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
319
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
320
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
321
+ * separate state transitions.
322
+ * @param input - SetManualFocusStateInput. See the linked contract for coordinate, unit and profile binding semantics.
323
+ * @returns FocusControlState. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
324
+ *
325
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
326
+ */
327
+ export function setManualFocusState(input) {
328
+ if (input.state.mode !==
329
+ "manual") {
330
+ throw new InvalidScientificInputError("setManualFocusState requires manual focus mode.");
331
+ }
332
+ if (input.state.locked) {
333
+ throw new InvalidScientificInputError("Manual focus cannot change while focus lock is active.");
334
+ }
335
+ if (input.commandId !==
336
+ undefined) {
337
+ requireScientificNonEmptyString(input.commandId, "commandId");
338
+ }
339
+ const time = requireMonotonicEventTime(input.state, input.eventTimeSeconds);
340
+ return stateBase(input.stateId, stateProfileView(input.state), "manual", input.focus, "idle", time, time);
341
+ }
342
+ function parseObservation(observation) {
343
+ const targetId = requireScientificNonEmptyString(observation.targetId, "observation.targetId");
344
+ const observedAtSeconds = requireScientificNonNegativeFinite(observation
345
+ .observedAtSeconds, "observation.observedAtSeconds");
346
+ const focusAreaId = observation.focusAreaId ===
347
+ undefined
348
+ ? undefined
349
+ : requireScientificNonEmptyString(observation.focusAreaId, "observation.focusAreaId");
350
+ if (observation.kind ===
351
+ "finite-surface") {
352
+ return {
353
+ kind: "finite-surface",
354
+ targetId,
355
+ ...(focusAreaId ===
356
+ undefined
357
+ ? {}
358
+ : {
359
+ focusAreaId
360
+ }),
361
+ observedAtSeconds,
362
+ longitudinalDistanceM: requireScientificPositiveFinite(observation
363
+ .longitudinalDistanceM, "observation.longitudinalDistanceM")
364
+ };
365
+ }
366
+ if (observation.kind ===
367
+ "infinity-environment") {
368
+ return {
369
+ kind: "infinity-environment",
370
+ targetId,
371
+ ...(focusAreaId ===
372
+ undefined
373
+ ? {}
374
+ : {
375
+ focusAreaId
376
+ }),
377
+ observedAtSeconds
378
+ };
379
+ }
380
+ if (observation.kind ===
381
+ "unavailable" &&
382
+ TARGET_LOSS_REASONS.has(observation.reason)) {
383
+ return {
384
+ kind: "unavailable",
385
+ targetId,
386
+ ...(focusAreaId ===
387
+ undefined
388
+ ? {}
389
+ : {
390
+ focusAreaId
391
+ }),
392
+ observedAtSeconds,
393
+ reason: observation.reason
394
+ };
395
+ }
396
+ throw new InvalidScientificInputError("observation.kind/reason is invalid.");
397
+ }
398
+ function focusFromObservation(observation) {
399
+ if (observation.kind ===
400
+ "infinity-environment") {
401
+ return {
402
+ kind: "infinity"
403
+ };
404
+ }
405
+ return {
406
+ kind: "finite",
407
+ distanceM: observation
408
+ .longitudinalDistanceM
409
+ };
410
+ }
411
+ function focusEquals(a, b) {
412
+ if (a.kind !== b.kind) {
413
+ return false;
414
+ }
415
+ if (a.kind === "infinity" ||
416
+ b.kind === "infinity") {
417
+ return true;
418
+ }
419
+ return (a.distanceM ===
420
+ b.distanceM);
421
+ }
422
+ function stateFromResolvedTarget(input, observation) {
423
+ const focus = focusFromObservation(observation);
424
+ const state = stateBase(input.stateId, stateProfileView(input.state), input.state.mode, focus, "acquired", observation
425
+ .observedAtSeconds, observation
426
+ .observedAtSeconds, observation.targetId, observation.focusAreaId);
427
+ return {
428
+ state,
429
+ targetObservationApplied: true,
430
+ focusChanged: !focusEquals(input.state.focus, focus),
431
+ acquisitionEvent: input.event,
432
+ actuatorModel: "ideal-instantaneous",
433
+ silentRetargetingPerformed: false
434
+ };
435
+ }
436
+ function unchangedResolution(input) {
437
+ return {
438
+ state: input.state,
439
+ targetObservationApplied: false,
440
+ focusChanged: false,
441
+ acquisitionEvent: input.event,
442
+ actuatorModel: "ideal-instantaneous",
443
+ silentRetargetingPerformed: false
444
+ };
445
+ }
446
+ /**
447
+ * Resolve an explicit available/lost target observation under the selected single/continuous AF
448
+ * policy, retaining acquisition and reacquisition disposition.
449
+ *
450
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
451
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
452
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
453
+ * separate state transitions.
454
+ * @param input - ResolveFocusTargetObservationInput. See the linked contract for coordinate, unit and profile binding semantics.
455
+ * @returns FocusTargetResolution. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
456
+ *
457
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
458
+ */
459
+ export function resolveFocusTargetObservation(input) {
460
+ if (input.event !== "acquire" &&
461
+ input.event !== "update") {
462
+ throw new InvalidScientificInputError('Focus target event must be "acquire" or "update".');
463
+ }
464
+ if (input.state.mode ===
465
+ "manual") {
466
+ throw new InvalidScientificInputError("Manual focus does not automatically consume autofocus target observations.");
467
+ }
468
+ const observation = parseObservation(input.observation);
469
+ requireMonotonicEventTime(input.state, observation
470
+ .observedAtSeconds);
471
+ if (input.state.locked) {
472
+ return unchangedResolution(input);
473
+ }
474
+ if (input.state.mode ===
475
+ "single-af") {
476
+ if (input.event ===
477
+ "update" &&
478
+ input.state
479
+ .acquisitionState ===
480
+ "acquired") {
481
+ return unchangedResolution(input);
482
+ }
483
+ if (input.event !==
484
+ "acquire") {
485
+ throw new InvalidScientificInputError("Single AF requires an explicit acquire event before target updates.");
486
+ }
487
+ if (observation.kind ===
488
+ "unavailable") {
489
+ const state = stateBase(input.stateId, stateProfileView(input.state), "single-af", input.state.focus, "target-lost", observation
490
+ .observedAtSeconds, input.state
491
+ .focusResolvedAtSeconds, observation.targetId, observation.focusAreaId);
492
+ return {
493
+ state,
494
+ targetObservationApplied: true,
495
+ focusChanged: false,
496
+ acquisitionEvent: input.event,
497
+ actuatorModel: "ideal-instantaneous",
498
+ silentRetargetingPerformed: false
499
+ };
500
+ }
501
+ return stateFromResolvedTarget(input, observation);
502
+ }
503
+ if (input.event ===
504
+ "update") {
505
+ if (input.state
506
+ .activeTargetId ===
507
+ undefined) {
508
+ throw new InvalidScientificInputError("Continuous AF requires an explicit acquire event before updates.");
509
+ }
510
+ if (observation.targetId !==
511
+ input.state
512
+ .activeTargetId) {
513
+ throw new InvalidScientificInputError("Continuous AF update targetId must match the active target; silent retargeting is not permitted.");
514
+ }
515
+ if (input.state
516
+ .acquisitionState ===
517
+ "target-lost") {
518
+ throw new InvalidScientificInputError("Continuous AF target loss requires an explicit acquire event before reacquisition.");
519
+ }
520
+ }
521
+ if (observation.kind ===
522
+ "unavailable") {
523
+ const state = stateBase(input.stateId, stateProfileView(input.state), "continuous-af", input.state.focus, "target-lost", observation
524
+ .observedAtSeconds, input.state
525
+ .focusResolvedAtSeconds, observation.targetId, observation.focusAreaId);
526
+ return {
527
+ state,
528
+ targetObservationApplied: true,
529
+ focusChanged: false,
530
+ acquisitionEvent: input.event,
531
+ actuatorModel: "ideal-instantaneous",
532
+ silentRetargetingPerformed: false
533
+ };
534
+ }
535
+ return stateFromResolvedTarget(input, observation);
536
+ }
537
+ /**
538
+ * Return an explicit lock/unlock transition without changing the underlying physical focus plane.
539
+ *
540
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
541
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
542
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
543
+ * separate state transitions.
544
+ * @param input - SetFocusLockInput. See the linked contract for coordinate, unit and profile binding semantics.
545
+ * @returns FocusControlState. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
546
+ *
547
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
548
+ */
549
+ export function setFocusLock(input) {
550
+ const time = requireMonotonicEventTime(input.state, input.eventTimeSeconds);
551
+ if (input.locked) {
552
+ if (input.state.locked) {
553
+ return input.state;
554
+ }
555
+ return stateBase(input.stateId, stateProfileView(input.state), input.state.mode, input.state.focus, "locked", time, input.state
556
+ .focusResolvedAtSeconds, input.state
557
+ .activeTargetId, input.state
558
+ .activeFocusAreaId, {
559
+ lockedAtSeconds: time,
560
+ resumeAcquisitionState: input.state
561
+ .acquisitionState
562
+ });
563
+ }
564
+ if (!input.state.locked) {
565
+ return input.state;
566
+ }
567
+ const resume = input.state.lock
568
+ ?.resumeAcquisitionState;
569
+ if (resume === undefined) {
570
+ throw new InvalidScientificInputError("Locked focus state is missing its resume acquisition state.");
571
+ }
572
+ return stateBase(input.stateId, stateProfileView(input.state), input.state.mode, input.state.focus, resume, time, input.state
573
+ .focusResolvedAtSeconds, input.state
574
+ .activeTargetId, input.state
575
+ .activeFocusAreaId);
576
+ }
577
+ /**
578
+ * Report whether release may proceed under focus-priority or release-priority policy; this does not
579
+ * operate a shutter.
580
+ *
581
+ * Focus is a longitudinal plane or explicit infinity state, never a screen-space distance. The ideal
582
+ * actuator resolves supplied target observations; it does not infer a commercial AF sensor, focus-ring
583
+ * scale or acquisition latency. Target loss, reacquisition, focus lock and release priority remain
584
+ * separate state transitions.
585
+ * @param input - AssessFocusReleaseGateInput. See the linked contract for coordinate, unit and profile binding semantics.
586
+ * @returns FocusReleaseGateAssessment. Read structured blockers before consuming an authorization.
587
+ *
588
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
589
+ */
590
+ export function assessFocusReleaseGate(input) {
591
+ const profile = parseFocusControlProfile(input.profile);
592
+ verifyStateProfile(input.state, profile);
593
+ if (!profile
594
+ .supportedReleasePriorities
595
+ .includes(input.priority)) {
596
+ throw new InvalidScientificInputError("Selected focus/release priority is not supported by the profile.");
597
+ }
598
+ if (input.priority ===
599
+ "release-priority") {
600
+ return {
601
+ priority: input.priority,
602
+ releaseAuthorized: true,
603
+ reason: "release-priority-bypasses-focus-gate",
604
+ requiresProfileSpecificBalancedPolicy: false,
605
+ opticalFocusModified: false,
606
+ exposureModified: false
607
+ };
608
+ }
609
+ if (input.priority ===
610
+ "balanced") {
611
+ return {
612
+ priority: input.priority,
613
+ releaseAuthorized: false,
614
+ reason: "balanced-policy-not-modeled",
615
+ requiresProfileSpecificBalancedPolicy: true,
616
+ opticalFocusModified: false,
617
+ exposureModified: false
618
+ };
619
+ }
620
+ if (input.state.mode ===
621
+ "manual") {
622
+ return {
623
+ priority: input.priority,
624
+ releaseAuthorized: true,
625
+ reason: "manual-focus-state",
626
+ requiresProfileSpecificBalancedPolicy: false,
627
+ opticalFocusModified: false,
628
+ exposureModified: false
629
+ };
630
+ }
631
+ if (input.state
632
+ .acquisitionState ===
633
+ "locked") {
634
+ return {
635
+ priority: input.priority,
636
+ releaseAuthorized: true,
637
+ reason: "focus-locked",
638
+ requiresProfileSpecificBalancedPolicy: false,
639
+ opticalFocusModified: false,
640
+ exposureModified: false
641
+ };
642
+ }
643
+ if (input.state
644
+ .acquisitionState ===
645
+ "acquired") {
646
+ return {
647
+ priority: input.priority,
648
+ releaseAuthorized: true,
649
+ reason: "focus-acquired",
650
+ requiresProfileSpecificBalancedPolicy: false,
651
+ opticalFocusModified: false,
652
+ exposureModified: false
653
+ };
654
+ }
655
+ return {
656
+ priority: input.priority,
657
+ releaseAuthorized: false,
658
+ reason: "focus-not-acquired",
659
+ requiresProfileSpecificBalancedPolicy: false,
660
+ opticalFocusModified: false,
661
+ exposureModified: false
662
+ };
663
+ }
664
+ //# sourceMappingURL=focus-control.js.map