@adobe/data 0.7.4 → 0.8.1

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 (621) hide show
  1. package/dist/blob/blob-handle.d.ts +2 -2
  2. package/dist/blob/blob-meta.d.ts +2 -2
  3. package/dist/cache/blob-store.d.ts +2 -2
  4. package/dist/cache/data-cache.d.ts +1 -1
  5. package/dist/cache/functions/memoize.d.ts +1 -3
  6. package/dist/cache/functions/memoize.js +1 -3
  7. package/dist/cache/functions/memoize.js.map +1 -1
  8. package/dist/cache/managed-array.d.ts +2 -2
  9. package/dist/cache/managed-array.js.map +1 -1
  10. package/dist/cache/memory-allocator.d.ts +1 -1
  11. package/dist/cache/memory-allocator.js +2 -2
  12. package/dist/cache/memory-allocator.js.map +1 -1
  13. package/dist/ecs/archetype/create-archetype.d.ts +2 -2
  14. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  15. package/dist/ecs/archetype/create-archetype.test.js +9 -9
  16. package/dist/ecs/archetype/create-archetype.test.js.map +1 -1
  17. package/dist/ecs/archetype/delete-row.test.js +4 -4
  18. package/dist/ecs/archetype/delete-row.test.js.map +1 -1
  19. package/dist/ecs/component-schemas.d.ts +1 -1
  20. package/dist/ecs/database/create-database.test.js +6 -6
  21. package/dist/ecs/database/create-database.test.js.map +1 -1
  22. package/dist/ecs/database/database-schema/create-database-schema.d.ts +1 -1
  23. package/dist/ecs/database/database-schema/database-schema.d.ts +1 -1
  24. package/dist/ecs/database/index.d.ts +1 -0
  25. package/dist/ecs/database/observe-dependent-value.js +3 -3
  26. package/dist/ecs/database/observe-dependent-value.js.map +1 -1
  27. package/dist/ecs/database/observe-select-entities.js +2 -2
  28. package/dist/ecs/database/observe-select-entities.js.map +1 -1
  29. package/dist/ecs/database/observe-select-entities.performance.test.js +6 -6
  30. package/dist/ecs/database/observe-select-entities.performance.test.js.map +1 -1
  31. package/dist/ecs/database/observe-select-entities.test.js +6 -6
  32. package/dist/ecs/database/observe-select-entities.test.js.map +1 -1
  33. package/dist/ecs/database/observed/create-observed-database.js +2 -2
  34. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  35. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +6 -6
  36. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  37. package/dist/ecs/entity-location-table/entity-location.d.ts +2 -2
  38. package/dist/ecs/entity-location-table/entity-location.js +3 -3
  39. package/dist/ecs/entity-location-table/entity-location.js.map +1 -1
  40. package/dist/ecs/entity.d.ts +2 -2
  41. package/dist/ecs/entity.js +2 -2
  42. package/dist/ecs/entity.js.map +1 -1
  43. package/dist/ecs/index.d.ts +3 -0
  44. package/dist/ecs/index.js.map +1 -1
  45. package/dist/ecs/resource-schemas.d.ts +1 -1
  46. package/dist/ecs/store/core/core.d.ts +1 -1
  47. package/dist/ecs/store/core/create-core.d.ts +2 -2
  48. package/dist/ecs/store/core/create-core.js +2 -2
  49. package/dist/ecs/store/core/create-core.js.map +1 -1
  50. package/dist/ecs/store/core/create-core.test.js +6 -6
  51. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  52. package/dist/ecs/store/core/select-entities.test.js +3 -3
  53. package/dist/ecs/store/core/select-entities.test.js.map +1 -1
  54. package/dist/ecs/store/create-store.d.ts +1 -1
  55. package/dist/ecs/store/create-store.js.map +1 -1
  56. package/dist/ecs/store/create-store.test.js +8 -8
  57. package/dist/ecs/store/create-store.test.js.map +1 -1
  58. package/dist/ecs/store/index.d.ts +2 -0
  59. package/dist/ecs/store/store.d.ts +1 -1
  60. package/dist/ecs/undo-redo-service/create-undo-redo-service.js +5 -7
  61. package/dist/ecs/undo-redo-service/create-undo-redo-service.js.map +1 -1
  62. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js +4 -4
  63. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js.map +1 -1
  64. package/dist/ecs/undo-redo-service/undo-redo-service.d.ts +1 -1
  65. package/dist/index.d.ts +2 -2
  66. package/dist/is-data.d.ts +3 -4
  67. package/dist/lit/hooks/use-drag-observe.d.ts +2 -1
  68. package/dist/lit/hooks/use-drag-observe.js +2 -2
  69. package/dist/lit/hooks/use-drag-observe.js.map +1 -1
  70. package/dist/lit/hooks/use-drag-transaction.js +3 -3
  71. package/dist/lit/hooks/use-drag-transaction.js.map +1 -1
  72. package/dist/lit/hooks/use-draggable.d.ts +1 -1
  73. package/dist/lit/hooks/use-draggable.js +1 -1
  74. package/dist/lit/hooks/use-draggable.js.map +1 -1
  75. package/dist/lit/hooks/use-observable-values.js +2 -2
  76. package/dist/lit/hooks/use-observable-values.js.map +1 -1
  77. package/dist/lit/index.d.ts +1 -0
  78. package/dist/math/aabb/center.d.ts +3 -0
  79. package/dist/math/aabb/center.js +6 -0
  80. package/dist/math/aabb/center.js.map +1 -0
  81. package/dist/math/aabb/face/aabb-face.test.js +55 -0
  82. package/dist/math/aabb/face/aabb-face.test.js.map +1 -0
  83. package/dist/math/aabb/face/functions.d.ts +47 -0
  84. package/dist/math/{face/face.js → aabb/face/functions.js} +66 -28
  85. package/dist/math/aabb/face/functions.js.map +1 -0
  86. package/dist/math/aabb/face/index.d.ts +4 -0
  87. package/dist/{ecs/world/world-schema/world-schema.js → math/aabb/face/index.js} +2 -2
  88. package/dist/math/aabb/face/index.js.map +1 -0
  89. package/dist/math/aabb/face/public.d.ts +2 -0
  90. package/dist/{ecs/entity/u32.js → math/aabb/face/public.js} +3 -3
  91. package/dist/math/aabb/face/public.js.map +1 -0
  92. package/dist/math/aabb/face/schema.d.ts +5 -0
  93. package/dist/math/aabb/face/schema.js +27 -0
  94. package/dist/math/aabb/face/schema.js.map +1 -0
  95. package/dist/math/aabb/index.d.ts +4 -0
  96. package/dist/{ecs/world/world-schema → math/aabb}/index.js +1 -2
  97. package/dist/math/aabb/index.js.map +1 -0
  98. package/dist/math/aabb/layout.d.ts +1 -0
  99. package/dist/math/aabb/layout.js +25 -0
  100. package/dist/math/aabb/layout.js.map +1 -0
  101. package/dist/math/aabb/line-intersection.d.ts +10 -0
  102. package/dist/math/aabb/line-intersection.js +42 -0
  103. package/dist/math/aabb/line-intersection.js.map +1 -0
  104. package/dist/math/aabb/line-intersection.test.js +1 -1
  105. package/dist/math/aabb/line-intersection.test.js.map +1 -1
  106. package/dist/math/aabb/public.d.ts +6 -0
  107. package/dist/math/aabb/public.js +28 -0
  108. package/dist/math/aabb/public.js.map +1 -0
  109. package/dist/math/aabb/schema.d.ts +33 -0
  110. package/dist/math/aabb/schema.js +36 -0
  111. package/dist/math/aabb/schema.js.map +1 -0
  112. package/dist/math/aabb/unit.d.ts +5 -0
  113. package/dist/math/aabb/unit.js +8 -0
  114. package/dist/math/aabb/unit.js.map +1 -0
  115. package/dist/math/f32/index.d.ts +4 -0
  116. package/dist/math/f32/index.js +23 -0
  117. package/dist/math/f32/index.js.map +1 -0
  118. package/dist/math/f32/public.d.ts +1 -0
  119. package/dist/math/{picking/pick-result.js → f32/public.js} +2 -2
  120. package/dist/math/f32/public.js.map +1 -0
  121. package/dist/math/f32/schema.d.ts +5 -0
  122. package/dist/math/f32/schema.js +27 -0
  123. package/dist/math/f32/schema.js.map +1 -0
  124. package/dist/math/f64/index.d.ts +4 -0
  125. package/dist/math/f64/index.js +2 -0
  126. package/dist/math/f64/index.js.map +1 -0
  127. package/dist/math/f64/public.d.ts +1 -0
  128. package/dist/math/f64/public.js +23 -0
  129. package/dist/math/f64/public.js.map +1 -0
  130. package/dist/math/f64/schema.d.ts +5 -0
  131. package/dist/math/f64/schema.js +6 -0
  132. package/dist/math/f64/schema.js.map +1 -0
  133. package/dist/math/i32/index.d.ts +4 -0
  134. package/dist/math/i32/index.js +23 -0
  135. package/dist/math/i32/index.js.map +1 -0
  136. package/dist/math/i32/public.d.ts +1 -0
  137. package/dist/math/i32/public.js +23 -0
  138. package/dist/math/i32/public.js.map +1 -0
  139. package/dist/math/i32/schema.d.ts +6 -0
  140. package/dist/math/i32/schema.js +28 -0
  141. package/dist/math/i32/schema.js.map +1 -0
  142. package/dist/math/index.d.ts +14 -13
  143. package/dist/math/index.js +14 -13
  144. package/dist/math/index.js.map +1 -1
  145. package/dist/math/line2/functions.d.ts +5 -0
  146. package/dist/math/line2/functions.js +61 -0
  147. package/dist/math/line2/functions.js.map +1 -0
  148. package/dist/math/line2/index.d.ts +4 -0
  149. package/dist/math/line2/index.js +23 -0
  150. package/dist/math/line2/index.js.map +1 -0
  151. package/dist/math/line2/layout.d.ts +1 -0
  152. package/dist/math/line2/layout.js +25 -0
  153. package/dist/math/line2/layout.js.map +1 -0
  154. package/dist/math/line2/public.d.ts +3 -0
  155. package/dist/math/line2/public.js +25 -0
  156. package/dist/math/line2/public.js.map +1 -0
  157. package/dist/math/line2/schema.d.ts +33 -0
  158. package/dist/math/line2/schema.js +37 -0
  159. package/dist/math/line2/schema.js.map +1 -0
  160. package/dist/math/line3/functions.d.ts +17 -0
  161. package/dist/math/line3/functions.js +70 -0
  162. package/dist/math/line3/functions.js.map +1 -0
  163. package/dist/math/line3/index.d.ts +4 -0
  164. package/dist/math/line3/index.js +23 -0
  165. package/dist/math/line3/index.js.map +1 -0
  166. package/dist/math/line3/layout.d.ts +1 -0
  167. package/dist/math/line3/layout.js +25 -0
  168. package/dist/math/line3/layout.js.map +1 -0
  169. package/dist/math/line3/public.d.ts +3 -0
  170. package/dist/math/line3/public.js +25 -0
  171. package/dist/math/line3/public.js.map +1 -0
  172. package/dist/math/line3/schema.d.ts +33 -0
  173. package/dist/math/line3/schema.js +37 -0
  174. package/dist/math/line3/schema.js.map +1 -0
  175. package/dist/math/mat4x4/functions.d.ts +23 -0
  176. package/dist/math/mat4x4/functions.js +236 -0
  177. package/dist/math/mat4x4/functions.js.map +1 -0
  178. package/dist/math/mat4x4/index.d.ts +26 -0
  179. package/dist/math/{picking → mat4x4}/index.js +23 -5
  180. package/dist/math/mat4x4/index.js.map +1 -0
  181. package/dist/math/mat4x4/layout.d.ts +1 -0
  182. package/dist/math/mat4x4/layout.js +25 -0
  183. package/dist/math/mat4x4/layout.js.map +1 -0
  184. package/dist/math/mat4x4/public.d.ts +3 -0
  185. package/dist/math/mat4x4/public.js +25 -0
  186. package/dist/math/mat4x4/public.js.map +1 -0
  187. package/dist/math/mat4x4/schema.d.ts +11 -0
  188. package/dist/math/mat4x4/schema.js +30 -0
  189. package/dist/math/mat4x4/schema.js.map +1 -0
  190. package/dist/math/plane/functions.d.ts +16 -0
  191. package/dist/math/plane/functions.js +55 -0
  192. package/dist/math/plane/functions.js.map +1 -0
  193. package/dist/math/plane/index.d.ts +4 -0
  194. package/dist/math/plane/index.js +23 -0
  195. package/dist/math/plane/index.js.map +1 -0
  196. package/dist/math/plane/layout.d.ts +1 -0
  197. package/dist/math/plane/layout.js +25 -0
  198. package/dist/math/plane/layout.js.map +1 -0
  199. package/dist/math/plane/public.d.ts +3 -0
  200. package/dist/math/plane/public.js +25 -0
  201. package/dist/math/plane/public.js.map +1 -0
  202. package/dist/math/plane/schema.d.ts +24 -0
  203. package/dist/math/plane/schema.js +34 -0
  204. package/dist/math/plane/schema.js.map +1 -0
  205. package/dist/math/quat/constants/functions.d.ts +43 -0
  206. package/dist/math/quat/constants/functions.js +258 -0
  207. package/dist/math/quat/constants/functions.js.map +1 -0
  208. package/dist/math/quat/functions.d.ts +43 -0
  209. package/dist/math/quat/functions.js +258 -0
  210. package/dist/math/quat/functions.js.map +1 -0
  211. package/dist/math/quat/index.d.ts +4 -0
  212. package/dist/math/quat/index.js +23 -0
  213. package/dist/math/quat/index.js.map +1 -0
  214. package/dist/math/quat/layout.d.ts +1 -0
  215. package/dist/math/quat/layout.js +25 -0
  216. package/dist/math/quat/layout.js.map +1 -0
  217. package/dist/math/quat/public.d.ts +3 -0
  218. package/dist/math/quat/public.js +25 -0
  219. package/dist/math/quat/public.js.map +1 -0
  220. package/dist/math/quat/schema.d.ts +11 -0
  221. package/dist/math/quat/schema.js +30 -0
  222. package/dist/math/quat/schema.js.map +1 -0
  223. package/dist/math/u32/index.d.ts +4 -0
  224. package/dist/math/u32/index.js +23 -0
  225. package/dist/math/u32/index.js.map +1 -0
  226. package/dist/math/u32/public.d.ts +1 -0
  227. package/dist/math/u32/public.js +23 -0
  228. package/dist/math/u32/public.js.map +1 -0
  229. package/dist/{ecs/entity/u32.d.ts → math/u32/schema.d.ts} +0 -2
  230. package/dist/math/u32/schema.js +28 -0
  231. package/dist/math/u32/schema.js.map +1 -0
  232. package/dist/math/vec2/functions.d.ts +48 -0
  233. package/dist/math/vec2/functions.js +104 -0
  234. package/dist/math/vec2/functions.js.map +1 -0
  235. package/dist/math/vec2/index.d.ts +4 -0
  236. package/dist/math/vec2/index.js +23 -0
  237. package/dist/math/vec2/index.js.map +1 -0
  238. package/dist/math/vec2/layout.d.ts +1 -0
  239. package/dist/math/vec2/layout.js +25 -0
  240. package/dist/math/vec2/layout.js.map +1 -0
  241. package/dist/math/vec2/public.d.ts +3 -0
  242. package/dist/math/vec2/public.js +25 -0
  243. package/dist/math/vec2/public.js.map +1 -0
  244. package/dist/math/vec2/schema.d.ts +11 -0
  245. package/dist/math/vec2/schema.js +30 -0
  246. package/dist/math/vec2/schema.js.map +1 -0
  247. package/dist/math/vec3/functions.d.ts +59 -0
  248. package/dist/math/vec3/functions.js +159 -0
  249. package/dist/math/vec3/functions.js.map +1 -0
  250. package/dist/math/vec3/index.d.ts +4 -0
  251. package/dist/math/vec3/index.js +23 -0
  252. package/dist/math/vec3/index.js.map +1 -0
  253. package/dist/math/vec3/layout.d.ts +1 -0
  254. package/dist/math/vec3/layout.js +25 -0
  255. package/dist/math/vec3/layout.js.map +1 -0
  256. package/dist/math/vec3/public.d.ts +3 -0
  257. package/dist/math/vec3/public.js +25 -0
  258. package/dist/math/vec3/public.js.map +1 -0
  259. package/dist/math/vec3/schema.d.ts +11 -0
  260. package/dist/math/vec3/schema.js +30 -0
  261. package/dist/math/vec3/schema.js.map +1 -0
  262. package/dist/math/vec4/functions.d.ts +49 -0
  263. package/dist/math/vec4/functions.js +150 -0
  264. package/dist/math/vec4/functions.js.map +1 -0
  265. package/dist/math/vec4/index.d.ts +4 -0
  266. package/dist/math/vec4/index.js +23 -0
  267. package/dist/math/vec4/index.js.map +1 -0
  268. package/dist/math/vec4/layout.d.ts +1 -0
  269. package/dist/math/vec4/layout.js +25 -0
  270. package/dist/math/vec4/layout.js.map +1 -0
  271. package/dist/math/vec4/public.d.ts +3 -0
  272. package/dist/math/vec4/public.js +25 -0
  273. package/dist/math/vec4/public.js.map +1 -0
  274. package/dist/math/vec4/schema.d.ts +11 -0
  275. package/dist/{ecs/world/index.js → math/vec4/schema.js} +9 -6
  276. package/dist/math/vec4/schema.js.map +1 -0
  277. package/dist/mutable.d.ts +3 -4
  278. package/dist/observe/create-event.d.ts +10 -0
  279. package/dist/observe/create-event.js +22 -0
  280. package/dist/observe/create-event.js.map +1 -0
  281. package/dist/observe/create-persisted-state.d.ts +1 -1
  282. package/dist/observe/create-persisted-state.js +2 -2
  283. package/dist/observe/create-persisted-state.js.map +1 -1
  284. package/dist/observe/create-query-state.d.ts +2 -3
  285. package/dist/observe/create-query-state.js +2 -2
  286. package/dist/observe/create-query-state.js.map +1 -1
  287. package/dist/observe/create-state.d.ts +7 -0
  288. package/dist/observe/create-state.js +27 -0
  289. package/dist/observe/create-state.js.map +1 -0
  290. package/dist/observe/from-array.d.ts +1 -1
  291. package/dist/observe/from-constant.d.ts +1 -1
  292. package/dist/observe/from-element-id.d.ts +1 -1
  293. package/dist/observe/from-element-properties-and-events.d.ts +1 -1
  294. package/dist/observe/from-element-property.d.ts +1 -1
  295. package/dist/observe/from-promise-with-error.d.ts +1 -1
  296. package/dist/observe/from-promise.d.ts +1 -1
  297. package/dist/observe/from-properties.d.ts +1 -1
  298. package/dist/observe/index.d.ts +16 -30
  299. package/dist/observe/index.js +1 -32
  300. package/dist/observe/index.js.map +1 -1
  301. package/dist/observe/observe.test.js +4 -4
  302. package/dist/observe/observe.test.js.map +1 -1
  303. package/dist/observe/public.d.ts +28 -0
  304. package/dist/{ecs/store/store-schema/create-store-schema-test.js → observe/public.js} +29 -12
  305. package/dist/observe/public.js.map +1 -0
  306. package/dist/observe/to-async-generator.d.ts +1 -1
  307. package/dist/observe/to-promise.d.ts +2 -2
  308. package/dist/observe/to-promise.js +1 -1
  309. package/dist/observe/to-properties.d.ts +1 -1
  310. package/dist/observe/with-async-map.d.ts +1 -1
  311. package/dist/observe/with-batch.d.ts +1 -1
  312. package/dist/observe/with-batch.test.js +5 -5
  313. package/dist/observe/with-batch.test.js.map +1 -1
  314. package/dist/observe/with-cache.d.ts +1 -1
  315. package/dist/observe/with-copy.d.ts +1 -1
  316. package/dist/observe/with-deduplicate-data.d.ts +1 -1
  317. package/dist/observe/with-deduplicate.d.ts +1 -1
  318. package/dist/observe/with-default.d.ts +1 -1
  319. package/dist/observe/with-filter.d.ts +1 -1
  320. package/dist/observe/with-lazy.d.ts +1 -1
  321. package/dist/observe/with-lazy.test.js +3 -3
  322. package/dist/observe/with-lazy.test.js.map +1 -1
  323. package/dist/observe/with-map-data.d.ts +1 -1
  324. package/dist/observe/with-map.d.ts +1 -1
  325. package/dist/observe/with-optional.d.ts +1 -1
  326. package/dist/observe/with-unwrap.d.ts +1 -1
  327. package/dist/old-ecs/action-ecs/action-ecs.js +2 -2
  328. package/dist/old-ecs/action-ecs/action-ecs.js.map +1 -1
  329. package/dist/old-ecs/action-ecs/action-ecs.test.js +3 -3
  330. package/dist/old-ecs/action-ecs/action-ecs.test.js.map +1 -1
  331. package/dist/old-ecs/action-ecs/action-types.d.ts +4 -4
  332. package/dist/old-ecs/core-ecs/core-ecs-serialization.test.js +3 -3
  333. package/dist/old-ecs/core-ecs/core-ecs-serialization.test.js.map +1 -1
  334. package/dist/old-ecs/core-ecs/core-ecs-types.d.ts +3 -3
  335. package/dist/old-ecs/core-ecs/core-ecs.js +2 -2
  336. package/dist/old-ecs/core-ecs/core-ecs.js.map +1 -1
  337. package/dist/old-ecs/core-ecs/core-ecs.test.js +2 -2
  338. package/dist/old-ecs/core-ecs/core-ecs.test.js.map +1 -1
  339. package/dist/old-ecs/ecs/ecs-types.d.ts +3 -3
  340. package/dist/old-ecs/ecs/ecs.test.js +3 -3
  341. package/dist/old-ecs/ecs/ecs.test.js.map +1 -1
  342. package/dist/old-ecs/entity.d.ts +2 -2
  343. package/dist/old-ecs/entity.js +2 -2
  344. package/dist/old-ecs/entity.js.map +1 -1
  345. package/dist/old-ecs/transaction-ecs/transaction-types.d.ts +4 -4
  346. package/dist/perftest/ecs-perf.js +11 -11
  347. package/dist/perftest/ecs-perf.js.map +1 -1
  348. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js +3 -3
  349. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js.map +1 -1
  350. package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.d.ts +3 -3
  351. package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.d.ts +1 -1
  352. package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.d.ts +1 -1
  353. package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.d.ts +1 -1
  354. package/dist/samples/todo/services/state-service/create-todo-database.d.ts +2 -2
  355. package/dist/samples/todo/services/state-service/create-todo-store.d.ts +2 -2
  356. package/dist/samples/todo/services/state-service/create-todo-store.js +5 -4
  357. package/dist/samples/todo/services/state-service/create-todo-store.js.map +1 -1
  358. package/dist/schema/FromSchemas.d.ts +4 -0
  359. package/dist/schema/FromSchemas.js +2 -0
  360. package/dist/schema/FromSchemas.js.map +1 -0
  361. package/dist/schema/boolean/index.d.ts +4 -0
  362. package/dist/schema/boolean/index.js +23 -0
  363. package/dist/schema/boolean/index.js.map +1 -0
  364. package/dist/schema/boolean/public.d.ts +1 -0
  365. package/dist/schema/boolean/public.js +23 -0
  366. package/dist/schema/boolean/public.js.map +1 -0
  367. package/dist/schema/boolean/schema.d.ts +3 -0
  368. package/dist/schema/boolean/schema.js +4 -0
  369. package/dist/schema/boolean/schema.js.map +1 -0
  370. package/dist/schema/from-schemas.d.ts +5 -0
  371. package/dist/schema/from-schemas.js +2 -0
  372. package/dist/schema/from-schemas.js.map +1 -0
  373. package/dist/schema/index.d.ts +9 -8
  374. package/dist/schema/index.js +6 -7
  375. package/dist/schema/index.js.map +1 -1
  376. package/dist/schema/public.d.ts +4 -0
  377. package/dist/schema/public.js +26 -0
  378. package/dist/schema/public.js.map +1 -0
  379. package/dist/schema/schema copy.d.ts +147 -0
  380. package/dist/schema/schema copy.js +34 -0
  381. package/dist/schema/schema copy.js.map +1 -0
  382. package/dist/schema/schema.d.ts +2 -80
  383. package/dist/schema/schema.js +0 -10
  384. package/dist/schema/schema.js.map +1 -1
  385. package/dist/schema/time/index.d.ts +4 -0
  386. package/dist/schema/time/index.js +23 -0
  387. package/dist/schema/time/index.js.map +1 -0
  388. package/dist/schema/time/public.d.ts +1 -0
  389. package/dist/schema/time/public.js +23 -0
  390. package/dist/schema/time/public.js.map +1 -0
  391. package/dist/schema/time/schema.d.ts +5 -0
  392. package/dist/schema/time/schema.js +24 -0
  393. package/dist/schema/time/schema.js.map +1 -0
  394. package/dist/schema/to-type.d.ts +77 -0
  395. package/dist/schema/to-type.js +33 -0
  396. package/dist/schema/to-type.js.map +1 -0
  397. package/dist/schema/to-vertex-buffer-layout.d.ts +2 -2
  398. package/dist/schema/to-vertex-buffer-layout.js +28 -14
  399. package/dist/schema/to-vertex-buffer-layout.js.map +1 -1
  400. package/dist/schema/to-vertex-buffer-layout.test.js +18 -18
  401. package/dist/schema/to-vertex-buffer-layout.test.js.map +1 -1
  402. package/dist/schema/true/index.d.ts +4 -0
  403. package/dist/schema/true/index.js +23 -0
  404. package/dist/schema/true/index.js.map +1 -0
  405. package/dist/schema/true/public.d.ts +1 -0
  406. package/dist/schema/true/public.js +23 -0
  407. package/dist/schema/true/public.js.map +1 -0
  408. package/dist/schema/true/schema.d.ts +5 -0
  409. package/dist/schema/true/schema.js +2 -0
  410. package/dist/schema/true/schema.js.map +1 -0
  411. package/dist/schema/type.d.ts +76 -0
  412. package/dist/schema/type.js +33 -0
  413. package/dist/schema/type.js.map +1 -0
  414. package/dist/schema/validation/with-validation.d.ts +2 -2
  415. package/dist/schema/validation/with-validation.js.map +1 -1
  416. package/dist/schema/validation/with-validation.test.js.map +1 -1
  417. package/dist/service/add-observable-actions.d.ts +5 -5
  418. package/dist/service/add-observable-actions.js +2 -2
  419. package/dist/service/add-observable-actions.js.map +1 -1
  420. package/dist/service/index.d.ts +1 -1
  421. package/dist/service/index.js.map +1 -1
  422. package/dist/service/progressive-result.d.ts +2 -3
  423. package/dist/table/add-row.d.ts +2 -2
  424. package/dist/table/add-row.js +2 -2
  425. package/dist/table/create-table.d.ts +2 -2
  426. package/dist/table/create-table.js.map +1 -1
  427. package/dist/table/delete-row.d.ts +2 -2
  428. package/dist/table/delete-row.js +2 -2
  429. package/dist/table/row-index.d.ts +2 -2
  430. package/dist/table/row-index.js +2 -2
  431. package/dist/table/row-index.js.map +1 -1
  432. package/dist/table/table-compact.test.js +9 -9
  433. package/dist/table/table-compact.test.js.map +1 -1
  434. package/dist/table/update-row.d.ts +4 -3
  435. package/dist/table/update-row.js +4 -3
  436. package/dist/table/update-row.js.map +1 -1
  437. package/dist/tsconfig.tsbuildinfo +1 -1
  438. package/dist/typed-buffer/create-array-buffer.d.ts +2 -2
  439. package/dist/typed-buffer/create-const-buffer.d.ts +1 -1
  440. package/dist/typed-buffer/create-number-buffer.d.ts +1 -1
  441. package/dist/typed-buffer/create-number-buffer.js +4 -4
  442. package/dist/typed-buffer/create-number-buffer.js.map +1 -1
  443. package/dist/typed-buffer/create-number-buffer.test.js +2 -2
  444. package/dist/typed-buffer/create-number-buffer.test.js.map +1 -1
  445. package/dist/typed-buffer/create-struct-buffer.d.ts +3 -3
  446. package/dist/typed-buffer/create-struct-buffer.js.map +1 -1
  447. package/dist/typed-buffer/create-struct-buffer.test.js +10 -10
  448. package/dist/typed-buffer/create-struct-buffer.test.js.map +1 -1
  449. package/dist/typed-buffer/create-typed-buffer.d.ts +3 -3
  450. package/dist/typed-buffer/create-typed-buffer.js.map +1 -1
  451. package/dist/typed-buffer/index.d.ts +1 -0
  452. package/dist/typed-buffer/structs/assert-struct.d.ts +1 -1
  453. package/dist/typed-buffer/structs/get-struct-layout.d.ts +1 -1
  454. package/dist/typed-buffer/structs/get-struct-layout.js +4 -4
  455. package/dist/typed-buffer/structs/get-struct-layout.js.map +1 -1
  456. package/dist/typed-buffer/structs/get-struct-layout.test.js +12 -12
  457. package/dist/typed-buffer/structs/get-struct-layout.test.js.map +1 -1
  458. package/dist/typed-buffer/structs/struct-layout.d.ts +1 -1
  459. package/dist/typed-buffer/typed-buffer.d.ts +1 -1
  460. package/dist/types/index.d.ts +1 -0
  461. package/dist/types/types.d.ts +1 -2
  462. package/package.json +2 -3
  463. package/dist/blob/download-handle.d.ts +0 -4
  464. package/dist/blob/download-handle.js +0 -2
  465. package/dist/blob/download-handle.js.map +0 -1
  466. package/dist/blob/upload-handle.d.ts +0 -4
  467. package/dist/blob/upload-handle.js +0 -2
  468. package/dist/blob/upload-handle.js.map +0 -1
  469. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js +0 -106
  470. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js.map +0 -1
  471. package/dist/ecs/entity/entity.d.ts +0 -8
  472. package/dist/ecs/entity/entity.js +0 -3
  473. package/dist/ecs/entity/entity.js.map +0 -1
  474. package/dist/ecs/entity/u32.js.map +0 -1
  475. package/dist/ecs/store/store-schema/create-store-schema-test.d.ts +0 -1
  476. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +0 -1
  477. package/dist/ecs/store/store-schema/create-store-schema.d.ts +0 -1
  478. package/dist/ecs/store/store-schema/create-store-schema.js +0 -45
  479. package/dist/ecs/store/store-schema/create-store-schema.js.map +0 -1
  480. package/dist/ecs/store/store-schema/index.d.ts +0 -1
  481. package/dist/ecs/store/store-schema/index.js +0 -21
  482. package/dist/ecs/store/store-schema/index.js.map +0 -1
  483. package/dist/ecs/store/store-schema/store-schema.d.ts +0 -1
  484. package/dist/ecs/store/store-schema/store-schema.js +0 -57
  485. package/dist/ecs/store/store-schema/store-schema.js.map +0 -1
  486. package/dist/ecs/world/create-world.d.ts +0 -7
  487. package/dist/ecs/world/create-world.js +0 -113
  488. package/dist/ecs/world/create-world.js.map +0 -1
  489. package/dist/ecs/world/create-world.test.d.ts +0 -1
  490. package/dist/ecs/world/create-world.test.js +0 -499
  491. package/dist/ecs/world/create-world.test.js.map +0 -1
  492. package/dist/ecs/world/index.d.ts +0 -5
  493. package/dist/ecs/world/index.js.map +0 -1
  494. package/dist/ecs/world/system-phase.d.ts +0 -5
  495. package/dist/ecs/world/system-phase.js +0 -14
  496. package/dist/ecs/world/system-phase.js.map +0 -1
  497. package/dist/ecs/world/system.d.ts +0 -25
  498. package/dist/ecs/world/system.js +0 -2
  499. package/dist/ecs/world/system.js.map +0 -1
  500. package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +0 -1
  501. package/dist/ecs/world/world-schema/create-world-schema-test.js +0 -55
  502. package/dist/ecs/world/world-schema/create-world-schema-test.js.map +0 -1
  503. package/dist/ecs/world/world-schema/create-world-schema.d.ts +0 -19
  504. package/dist/ecs/world/world-schema/create-world-schema.js +0 -33
  505. package/dist/ecs/world/world-schema/create-world-schema.js.map +0 -1
  506. package/dist/ecs/world/world-schema/index.d.ts +0 -2
  507. package/dist/ecs/world/world-schema/index.js.map +0 -1
  508. package/dist/ecs/world/world-schema/world-schema.d.ts +0 -18
  509. package/dist/ecs/world/world-schema/world-schema.js.map +0 -1
  510. package/dist/ecs/world/world.d.ts +0 -11
  511. package/dist/ecs/world/world.js +0 -2
  512. package/dist/ecs/world/world.js.map +0 -1
  513. package/dist/graphics/camera/camera.d.ts +0 -62
  514. package/dist/graphics/camera/camera.js +0 -17
  515. package/dist/graphics/camera/camera.js.map +0 -1
  516. package/dist/graphics/camera/index.d.ts +0 -4
  517. package/dist/graphics/camera/index.js +0 -5
  518. package/dist/graphics/camera/index.js.map +0 -1
  519. package/dist/graphics/camera/screen-to-world-ray.d.ts +0 -12
  520. package/dist/graphics/camera/screen-to-world-ray.js +0 -49
  521. package/dist/graphics/camera/screen-to-world-ray.js.map +0 -1
  522. package/dist/graphics/camera/screen-to-world-ray.test.d.ts +0 -1
  523. package/dist/graphics/camera/screen-to-world-ray.test.js +0 -171
  524. package/dist/graphics/camera/screen-to-world-ray.test.js.map +0 -1
  525. package/dist/graphics/camera/to-view-projection.d.ts +0 -3
  526. package/dist/graphics/camera/to-view-projection.js +0 -8
  527. package/dist/graphics/camera/to-view-projection.js.map +0 -1
  528. package/dist/graphics/camera/world-to-screen.d.ts +0 -12
  529. package/dist/graphics/camera/world-to-screen.js +0 -38
  530. package/dist/graphics/camera/world-to-screen.js.map +0 -1
  531. package/dist/graphics/camera/world-to-screen.test.d.ts +0 -1
  532. package/dist/graphics/camera/world-to-screen.test.js +0 -124
  533. package/dist/graphics/camera/world-to-screen.test.js.map +0 -1
  534. package/dist/graphics/create-struct-gpu-buffer.d.ts +0 -7
  535. package/dist/graphics/create-struct-gpu-buffer.js +0 -17
  536. package/dist/graphics/create-struct-gpu-buffer.js.map +0 -1
  537. package/dist/graphics/extract-wgsl-bindings.d.ts +0 -5
  538. package/dist/graphics/extract-wgsl-bindings.js +0 -10
  539. package/dist/graphics/extract-wgsl-bindings.js.map +0 -1
  540. package/dist/graphics/frame.d.ts +0 -1
  541. package/dist/graphics/frame.js +0 -15
  542. package/dist/graphics/frame.js.map +0 -1
  543. package/dist/graphics/get-web-gpu-device-and-context.d.ts +0 -1
  544. package/dist/graphics/get-web-gpu-device-and-context.js +0 -24
  545. package/dist/graphics/get-web-gpu-device-and-context.js.map +0 -1
  546. package/dist/graphics/graphics-context.d.ts +0 -1
  547. package/dist/graphics/graphics-context.js +0 -7
  548. package/dist/graphics/graphics-context.js.map +0 -1
  549. package/dist/graphics/index.d.ts +0 -5
  550. package/dist/graphics/index.js +0 -5
  551. package/dist/graphics/index.js.map +0 -1
  552. package/dist/graphics/to-gpu-buffer.d.ts +0 -2
  553. package/dist/graphics/to-gpu-buffer.js +0 -14
  554. package/dist/graphics/to-gpu-buffer.js.map +0 -1
  555. package/dist/internal/array-buffer-like/grow.d.ts +0 -1
  556. package/dist/internal/array-buffer-like/grow.js +0 -9
  557. package/dist/internal/array-buffer-like/grow.js.map +0 -1
  558. package/dist/math/aabb-face/face.d.ts +0 -51
  559. package/dist/math/aabb-face/face.js +0 -110
  560. package/dist/math/aabb-face/face.js.map +0 -1
  561. package/dist/math/aabb-face/face.test.d.ts +0 -1
  562. package/dist/math/aabb-face/face.test.js +0 -94
  563. package/dist/math/aabb-face/face.test.js.map +0 -1
  564. package/dist/math/box/box.d.ts +0 -50
  565. package/dist/math/box/box.js +0 -23
  566. package/dist/math/box/box.js.map +0 -1
  567. package/dist/math/face/face.d.ts +0 -51
  568. package/dist/math/face/face.js.map +0 -1
  569. package/dist/math/face/face.test.d.ts +0 -1
  570. package/dist/math/face/face.test.js +0 -94
  571. package/dist/math/face/face.test.js.map +0 -1
  572. package/dist/math/picking/face.d.ts +0 -1
  573. package/dist/math/picking/face.js +0 -2
  574. package/dist/math/picking/face.js.map +0 -1
  575. package/dist/math/picking/get-closest-entity-to-line.d.ts +0 -4
  576. package/dist/math/picking/get-closest-entity-to-line.js +0 -30
  577. package/dist/math/picking/get-closest-entity-to-line.js.map +0 -1
  578. package/dist/math/picking/get-closest-entity-to-point.d.ts +0 -4
  579. package/dist/math/picking/get-closest-entity-to-point.js +0 -27
  580. package/dist/math/picking/get-closest-entity-to-point.js.map +0 -1
  581. package/dist/math/picking/get-intersecting-entities.d.ts +0 -12
  582. package/dist/math/picking/get-intersecting-entities.js +0 -15
  583. package/dist/math/picking/get-intersecting-entities.js.map +0 -1
  584. package/dist/math/picking/getClosestEntityToLine.d.ts +0 -4
  585. package/dist/math/picking/getClosestEntityToLine.js +0 -29
  586. package/dist/math/picking/getClosestEntityToLine.js.map +0 -1
  587. package/dist/math/picking/getClosestEntityToPoint.d.ts +0 -4
  588. package/dist/math/picking/getClosestEntityToPoint.js +0 -27
  589. package/dist/math/picking/getClosestEntityToPoint.js.map +0 -1
  590. package/dist/math/picking/getIntersectingEntities.d.ts +0 -12
  591. package/dist/math/picking/getIntersectingEntities.js +0 -15
  592. package/dist/math/picking/getIntersectingEntities.js.map +0 -1
  593. package/dist/math/picking/index.d.ts +0 -5
  594. package/dist/math/picking/index.js.map +0 -1
  595. package/dist/math/picking/pick-from-tables.d.ts +0 -19
  596. package/dist/math/picking/pick-from-tables.js +0 -63
  597. package/dist/math/picking/pick-from-tables.js.map +0 -1
  598. package/dist/math/picking/pick-result.d.ts +0 -12
  599. package/dist/math/picking/pick-result.js.map +0 -1
  600. package/dist/math/transform/debug-inverse.d.ts +0 -1
  601. package/dist/math/transform/debug-inverse.js +0 -28
  602. package/dist/math/transform/debug-inverse.js.map +0 -1
  603. package/dist/math/transform/debug-quat.d.ts +0 -1
  604. package/dist/math/transform/debug-quat.js +0 -23
  605. package/dist/math/transform/debug-quat.js.map +0 -1
  606. package/dist/math/transform/debug-test.d.ts +0 -1
  607. package/dist/math/transform/debug-test.js +0 -34
  608. package/dist/math/transform/debug-test.js.map +0 -1
  609. package/dist/math/transform/transform.d.ts +0 -58
  610. package/dist/math/transform/transform.js +0 -101
  611. package/dist/math/transform/transform.js.map +0 -1
  612. package/dist/math/transform/transform.test.d.ts +0 -1
  613. package/dist/math/transform/transform.test.js +0 -309
  614. package/dist/math/transform/transform.test.js.map +0 -1
  615. package/dist/old-ecs/privacy/helper-functions.d.ts +0 -43
  616. package/dist/old-ecs/privacy/helper-functions.js +0 -76
  617. package/dist/old-ecs/privacy/helper-functions.js.map +0 -1
  618. package/dist/old-ecs/privacy/helper-functions.test.d.ts +0 -1
  619. package/dist/old-ecs/privacy/helper-functions.test.js +0 -173
  620. package/dist/old-ecs/privacy/helper-functions.test.js.map +0 -1
  621. /package/dist/{ecs/database/transactional-store/entity-id-preservation.test.d.ts → math/aabb/face/aabb-face.test.d.ts} +0 -0
@@ -0,0 +1,34 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ import { Vec3 } from "../vec3/index.js";
23
+ import { F32 } from "../f32/index.js";
24
+ export const schema = {
25
+ type: 'object',
26
+ properties: {
27
+ normal: Vec3.schema,
28
+ distance: F32.schema,
29
+ },
30
+ layout: 'std140',
31
+ required: ['normal', 'distance'],
32
+ additionalProperties: false,
33
+ };
34
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/math/plane/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAGX,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,GAAG,CAAC,MAAM;KACvB;IACD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;IAChC,oBAAoB,EAAE,KAAK;CACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { Quat } from "../index.js";
2
+ import type { Vec3 } from "../../vec3/index.js";
3
+ import type { Mat4x4 } from "../../mat4x4/index.js";
4
+ export declare const identity: Quat;
5
+ export declare const add: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
6
+ export declare const subtract: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
7
+ export declare const scale: ([x, y, z, w]: Quat, s: number) => Quat;
8
+ export declare const negate: ([x, y, z, w]: Quat) => Quat;
9
+ export declare const conjugate: ([x, y, z, w]: Quat) => Quat;
10
+ export declare const multiply: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
11
+ export declare const length: ([x, y, z, w]: Quat) => number;
12
+ export declare const lengthSquared: ([x, y, z, w]: Quat) => number;
13
+ export declare const normalize: (q: Quat) => Quat;
14
+ export declare const dot: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => number;
15
+ export declare const distance: (a: Quat, b: Quat) => number;
16
+ export declare const fromAxisAngle: (axis: Vec3, angle: number) => Quat;
17
+ export declare const toAxisAngle: ([x, y, z, w]: Quat) => {
18
+ axis: Vec3;
19
+ angle: number;
20
+ };
21
+ export declare const fromEuler: (x: number, y: number, z: number) => Quat;
22
+ export declare const toEuler: ([x, y, z, w]: Quat) => Vec3;
23
+ export declare const rotateVec3: ([x, y, z, w]: Quat, v: Vec3) => Vec3;
24
+ export declare const slerp: (q1: Quat, q2: Quat, t: number) => Quat;
25
+ export declare const lerp: (q1: Quat, q2: Quat, t: number) => Quat;
26
+ /**
27
+ * Converts a quaternion to a 4x4 rotation matrix in column-major order.
28
+ * The resulting matrix is compatible with WebGPU and can be directly used
29
+ * with Mat4x4 operations.
30
+ */
31
+ export declare const toMat4: ([x, y, z, w]: Quat) => Mat4x4;
32
+ export declare const inverse: (q: Quat) => Quat;
33
+ export declare const lookAt: (forward: Vec3, up: Vec3) => Quat;
34
+ /**
35
+ * Returns a quaternion that aligns the local Z-axis to the given direction via the shortest arc,
36
+ * then applies an additional twist around that aligned Z-axis.
37
+ *
38
+ * Note: This aligns the Z axis.
39
+ *
40
+ * @param direction - Target world-space direction for local Z. If zero-length, returns identity.
41
+ * @param twistRadians - Extra rotation around the aligned Z-axis, in radians. Defaults to 0.
42
+ */
43
+ export declare const alignTo: (direction: Vec3, twistRadians?: number) => Quat;
@@ -0,0 +1,258 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ import { Vec3 as Vec3Namespace } from "../../index.js";
23
+ export const identity = [0, 0, 0, 1];
24
+ // Basic Quaternion Operations
25
+ export const add = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
26
+ x1 + x2,
27
+ y1 + y2,
28
+ z1 + z2,
29
+ w1 + w2
30
+ ];
31
+ export const subtract = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
32
+ x1 - x2,
33
+ y1 - y2,
34
+ z1 - z2,
35
+ w1 - w2
36
+ ];
37
+ export const scale = ([x, y, z, w], s) => [x * s, y * s, z * s, w * s];
38
+ export const negate = ([x, y, z, w]) => [-x, -y, -z, -w];
39
+ export const conjugate = ([x, y, z, w]) => [-x, -y, -z, w];
40
+ export const multiply = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
41
+ x1 * w2 + w1 * x2 + y1 * z2 - z1 * y2,
42
+ y1 * w2 + w1 * y2 + z1 * x2 - x1 * z2,
43
+ z1 * w2 + w1 * z2 + x1 * y2 - y1 * x2,
44
+ w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2
45
+ ];
46
+ // Geometric Functions
47
+ export const length = ([x, y, z, w]) => Math.sqrt(x * x + y * y + z * z + w * w);
48
+ export const lengthSquared = ([x, y, z, w]) => x * x + y * y + z * z + w * w;
49
+ export const normalize = (q) => {
50
+ const len = length(q);
51
+ return len === 0 ? [0, 0, 0, 1] : scale(q, 1 / len);
52
+ };
53
+ export const dot = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => x1 * x2 + y1 * y2 + z1 * z2 + w1 * w2;
54
+ export const distance = (a, b) => length(subtract(b, a));
55
+ // Rotation Functions
56
+ export const fromAxisAngle = (axis, angle) => {
57
+ const halfAngle = angle * 0.5;
58
+ const s = Math.sin(halfAngle);
59
+ const c = Math.cos(halfAngle);
60
+ // Normalize the axis to ensure a unit quaternion
61
+ const len = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
62
+ if (len === 0)
63
+ return identity;
64
+ const invLen = 1 / len;
65
+ return [axis[0] * invLen * s, axis[1] * invLen * s, axis[2] * invLen * s, c];
66
+ };
67
+ export const toAxisAngle = ([x, y, z, w]) => {
68
+ const angle = 2 * Math.acos(Math.abs(w));
69
+ const s = Math.sin(angle * 0.5);
70
+ if (s === 0) {
71
+ return { axis: [0, 0, 1], angle: 0 };
72
+ }
73
+ return {
74
+ axis: [x / s, y / s, z / s],
75
+ angle: w < 0 ? -angle : angle
76
+ };
77
+ };
78
+ export const fromEuler = (x, y, z) => {
79
+ const cx = Math.cos(x * 0.5);
80
+ const sx = Math.sin(x * 0.5);
81
+ const cy = Math.cos(y * 0.5);
82
+ const sy = Math.sin(y * 0.5);
83
+ const cz = Math.cos(z * 0.5);
84
+ const sz = Math.sin(z * 0.5);
85
+ return [
86
+ sx * cy * cz - cx * sy * sz,
87
+ cx * sy * cz + sx * cy * sz,
88
+ cx * cy * sz - sx * sy * cz,
89
+ cx * cy * cz + sx * sy * sz
90
+ ];
91
+ };
92
+ export const toEuler = ([x, y, z, w]) => {
93
+ // Roll (x-axis rotation)
94
+ const sinr_cosp = 2 * (w * x + y * z);
95
+ const cosr_cosp = 1 - 2 * (x * x + y * y);
96
+ const roll = Math.atan2(sinr_cosp, cosr_cosp);
97
+ // Pitch (y-axis rotation)
98
+ const sinp = 2 * (w * y - z * x);
99
+ let pitch;
100
+ if (Math.abs(sinp) >= 1) {
101
+ pitch = Math.sign(sinp) * Math.PI / 2; // use 90 degrees if out of range
102
+ }
103
+ else {
104
+ pitch = Math.asin(sinp);
105
+ }
106
+ // Yaw (z-axis rotation)
107
+ const siny_cosp = 2 * (w * z + x * y);
108
+ const cosy_cosp = 1 - 2 * (y * y + z * z);
109
+ const yaw = Math.atan2(siny_cosp, cosy_cosp);
110
+ return [roll, pitch, yaw];
111
+ };
112
+ // Vector Rotation
113
+ export const rotateVec3 = ([x, y, z, w], v) => {
114
+ // q * v * q^-1
115
+ const qv = [x, y, z];
116
+ const uv = Vec3Namespace.cross(qv, v);
117
+ const uuv = Vec3Namespace.cross(qv, uv);
118
+ const scaleFactor = 2 * w;
119
+ return [
120
+ v[0] + scaleFactor * uv[0] + 2 * uuv[0],
121
+ v[1] + scaleFactor * uv[1] + 2 * uuv[1],
122
+ v[2] + scaleFactor * uv[2] + 2 * uuv[2]
123
+ ];
124
+ };
125
+ // Interpolation
126
+ export const slerp = (q1, q2, t) => {
127
+ const dotProduct = dot(q1, q2);
128
+ // If the dot product is negative, slerp won't take the shorter route
129
+ const q2Adjusted = dotProduct < 0 ? negate(q2) : q2;
130
+ const adjustedDot = Math.abs(dotProduct);
131
+ // If the inputs are too close for comfort, linearly interpolate
132
+ if (adjustedDot > 0.9995) {
133
+ return normalize(add(scale(q1, 1 - t), scale(q2Adjusted, t)));
134
+ }
135
+ const theta = Math.acos(adjustedDot);
136
+ const sinTheta = Math.sin(theta);
137
+ const factor1 = Math.sin((1 - t) * theta) / sinTheta;
138
+ const factor2 = Math.sin(t * theta) / sinTheta;
139
+ return normalize(add(scale(q1, factor1), scale(q2Adjusted, factor2)));
140
+ };
141
+ export const lerp = (q1, q2, t) => {
142
+ return normalize(add(scale(q1, 1 - t), scale(q2, t)));
143
+ };
144
+ // Matrix Conversion
145
+ /**
146
+ * Converts a quaternion to a 4x4 rotation matrix in column-major order.
147
+ * The resulting matrix is compatible with WebGPU and can be directly used
148
+ * with Mat4x4 operations.
149
+ */
150
+ export const toMat4 = ([x, y, z, w]) => {
151
+ const xx = x * x;
152
+ const yy = y * y;
153
+ const zz = z * z;
154
+ const xy = x * y;
155
+ const xz = x * z;
156
+ const yz = y * z;
157
+ const wx = w * x;
158
+ const wy = w * y;
159
+ const wz = w * z;
160
+ // Column-major format (WebGPU standard)
161
+ return [
162
+ 1 - 2 * (yy + zz), 2 * (xy + wz), 2 * (xz - wy), 0,
163
+ 2 * (xy - wz), 1 - 2 * (xx + zz), 2 * (yz + wx), 0,
164
+ 2 * (xz + wy), 2 * (yz - wx), 1 - 2 * (xx + yy), 0,
165
+ 0, 0, 0, 1
166
+ ];
167
+ };
168
+ // Utility Functions
169
+ export const inverse = (q) => {
170
+ const lenSq = lengthSquared(q);
171
+ if (lenSq === 0)
172
+ return [0, 0, 0, 1];
173
+ return scale(conjugate(q), 1 / lenSq);
174
+ };
175
+ export const lookAt = (forward, up) => {
176
+ // Normalize forward vector
177
+ const f = Vec3Namespace.normalize(forward);
178
+ // Calculate right vector
179
+ const r = Vec3Namespace.normalize(Vec3Namespace.cross(f, up));
180
+ // Recalculate up vector
181
+ const u = Vec3Namespace.cross(r, f);
182
+ // Convert to quaternion
183
+ const trace = r[0] + u[1] + f[2];
184
+ if (trace > 0) {
185
+ const s = Math.sqrt(trace + 1) * 2;
186
+ return [
187
+ (u[2] - f[1]) / s,
188
+ (f[0] - r[2]) / s,
189
+ (r[1] - u[0]) / s,
190
+ 0.25 * s
191
+ ];
192
+ }
193
+ else if (r[0] > u[1] && r[0] > f[2]) {
194
+ const s = Math.sqrt(1 + r[0] - u[1] - f[2]) * 2;
195
+ return [
196
+ 0.25 * s,
197
+ (u[0] + r[1]) / s,
198
+ (f[0] + r[2]) / s,
199
+ (u[2] - f[1]) / s
200
+ ];
201
+ }
202
+ else if (u[1] > f[2]) {
203
+ const s = Math.sqrt(1 + u[1] - r[0] - f[2]) * 2;
204
+ return [
205
+ (u[0] + r[1]) / s,
206
+ 0.25 * s,
207
+ (f[1] + u[2]) / s,
208
+ (f[0] - r[2]) / s
209
+ ];
210
+ }
211
+ else {
212
+ const s = Math.sqrt(1 + f[2] - r[0] - u[1]) * 2;
213
+ return [
214
+ (f[0] + r[2]) / s,
215
+ (f[1] + u[2]) / s,
216
+ 0.25 * s,
217
+ (r[1] - u[0]) / s
218
+ ];
219
+ }
220
+ };
221
+ /**
222
+ * Returns a quaternion that aligns the local Z-axis to the given direction via the shortest arc,
223
+ * then applies an additional twist around that aligned Z-axis.
224
+ *
225
+ * Note: This aligns the Z axis.
226
+ *
227
+ * @param direction - Target world-space direction for local Z. If zero-length, returns identity.
228
+ * @param twistRadians - Extra rotation around the aligned Z-axis, in radians. Defaults to 0.
229
+ */
230
+ export const alignTo = (direction, twistRadians = 0) => {
231
+ const zAxis = [0, 0, 1];
232
+ const dirLen = Vec3Namespace.length(direction);
233
+ if (dirLen === 0)
234
+ return identity;
235
+ const dir = Vec3Namespace.normalize(direction);
236
+ const dotVal = Vec3Namespace.dot(zAxis, dir);
237
+ let base;
238
+ if (dotVal > 0.999999) {
239
+ base = identity;
240
+ }
241
+ else if (dotVal < -0.999999) {
242
+ // Opposite: 180° around any axis orthogonal to Z
243
+ const orthoCandidate = [1, 0, 0];
244
+ const axis = Math.abs(Vec3Namespace.dot(zAxis, orthoCandidate)) > 0.999 ? [0, 1, 0] : orthoCandidate;
245
+ base = fromAxisAngle(axis, Math.PI);
246
+ }
247
+ else {
248
+ const axis = Vec3Namespace.normalize(Vec3Namespace.cross(zAxis, dir));
249
+ const angle = Math.acos(dotVal);
250
+ base = fromAxisAngle(axis, angle);
251
+ }
252
+ if (twistRadians === 0)
253
+ return base;
254
+ // Twist around the final aligned Z (which is 'dir' in world space)
255
+ const twist = fromAxisAngle(dir, twistRadians);
256
+ return multiply(twist, base);
257
+ };
258
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/math/quat/constants/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Quat } from "../index.js";
2
+ import type { Vec3 } from "../vec3/index.js";
3
+ import type { Mat4x4 } from "../mat4x4/index.js";
4
+ export declare const identity: Quat;
5
+ export declare const add: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
6
+ export declare const subtract: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
7
+ export declare const scale: ([x, y, z, w]: Quat, s: number) => Quat;
8
+ export declare const negate: ([x, y, z, w]: Quat) => Quat;
9
+ export declare const conjugate: ([x, y, z, w]: Quat) => Quat;
10
+ export declare const multiply: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => Quat;
11
+ export declare const length: ([x, y, z, w]: Quat) => number;
12
+ export declare const lengthSquared: ([x, y, z, w]: Quat) => number;
13
+ export declare const normalize: (q: Quat) => Quat;
14
+ export declare const dot: ([x1, y1, z1, w1]: Quat, [x2, y2, z2, w2]: Quat) => number;
15
+ export declare const distance: (a: Quat, b: Quat) => number;
16
+ export declare const fromAxisAngle: (axis: Vec3, angle: number) => Quat;
17
+ export declare const toAxisAngle: ([x, y, z, w]: Quat) => {
18
+ axis: Vec3;
19
+ angle: number;
20
+ };
21
+ export declare const fromEuler: (x: number, y: number, z: number) => Quat;
22
+ export declare const toEuler: ([x, y, z, w]: Quat) => Vec3;
23
+ export declare const rotateVec3: ([x, y, z, w]: Quat, v: Vec3) => Vec3;
24
+ export declare const slerp: (q1: Quat, q2: Quat, t: number) => Quat;
25
+ export declare const lerp: (q1: Quat, q2: Quat, t: number) => Quat;
26
+ /**
27
+ * Converts a quaternion to a 4x4 rotation matrix in column-major order.
28
+ * The resulting matrix is compatible with WebGPU and can be directly used
29
+ * with Mat4x4 operations.
30
+ */
31
+ export declare const toMat4: ([x, y, z, w]: Quat) => Mat4x4;
32
+ export declare const inverse: (q: Quat) => Quat;
33
+ export declare const lookAt: (forward: Vec3, up: Vec3) => Quat;
34
+ /**
35
+ * Returns a quaternion that aligns the local Z-axis to the given direction via the shortest arc,
36
+ * then applies an additional twist around that aligned Z-axis.
37
+ *
38
+ * Note: This aligns the Z axis.
39
+ *
40
+ * @param direction - Target world-space direction for local Z. If zero-length, returns identity.
41
+ * @param twistRadians - Extra rotation around the aligned Z-axis, in radians. Defaults to 0.
42
+ */
43
+ export declare const alignTo: (direction: Vec3, twistRadians?: number) => Quat;
@@ -0,0 +1,258 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ import { Vec3 as Vec3Namespace } from "../vec3/index.js";
23
+ export const identity = [0, 0, 0, 1];
24
+ // Basic Quaternion Operations
25
+ export const add = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
26
+ x1 + x2,
27
+ y1 + y2,
28
+ z1 + z2,
29
+ w1 + w2
30
+ ];
31
+ export const subtract = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
32
+ x1 - x2,
33
+ y1 - y2,
34
+ z1 - z2,
35
+ w1 - w2
36
+ ];
37
+ export const scale = ([x, y, z, w], s) => [x * s, y * s, z * s, w * s];
38
+ export const negate = ([x, y, z, w]) => [-x, -y, -z, -w];
39
+ export const conjugate = ([x, y, z, w]) => [-x, -y, -z, w];
40
+ export const multiply = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => [
41
+ x1 * w2 + w1 * x2 + y1 * z2 - z1 * y2,
42
+ y1 * w2 + w1 * y2 + z1 * x2 - x1 * z2,
43
+ z1 * w2 + w1 * z2 + x1 * y2 - y1 * x2,
44
+ w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2
45
+ ];
46
+ // Geometric Functions
47
+ export const length = ([x, y, z, w]) => Math.sqrt(x * x + y * y + z * z + w * w);
48
+ export const lengthSquared = ([x, y, z, w]) => x * x + y * y + z * z + w * w;
49
+ export const normalize = (q) => {
50
+ const len = length(q);
51
+ return len === 0 ? [0, 0, 0, 1] : scale(q, 1 / len);
52
+ };
53
+ export const dot = ([x1, y1, z1, w1], [x2, y2, z2, w2]) => x1 * x2 + y1 * y2 + z1 * z2 + w1 * w2;
54
+ export const distance = (a, b) => length(subtract(b, a));
55
+ // Rotation Functions
56
+ export const fromAxisAngle = (axis, angle) => {
57
+ const halfAngle = angle * 0.5;
58
+ const s = Math.sin(halfAngle);
59
+ const c = Math.cos(halfAngle);
60
+ // Normalize the axis to ensure a unit quaternion
61
+ const len = Math.sqrt(axis[0] * axis[0] + axis[1] * axis[1] + axis[2] * axis[2]);
62
+ if (len === 0)
63
+ return identity;
64
+ const invLen = 1 / len;
65
+ return [axis[0] * invLen * s, axis[1] * invLen * s, axis[2] * invLen * s, c];
66
+ };
67
+ export const toAxisAngle = ([x, y, z, w]) => {
68
+ const angle = 2 * Math.acos(Math.abs(w));
69
+ const s = Math.sin(angle * 0.5);
70
+ if (s === 0) {
71
+ return { axis: [0, 0, 1], angle: 0 };
72
+ }
73
+ return {
74
+ axis: [x / s, y / s, z / s],
75
+ angle: w < 0 ? -angle : angle
76
+ };
77
+ };
78
+ export const fromEuler = (x, y, z) => {
79
+ const cx = Math.cos(x * 0.5);
80
+ const sx = Math.sin(x * 0.5);
81
+ const cy = Math.cos(y * 0.5);
82
+ const sy = Math.sin(y * 0.5);
83
+ const cz = Math.cos(z * 0.5);
84
+ const sz = Math.sin(z * 0.5);
85
+ return [
86
+ sx * cy * cz - cx * sy * sz,
87
+ cx * sy * cz + sx * cy * sz,
88
+ cx * cy * sz - sx * sy * cz,
89
+ cx * cy * cz + sx * sy * sz
90
+ ];
91
+ };
92
+ export const toEuler = ([x, y, z, w]) => {
93
+ // Roll (x-axis rotation)
94
+ const sinr_cosp = 2 * (w * x + y * z);
95
+ const cosr_cosp = 1 - 2 * (x * x + y * y);
96
+ const roll = Math.atan2(sinr_cosp, cosr_cosp);
97
+ // Pitch (y-axis rotation)
98
+ const sinp = 2 * (w * y - z * x);
99
+ let pitch;
100
+ if (Math.abs(sinp) >= 1) {
101
+ pitch = Math.sign(sinp) * Math.PI / 2; // use 90 degrees if out of range
102
+ }
103
+ else {
104
+ pitch = Math.asin(sinp);
105
+ }
106
+ // Yaw (z-axis rotation)
107
+ const siny_cosp = 2 * (w * z + x * y);
108
+ const cosy_cosp = 1 - 2 * (y * y + z * z);
109
+ const yaw = Math.atan2(siny_cosp, cosy_cosp);
110
+ return [roll, pitch, yaw];
111
+ };
112
+ // Vector Rotation
113
+ export const rotateVec3 = ([x, y, z, w], v) => {
114
+ // q * v * q^-1
115
+ const qv = [x, y, z];
116
+ const uv = Vec3Namespace.cross(qv, v);
117
+ const uuv = Vec3Namespace.cross(qv, uv);
118
+ const scaleFactor = 2 * w;
119
+ return [
120
+ v[0] + scaleFactor * uv[0] + 2 * uuv[0],
121
+ v[1] + scaleFactor * uv[1] + 2 * uuv[1],
122
+ v[2] + scaleFactor * uv[2] + 2 * uuv[2]
123
+ ];
124
+ };
125
+ // Interpolation
126
+ export const slerp = (q1, q2, t) => {
127
+ const dotProduct = dot(q1, q2);
128
+ // If the dot product is negative, slerp won't take the shorter route
129
+ const q2Adjusted = dotProduct < 0 ? negate(q2) : q2;
130
+ const adjustedDot = Math.abs(dotProduct);
131
+ // If the inputs are too close for comfort, linearly interpolate
132
+ if (adjustedDot > 0.9995) {
133
+ return normalize(add(scale(q1, 1 - t), scale(q2Adjusted, t)));
134
+ }
135
+ const theta = Math.acos(adjustedDot);
136
+ const sinTheta = Math.sin(theta);
137
+ const factor1 = Math.sin((1 - t) * theta) / sinTheta;
138
+ const factor2 = Math.sin(t * theta) / sinTheta;
139
+ return normalize(add(scale(q1, factor1), scale(q2Adjusted, factor2)));
140
+ };
141
+ export const lerp = (q1, q2, t) => {
142
+ return normalize(add(scale(q1, 1 - t), scale(q2, t)));
143
+ };
144
+ // Matrix Conversion
145
+ /**
146
+ * Converts a quaternion to a 4x4 rotation matrix in column-major order.
147
+ * The resulting matrix is compatible with WebGPU and can be directly used
148
+ * with Mat4x4 operations.
149
+ */
150
+ export const toMat4 = ([x, y, z, w]) => {
151
+ const xx = x * x;
152
+ const yy = y * y;
153
+ const zz = z * z;
154
+ const xy = x * y;
155
+ const xz = x * z;
156
+ const yz = y * z;
157
+ const wx = w * x;
158
+ const wy = w * y;
159
+ const wz = w * z;
160
+ // Column-major format (WebGPU standard)
161
+ return [
162
+ 1 - 2 * (yy + zz), 2 * (xy + wz), 2 * (xz - wy), 0,
163
+ 2 * (xy - wz), 1 - 2 * (xx + zz), 2 * (yz + wx), 0,
164
+ 2 * (xz + wy), 2 * (yz - wx), 1 - 2 * (xx + yy), 0,
165
+ 0, 0, 0, 1
166
+ ];
167
+ };
168
+ // Utility Functions
169
+ export const inverse = (q) => {
170
+ const lenSq = lengthSquared(q);
171
+ if (lenSq === 0)
172
+ return [0, 0, 0, 1];
173
+ return scale(conjugate(q), 1 / lenSq);
174
+ };
175
+ export const lookAt = (forward, up) => {
176
+ // Normalize forward vector
177
+ const f = Vec3Namespace.normalize(forward);
178
+ // Calculate right vector
179
+ const r = Vec3Namespace.normalize(Vec3Namespace.cross(f, up));
180
+ // Recalculate up vector
181
+ const u = Vec3Namespace.cross(r, f);
182
+ // Convert to quaternion
183
+ const trace = r[0] + u[1] + f[2];
184
+ if (trace > 0) {
185
+ const s = Math.sqrt(trace + 1) * 2;
186
+ return [
187
+ (u[2] - f[1]) / s,
188
+ (f[0] - r[2]) / s,
189
+ (r[1] - u[0]) / s,
190
+ 0.25 * s
191
+ ];
192
+ }
193
+ else if (r[0] > u[1] && r[0] > f[2]) {
194
+ const s = Math.sqrt(1 + r[0] - u[1] - f[2]) * 2;
195
+ return [
196
+ 0.25 * s,
197
+ (u[0] + r[1]) / s,
198
+ (f[0] + r[2]) / s,
199
+ (u[2] - f[1]) / s
200
+ ];
201
+ }
202
+ else if (u[1] > f[2]) {
203
+ const s = Math.sqrt(1 + u[1] - r[0] - f[2]) * 2;
204
+ return [
205
+ (u[0] + r[1]) / s,
206
+ 0.25 * s,
207
+ (f[1] + u[2]) / s,
208
+ (f[0] - r[2]) / s
209
+ ];
210
+ }
211
+ else {
212
+ const s = Math.sqrt(1 + f[2] - r[0] - u[1]) * 2;
213
+ return [
214
+ (f[0] + r[2]) / s,
215
+ (f[1] + u[2]) / s,
216
+ 0.25 * s,
217
+ (r[1] - u[0]) / s
218
+ ];
219
+ }
220
+ };
221
+ /**
222
+ * Returns a quaternion that aligns the local Z-axis to the given direction via the shortest arc,
223
+ * then applies an additional twist around that aligned Z-axis.
224
+ *
225
+ * Note: This aligns the Z axis.
226
+ *
227
+ * @param direction - Target world-space direction for local Z. If zero-length, returns identity.
228
+ * @param twistRadians - Extra rotation around the aligned Z-axis, in radians. Defaults to 0.
229
+ */
230
+ export const alignTo = (direction, twistRadians = 0) => {
231
+ const zAxis = [0, 0, 1];
232
+ const dirLen = Vec3Namespace.length(direction);
233
+ if (dirLen === 0)
234
+ return identity;
235
+ const dir = Vec3Namespace.normalize(direction);
236
+ const dotVal = Vec3Namespace.dot(zAxis, dir);
237
+ let base;
238
+ if (dotVal > 0.999999) {
239
+ base = identity;
240
+ }
241
+ else if (dotVal < -0.999999) {
242
+ // Opposite: 180° around any axis orthogonal to Z
243
+ const orthoCandidate = [1, 0, 0];
244
+ const axis = Math.abs(Vec3Namespace.dot(zAxis, orthoCandidate)) > 0.999 ? [0, 1, 0] : orthoCandidate;
245
+ base = fromAxisAngle(axis, Math.PI);
246
+ }
247
+ else {
248
+ const axis = Vec3Namespace.normalize(Vec3Namespace.cross(zAxis, dir));
249
+ const angle = Math.acos(dotVal);
250
+ base = fromAxisAngle(axis, angle);
251
+ }
252
+ if (twistRadians === 0)
253
+ return base;
254
+ // Twist around the final aligned Z (which is 'dir' in world space)
255
+ const twist = fromAxisAngle(dir, twistRadians);
256
+ return multiply(twist, base);
257
+ };
258
+ //# sourceMappingURL=functions.js.map