@adobe/data 0.5.4 → 0.5.6

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 (346) hide show
  1. package/dist/ecs/database/create-database.d.ts +2 -2
  2. package/dist/ecs/database/database-schema/create-database-schema-test.d.ts +1 -0
  3. package/dist/ecs/database/database-schema/create-database-schema-test.js +42 -0
  4. package/dist/ecs/database/database-schema/create-database-schema-test.js.map +1 -0
  5. package/dist/ecs/database/database-schema/create-database-schema.d.ts +14 -0
  6. package/dist/ecs/database/database-schema/create-database-schema.js +32 -0
  7. package/dist/ecs/database/database-schema/create-database-schema.js.map +1 -0
  8. package/dist/ecs/database/database-schema/database-schema.d.ts +13 -0
  9. package/dist/{services/is-service.js → ecs/database/database-schema/database-schema.js} +2 -4
  10. package/dist/ecs/database/database-schema/database-schema.js.map +1 -0
  11. package/dist/ecs/database/database-schema/index.d.ts +2 -0
  12. package/dist/{services → ecs/database/database-schema}/index.js +2 -3
  13. package/dist/ecs/database/database-schema/index.js.map +1 -0
  14. package/dist/ecs/database/database.d.ts +3 -1
  15. package/dist/ecs/database/index.d.ts +1 -0
  16. package/dist/ecs/database/index.js +1 -0
  17. package/dist/ecs/database/index.js.map +1 -1
  18. package/dist/ecs/index.d.ts +2 -1
  19. package/dist/ecs/index.js +2 -1
  20. package/dist/ecs/index.js.map +1 -1
  21. package/dist/ecs/store/archetype-components.d.ts +3 -1
  22. package/dist/ecs/store/core/core.d.ts +1 -8
  23. package/dist/ecs/store/core/create-core.js +9 -4
  24. package/dist/ecs/store/core/create-core.js.map +1 -1
  25. package/dist/ecs/store/core/create-core.test.js +0 -109
  26. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  27. package/dist/ecs/store/create-store.js +21 -0
  28. package/dist/ecs/store/create-store.js.map +1 -1
  29. package/dist/ecs/store/store-schema/create-store-schema-test.js +4 -7
  30. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +1 -1
  31. package/dist/ecs/store/store-schema/create-store-schema.d.ts +2 -0
  32. package/dist/ecs/store/store-schema/create-store-schema.js +5 -0
  33. package/dist/ecs/store/store-schema/create-store-schema.js.map +1 -1
  34. package/dist/ecs/store/store-schema/index.d.ts +1 -1
  35. package/dist/ecs/store/store-schema/index.js +1 -1
  36. package/dist/ecs/store/store-schema/index.js.map +1 -1
  37. package/dist/ecs/store/store-schema/store-schema.d.ts +1 -1
  38. package/dist/ecs/world/create-world.d.ts +7 -0
  39. package/dist/ecs/world/create-world.js +108 -0
  40. package/dist/ecs/world/create-world.js.map +1 -0
  41. package/dist/ecs/world/create-world.test.d.ts +1 -0
  42. package/dist/ecs/world/create-world.test.js +499 -0
  43. package/dist/ecs/world/create-world.test.js.map +1 -0
  44. package/dist/ecs/world/index.d.ts +4 -0
  45. package/dist/ecs/world/index.js +26 -0
  46. package/dist/ecs/world/index.js.map +1 -0
  47. package/dist/ecs/world/system.d.ts +20 -0
  48. package/dist/ecs/world/system.js +2 -0
  49. package/dist/ecs/world/system.js.map +1 -0
  50. package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +1 -0
  51. package/dist/ecs/world/world-schema/create-world-schema-test.js +55 -0
  52. package/dist/ecs/world/world-schema/create-world-schema-test.js.map +1 -0
  53. package/dist/ecs/world/world-schema/create-world-schema.d.ts +19 -0
  54. package/dist/ecs/world/world-schema/create-world-schema.js +33 -0
  55. package/dist/ecs/world/world-schema/create-world-schema.js.map +1 -0
  56. package/dist/ecs/world/world-schema/index.d.ts +2 -0
  57. package/dist/ecs/world/world-schema/index.js +24 -0
  58. package/dist/ecs/world/world-schema/index.js.map +1 -0
  59. package/dist/ecs/world/world-schema/world-schema.d.ts +18 -0
  60. package/dist/ecs/world/world-schema/world-schema.js +23 -0
  61. package/dist/ecs/world/world-schema/world-schema.js.map +1 -0
  62. package/dist/ecs/world/world.d.ts +9 -0
  63. package/dist/ecs/world/world.js +2 -0
  64. package/dist/ecs/world/world.js.map +1 -0
  65. package/dist/functions/serialization/serialization.test.js +78 -0
  66. package/dist/functions/serialization/serialization.test.js.map +1 -1
  67. package/dist/graphics/camera/camera.d.ts +62 -0
  68. package/dist/graphics/camera/camera.js +17 -0
  69. package/dist/graphics/camera/camera.js.map +1 -0
  70. package/dist/graphics/camera/index.d.ts +4 -0
  71. package/dist/graphics/camera/index.js +5 -0
  72. package/dist/graphics/camera/index.js.map +1 -0
  73. package/dist/graphics/camera/screen-to-world-ray.d.ts +12 -0
  74. package/dist/graphics/camera/screen-to-world-ray.js +49 -0
  75. package/dist/graphics/camera/screen-to-world-ray.js.map +1 -0
  76. package/dist/graphics/camera/screen-to-world-ray.test.d.ts +1 -0
  77. package/dist/graphics/camera/screen-to-world-ray.test.js +171 -0
  78. package/dist/graphics/camera/screen-to-world-ray.test.js.map +1 -0
  79. package/dist/graphics/camera/to-view-projection.d.ts +3 -0
  80. package/dist/graphics/camera/to-view-projection.js +8 -0
  81. package/dist/graphics/camera/to-view-projection.js.map +1 -0
  82. package/dist/graphics/camera/world-to-screen.d.ts +12 -0
  83. package/dist/graphics/camera/world-to-screen.js +38 -0
  84. package/dist/graphics/camera/world-to-screen.js.map +1 -0
  85. package/dist/graphics/camera/world-to-screen.test.d.ts +1 -0
  86. package/dist/graphics/camera/world-to-screen.test.js +124 -0
  87. package/dist/graphics/camera/world-to-screen.test.js.map +1 -0
  88. package/dist/graphics/create-struct-gpu-buffer.d.ts +7 -0
  89. package/dist/graphics/create-struct-gpu-buffer.js +17 -0
  90. package/dist/graphics/create-struct-gpu-buffer.js.map +1 -0
  91. package/dist/graphics/extract-wgsl-bindings.d.ts +5 -0
  92. package/dist/graphics/extract-wgsl-bindings.js +10 -0
  93. package/dist/graphics/extract-wgsl-bindings.js.map +1 -0
  94. package/dist/graphics/frame.d.ts +22 -0
  95. package/dist/graphics/frame.js +12 -0
  96. package/dist/graphics/frame.js.map +1 -0
  97. package/dist/graphics/get-web-gpu-device-and-context.d.ts +2 -0
  98. package/dist/graphics/get-web-gpu-device-and-context.js +21 -0
  99. package/dist/graphics/get-web-gpu-device-and-context.js.map +1 -0
  100. package/dist/graphics/graphics-context.d.ts +5 -0
  101. package/dist/graphics/graphics-context.js +2 -0
  102. package/dist/graphics/graphics-context.js.map +1 -0
  103. package/dist/graphics/index.d.ts +5 -0
  104. package/dist/graphics/index.js +5 -0
  105. package/dist/graphics/index.js.map +1 -0
  106. package/dist/graphics/to-gpu-buffer.d.ts +2 -0
  107. package/dist/graphics/to-gpu-buffer.js +14 -0
  108. package/dist/graphics/to-gpu-buffer.js.map +1 -0
  109. package/dist/internal/array/index.d.ts +1 -0
  110. package/dist/internal/array/index.js +23 -0
  111. package/dist/internal/array/index.js.map +1 -0
  112. package/dist/internal/array/topological-sort.d.ts +26 -0
  113. package/dist/internal/array/topological-sort.js +79 -0
  114. package/dist/internal/array/topological-sort.js.map +1 -0
  115. package/dist/internal/array/topological-sort.test.d.ts +1 -0
  116. package/dist/internal/array/topological-sort.test.js +100 -0
  117. package/dist/internal/array/topological-sort.test.js.map +1 -0
  118. package/dist/internal/function/debounce.d.ts +70 -0
  119. package/dist/internal/function/debounce.js +155 -0
  120. package/dist/internal/function/debounce.js.map +1 -0
  121. package/dist/internal/function/debounce.test.d.ts +1 -0
  122. package/dist/internal/function/debounce.test.js +306 -0
  123. package/dist/internal/function/debounce.test.js.map +1 -0
  124. package/dist/lit/elements/application-element.js.map +1 -1
  125. package/dist/lit/elements/application-host.d.ts +16 -0
  126. package/dist/lit/elements/application-host.js +59 -0
  127. package/dist/lit/elements/application-host.js.map +1 -0
  128. package/dist/lit/elements/index.d.ts +2 -0
  129. package/dist/lit/elements/index.js +2 -0
  130. package/dist/lit/elements/index.js.map +1 -1
  131. package/dist/lit/hooks/index.d.ts +3 -0
  132. package/dist/lit/hooks/index.js +3 -0
  133. package/dist/lit/hooks/index.js.map +1 -1
  134. package/dist/lit/hooks/use-drag-observe.d.ts +1 -1
  135. package/dist/lit/hooks/use-drag-observe.js +1 -1
  136. package/dist/lit/hooks/use-drag-observe.js.map +1 -1
  137. package/dist/lit/hooks/use-drag-transaction.d.ts +2 -3
  138. package/dist/lit/hooks/use-drag-transaction.js +3 -3
  139. package/dist/lit/hooks/use-drag-transaction.js.map +1 -1
  140. package/dist/math/aabb/aabb.d.ts +48 -0
  141. package/dist/math/aabb/aabb.js +86 -0
  142. package/dist/math/aabb/aabb.js.map +1 -0
  143. package/dist/math/aabb/line-intersection.test.d.ts +1 -0
  144. package/dist/math/aabb/line-intersection.test.js +210 -0
  145. package/dist/math/aabb/line-intersection.test.js.map +1 -0
  146. package/dist/math/constants.d.ts +4 -0
  147. package/dist/math/constants.js +26 -0
  148. package/dist/math/constants.js.map +1 -0
  149. package/dist/math/index.d.ts +18 -0
  150. package/dist/math/index.js +40 -0
  151. package/dist/math/index.js.map +1 -0
  152. package/dist/math/line2/intersects.test.d.ts +1 -0
  153. package/dist/math/line2/intersects.test.js +104 -0
  154. package/dist/math/line2/intersects.test.js.map +1 -0
  155. package/dist/math/line2/line2.d.ts +42 -0
  156. package/dist/math/line2/line2.js +78 -0
  157. package/dist/math/line2/line2.js.map +1 -0
  158. package/dist/math/line3/closest-point-on-line.test.d.ts +1 -0
  159. package/dist/math/line3/closest-point-on-line.test.js +107 -0
  160. package/dist/math/line3/closest-point-on-line.test.js.map +1 -0
  161. package/dist/math/line3/interpolate.test.d.ts +1 -0
  162. package/dist/math/line3/interpolate.test.js +66 -0
  163. package/dist/math/line3/interpolate.test.js.map +1 -0
  164. package/dist/math/line3/line3.d.ts +49 -0
  165. package/dist/math/line3/line3.js +77 -0
  166. package/dist/math/line3/line3.js.map +1 -0
  167. package/dist/math/line3/sub-line.test.d.ts +1 -0
  168. package/dist/math/line3/sub-line.test.js +70 -0
  169. package/dist/math/line3/sub-line.test.js.map +1 -0
  170. package/dist/math/mat4x4/mat4x4.d.ts +37 -0
  171. package/dist/math/mat4x4/mat4x4.js +246 -0
  172. package/dist/math/mat4x4/mat4x4.js.map +1 -0
  173. package/dist/math/picking/index.d.ts +1 -0
  174. package/dist/math/picking/index.js +23 -0
  175. package/dist/math/picking/index.js.map +1 -0
  176. package/dist/math/picking/pick-from-tables.d.ts +18 -0
  177. package/dist/math/picking/pick-from-tables.js +154 -0
  178. package/dist/math/picking/pick-from-tables.js.map +1 -0
  179. package/dist/math/picking/pick-result.d.ts +7 -0
  180. package/dist/{services/service.js → math/picking/pick-result.js} +1 -1
  181. package/dist/math/picking/pick-result.js.map +1 -0
  182. package/dist/math/quat/quat.d.ts +42 -0
  183. package/dist/math/quat/quat.js +220 -0
  184. package/dist/math/quat/quat.js.map +1 -0
  185. package/dist/math/vec2/vec2.d.ts +63 -0
  186. package/dist/math/vec2/vec2.js +114 -0
  187. package/dist/math/vec2/vec2.js.map +1 -0
  188. package/dist/math/vec3/vec3.d.ts +65 -0
  189. package/dist/math/vec3/vec3.js +154 -0
  190. package/dist/math/vec3/vec3.js.map +1 -0
  191. package/dist/math/vec4/vec4.d.ts +63 -0
  192. package/dist/math/vec4/vec4.js +154 -0
  193. package/dist/math/vec4/vec4.js.map +1 -0
  194. package/dist/observe/to-async-generator.js +4 -0
  195. package/dist/observe/to-async-generator.js.map +1 -1
  196. package/dist/observe/with-filter.d.ts +1 -1
  197. package/dist/observe/with-filter.js.map +1 -1
  198. package/dist/samples/index.d.ts +13 -0
  199. package/dist/samples/index.js +27 -0
  200. package/dist/samples/index.js.map +1 -0
  201. package/dist/samples/todo/elements/todo-list/todo-list-presentation.d.ts +25 -0
  202. package/dist/samples/todo/elements/todo-list/todo-list-presentation.js +12 -0
  203. package/dist/samples/todo/elements/todo-list/todo-list-presentation.js.map +1 -0
  204. package/dist/samples/todo/elements/todo-list/todo-list.css.d.ts +18 -0
  205. package/dist/samples/todo/elements/todo-list/todo-list.css.js +27 -0
  206. package/dist/samples/todo/elements/todo-list/todo-list.css.js.map +1 -0
  207. package/dist/samples/todo/elements/todo-list/todo-list.d.ts +12 -0
  208. package/dist/samples/todo/elements/todo-list/todo-list.js +60 -0
  209. package/dist/samples/todo/elements/todo-list/todo-list.js.map +1 -0
  210. package/dist/samples/todo/elements/todo-row/index.d.ts +18 -0
  211. package/dist/samples/todo/elements/todo-row/index.js +19 -0
  212. package/dist/samples/todo/elements/todo-row/index.js.map +1 -0
  213. package/dist/samples/todo/elements/todo-row/todo-row-presentation.d.ts +18 -0
  214. package/dist/samples/todo/elements/todo-row/todo-row-presentation.js +66 -0
  215. package/dist/samples/todo/elements/todo-row/todo-row-presentation.js.map +1 -0
  216. package/dist/samples/todo/elements/todo-row/todo-row.css.d.ts +1 -0
  217. package/dist/samples/todo/elements/todo-row/todo-row.css.js +65 -0
  218. package/dist/samples/todo/elements/todo-row/todo-row.css.js.map +1 -0
  219. package/dist/samples/todo/elements/todo-row/todo-row.d.ts +14 -0
  220. package/dist/samples/todo/elements/todo-row/todo-row.js +60 -0
  221. package/dist/samples/todo/elements/todo-row/todo-row.js.map +1 -0
  222. package/dist/samples/todo/elements/todo-toolbar/index.d.ts +18 -0
  223. package/dist/samples/todo/elements/todo-toolbar/index.js +19 -0
  224. package/dist/samples/todo/elements/todo-toolbar/index.js.map +1 -0
  225. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.d.ts +22 -0
  226. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js +57 -0
  227. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js.map +1 -0
  228. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.d.ts +1 -0
  229. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.js +50 -0
  230. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.js.map +1 -0
  231. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.d.ts +11 -0
  232. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js +77 -0
  233. package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js.map +1 -0
  234. package/dist/samples/todo/elements/todo-undo-redo/index.d.ts +18 -0
  235. package/dist/samples/todo/elements/todo-undo-redo/index.js +19 -0
  236. package/dist/samples/todo/elements/todo-undo-redo/index.js.map +1 -0
  237. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.d.ts +17 -0
  238. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js +45 -0
  239. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js.map +1 -0
  240. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.d.ts +1 -0
  241. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js +28 -0
  242. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js.map +1 -0
  243. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.d.ts +11 -0
  244. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.js +52 -0
  245. package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.js.map +1 -0
  246. package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.d.ts +6 -0
  247. package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.js +21 -0
  248. package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.js.map +1 -0
  249. package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.d.ts +19 -0
  250. package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.js +2 -0
  251. package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.js.map +1 -0
  252. package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.d.ts +19 -0
  253. package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.js +2 -0
  254. package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.js.map +1 -0
  255. package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.d.ts +19 -0
  256. package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.js +2 -0
  257. package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.js.map +1 -0
  258. package/dist/samples/todo/services/dependent-state-service/dependent-state/index.d.ts +20 -0
  259. package/dist/samples/todo/services/dependent-state-service/dependent-state/index.js +21 -0
  260. package/dist/samples/todo/services/dependent-state-service/dependent-state/index.js.map +1 -0
  261. package/dist/samples/todo/services/dependent-state-service/dependent-state-service.d.ts +19 -0
  262. package/dist/samples/todo/services/dependent-state-service/dependent-state-service.js +2 -0
  263. package/dist/samples/todo/services/dependent-state-service/dependent-state-service.js.map +1 -0
  264. package/dist/samples/todo/services/main-service/create-main-service.d.ts +25 -0
  265. package/dist/samples/todo/services/main-service/create-main-service.js +39 -0
  266. package/dist/samples/todo/services/main-service/create-main-service.js.map +1 -0
  267. package/dist/samples/todo/services/main-service/todo-main-service.d.ts +35 -0
  268. package/dist/samples/todo/services/main-service/todo-main-service.js +2 -0
  269. package/dist/samples/todo/services/main-service/todo-main-service.js.map +1 -0
  270. package/dist/samples/todo/services/state-service/create-todo-database.d.ts +13 -0
  271. package/dist/samples/todo/services/state-service/create-todo-database.js +26 -0
  272. package/dist/samples/todo/services/state-service/create-todo-database.js.map +1 -0
  273. package/dist/samples/todo/services/state-service/create-todo-store.d.ts +13 -0
  274. package/dist/samples/todo/services/state-service/create-todo-store.js +41 -0
  275. package/dist/samples/todo/services/state-service/create-todo-store.js.map +1 -0
  276. package/dist/samples/todo/services/state-service/todo-state-service.d.ts +22 -0
  277. package/dist/samples/todo/services/state-service/todo-state-service.js +2 -0
  278. package/dist/samples/todo/services/state-service/todo-state-service.js.map +1 -0
  279. package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.d.ts +2 -0
  280. package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.js +26 -0
  281. package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.js.map +1 -0
  282. package/dist/samples/todo/services/state-service/transactions/create-todo.d.ts +22 -0
  283. package/dist/samples/todo/services/state-service/transactions/create-todo.js +13 -0
  284. package/dist/samples/todo/services/state-service/transactions/create-todo.js.map +1 -0
  285. package/dist/samples/todo/services/state-service/transactions/create-todo.test.d.ts +1 -0
  286. package/dist/samples/todo/services/state-service/transactions/create-todo.test.js +32 -0
  287. package/dist/samples/todo/services/state-service/transactions/create-todo.test.js.map +1 -0
  288. package/dist/samples/todo/services/state-service/transactions/delete-all-todos.d.ts +19 -0
  289. package/dist/samples/todo/services/state-service/transactions/delete-all-todos.js +16 -0
  290. package/dist/samples/todo/services/state-service/transactions/delete-all-todos.js.map +1 -0
  291. package/dist/samples/todo/services/state-service/transactions/delete-todo.d.ts +3 -0
  292. package/dist/samples/todo/services/state-service/transactions/delete-todo.js +24 -0
  293. package/dist/samples/todo/services/state-service/transactions/delete-todo.js.map +1 -0
  294. package/dist/samples/todo/services/state-service/transactions/delete-todo.test.d.ts +1 -0
  295. package/dist/samples/todo/services/state-service/transactions/delete-todo.test.js +40 -0
  296. package/dist/samples/todo/services/state-service/transactions/delete-todo.test.js.map +1 -0
  297. package/dist/samples/todo/services/state-service/transactions/drag-todo.d.ts +7 -0
  298. package/dist/samples/todo/services/state-service/transactions/drag-todo.js +33 -0
  299. package/dist/samples/todo/services/state-service/transactions/drag-todo.js.map +1 -0
  300. package/dist/samples/todo/services/state-service/transactions/index.d.ts +23 -0
  301. package/dist/samples/todo/services/state-service/transactions/index.js +25 -0
  302. package/dist/samples/todo/services/state-service/transactions/index.js.map +1 -0
  303. package/dist/samples/todo/services/state-service/transactions/reorder-todos.d.ts +23 -0
  304. package/dist/samples/todo/services/state-service/transactions/reorder-todos.js +11 -0
  305. package/dist/samples/todo/services/state-service/transactions/reorder-todos.js.map +1 -0
  306. package/dist/samples/todo/services/state-service/transactions/toggle-complete.d.ts +20 -0
  307. package/dist/samples/todo/services/state-service/transactions/toggle-complete.js +11 -0
  308. package/dist/samples/todo/services/state-service/transactions/toggle-complete.js.map +1 -0
  309. package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.d.ts +1 -0
  310. package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.js +81 -0
  311. package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.js.map +1 -0
  312. package/dist/samples/todo/todo-element.d.ts +21 -0
  313. package/dist/samples/todo/todo-element.js +4 -0
  314. package/dist/samples/todo/todo-element.js.map +1 -0
  315. package/dist/samples/todo/todo-host.d.ts +8 -0
  316. package/dist/samples/todo/todo-host.js +55 -0
  317. package/dist/samples/todo/todo-host.js.map +1 -0
  318. package/dist/samples/todo/todo-main-element.d.ts +27 -0
  319. package/dist/samples/todo/todo-main-element.js +63 -0
  320. package/dist/samples/todo/todo-main-element.js.map +1 -0
  321. package/dist/samples/todo/todo-sample.d.ts +3 -0
  322. package/dist/samples/todo/todo-sample.js +39 -0
  323. package/dist/samples/todo/todo-sample.js.map +1 -0
  324. package/dist/schema/schema.d.ts +11 -6
  325. package/dist/schema/schema.js.map +1 -1
  326. package/dist/tsconfig.tsbuildinfo +1 -1
  327. package/dist/typed-buffer/register-typed-buffer-codecs.js +39 -22
  328. package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
  329. package/dist/typed-buffer/structs/get-struct-layout.js +3 -0
  330. package/dist/typed-buffer/structs/get-struct-layout.js.map +1 -1
  331. package/package.json +20 -3
  332. package/dist/service/to-frontend-service.d.ts +0 -12
  333. package/dist/service/to-frontend-service.js +0 -5
  334. package/dist/service/to-frontend-service.js.map +0 -1
  335. package/dist/services/add-observable-actions.d.ts +0 -29
  336. package/dist/services/add-observable-actions.js +0 -108
  337. package/dist/services/add-observable-actions.js.map +0 -1
  338. package/dist/services/index.d.ts +0 -4
  339. package/dist/services/index.js.map +0 -1
  340. package/dist/services/is-service.d.ts +0 -2
  341. package/dist/services/is-service.js.map +0 -1
  342. package/dist/services/progressive-result.d.ts +0 -96
  343. package/dist/services/progressive-result.js +0 -99
  344. package/dist/services/progressive-result.js.map +0 -1
  345. package/dist/services/service.d.ts +0 -4
  346. package/dist/services/service.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ import { Mat4x4 } from "../../math/index.js";
2
+ import type { Camera } from "./camera.js";
3
+ export declare const toViewProjection: (camera: Camera) => Mat4x4;
@@ -0,0 +1,8 @@
1
+ import { Mat4x4 } from "../../math/index.js";
2
+ export const toViewProjection = (camera) => {
3
+ const perspective = Mat4x4.perspective(camera.fieldOfView, camera.aspect, camera.nearPlane, camera.farPlane);
4
+ const lookAt = Mat4x4.lookAt(camera.position, camera.target, camera.up);
5
+ const viewProjection = Mat4x4.multiply(perspective, lookAt);
6
+ return viewProjection;
7
+ };
8
+ //# sourceMappingURL=to-view-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-view-projection.js","sourceRoot":"","sources":["../../../src/graphics/camera/to-view-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Vec3 } from "../../math/index.js";
2
+ import type { Camera } from "./camera.js";
3
+ /**
4
+ * Converts a world space coordinate to screen space coordinates and depth.
5
+ *
6
+ * @param worldPosition - The 3D world position to convert
7
+ * @param camera - The camera resource containing position, target, FOV, etc.
8
+ * @param canvasWidth - The width of the canvas in pixels
9
+ * @param canvasHeight - The height of the canvas in pixels
10
+ * @returns Screen space coordinates and depth [x, y, depth] where (0,0) is top-left and (width,height) is bottom-right, depth is 0-1 (near=0, far=1) or 2 for behind camera
11
+ */
12
+ export declare const worldToScreen: (worldPosition: Vec3, camera: Camera, canvasWidth: number, canvasHeight: number) => [number, number, number];
@@ -0,0 +1,38 @@
1
+ import { Mat4x4 } from "../../math/index.js";
2
+ /**
3
+ * Converts a world space coordinate to screen space coordinates and depth.
4
+ *
5
+ * @param worldPosition - The 3D world position to convert
6
+ * @param camera - The camera resource containing position, target, FOV, etc.
7
+ * @param canvasWidth - The width of the canvas in pixels
8
+ * @param canvasHeight - The height of the canvas in pixels
9
+ * @returns Screen space coordinates and depth [x, y, depth] where (0,0) is top-left and (width,height) is bottom-right, depth is 0-1 (near=0, far=1) or 2 for behind camera
10
+ */
11
+ export const worldToScreen = (worldPosition, camera, canvasWidth, canvasHeight) => {
12
+ // Create the view-projection matrix (same as used in the shader)
13
+ const perspective = Mat4x4.perspective(camera.fieldOfView, camera.aspect, camera.nearPlane, camera.farPlane);
14
+ const lookAt = Mat4x4.lookAt(camera.position, camera.target, camera.up);
15
+ const viewProjection = Mat4x4.multiply(perspective, lookAt);
16
+ // Transform world position to clip space
17
+ const clipSpace = Mat4x4.multiplyVec4(viewProjection, [...worldPosition, 1]);
18
+ // Check if point is behind camera (W < 0)
19
+ if (clipSpace[3] <= 0) {
20
+ // Return invalid coordinates for points behind camera
21
+ return [canvasWidth * 2, canvasHeight * 2, 2.0];
22
+ }
23
+ // Perform perspective divide to get normalized device coordinates (NDC)
24
+ const ndcX = clipSpace[0] / clipSpace[3];
25
+ const ndcY = clipSpace[1] / clipSpace[3];
26
+ const ndcZ = clipSpace[2] / clipSpace[3];
27
+ // Convert NDC to screen coordinates
28
+ // NDC: (-1,-1) is bottom-left, (1,1) is top-right
29
+ // Screen: (0,0) is top-left, (width,height) is bottom-right
30
+ const screenX = (ndcX + 1) * 0.5 * canvasWidth;
31
+ const screenY = (1 - ndcY) * 0.5 * canvasHeight; // Flip Y axis
32
+ // Calculate normalized depth (0 to 1)
33
+ // The perspective matrix uses reversed depth (near=1, far=0)
34
+ // So we need to invert the depth calculation
35
+ const depth = 1.0 - (ndcZ + 1) * 0.5;
36
+ return [screenX, screenY, depth];
37
+ };
38
+ //# sourceMappingURL=world-to-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-to-screen.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,aAAmB,EACnB,MAAc,EACd,WAAmB,EACnB,YAAoB,EACI,EAAE;IAC1B,iEAAiE;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE5D,yCAAyC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7E,0CAA0C;IAC1C,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,sDAAsD;QACtD,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,wEAAwE;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzC,oCAAoC;IACpC,kDAAkD;IAClD,4DAA4D;IAC5D,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,cAAc;IAE/D,sCAAsC;IACtC,6DAA6D;IAC7D,6CAA6C;IAC7C,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAErC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,124 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { worldToScreen } from "./world-to-screen.js";
3
+ // Helper function to create a standard camera for testing
4
+ const createTestCamera = () => ({
5
+ aspect: 16 / 9,
6
+ fieldOfView: Math.PI / 4,
7
+ nearPlane: 0.1,
8
+ farPlane: 100.0,
9
+ position: [0, 0, 10],
10
+ target: [0, 0, 0],
11
+ up: [0, 1, 0],
12
+ });
13
+ describe("worldToScreen", () => {
14
+ const camera = createTestCamera();
15
+ const canvasWidth = 1600;
16
+ const canvasHeight = 900;
17
+ it("should convert world position at origin to screen center", () => {
18
+ const [screenX, screenY, depth] = worldToScreen([0, 0, 0], camera, canvasWidth, canvasHeight);
19
+ expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
20
+ expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
21
+ expect(depth).toBeGreaterThanOrEqual(0);
22
+ expect(depth).toBeLessThanOrEqual(1);
23
+ });
24
+ it("should convert positive X world position to right side of screen", () => {
25
+ const [screenX, screenY, depth] = worldToScreen([5, 0, 0], camera, canvasWidth, canvasHeight);
26
+ expect(screenX).toBeGreaterThan(canvasWidth / 2);
27
+ expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
28
+ expect(depth).toBeGreaterThanOrEqual(0);
29
+ expect(depth).toBeLessThanOrEqual(1);
30
+ });
31
+ it("should convert negative X world position to left side of screen", () => {
32
+ const [screenX, screenY, depth] = worldToScreen([-5, 0, 0], camera, canvasWidth, canvasHeight);
33
+ expect(screenX).toBeLessThan(canvasWidth / 2);
34
+ expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
35
+ expect(depth).toBeGreaterThanOrEqual(0);
36
+ expect(depth).toBeLessThanOrEqual(1);
37
+ });
38
+ it("should convert positive Y world position to top of screen", () => {
39
+ const [screenX, screenY, depth] = worldToScreen([0, 5, 0], camera, canvasWidth, canvasHeight);
40
+ expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
41
+ expect(screenY).toBeLessThan(canvasHeight / 2);
42
+ expect(depth).toBeGreaterThanOrEqual(0);
43
+ expect(depth).toBeLessThanOrEqual(1);
44
+ });
45
+ it("should convert negative Y world position to bottom of screen", () => {
46
+ const [screenX, screenY, depth] = worldToScreen([0, -5, 0], camera, canvasWidth, canvasHeight);
47
+ expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
48
+ expect(screenY).toBeGreaterThan(canvasHeight / 2);
49
+ expect(depth).toBeGreaterThanOrEqual(0);
50
+ expect(depth).toBeLessThanOrEqual(1);
51
+ });
52
+ it("should handle positions behind camera", () => {
53
+ const [screenX, screenY, depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
54
+ // Should be behind camera, so screen coordinates might be invalid and depth should be 2
55
+ expect(screenX).toBeGreaterThan(canvasWidth);
56
+ expect(screenY).toBeGreaterThan(canvasHeight);
57
+ expect(depth).toBe(2);
58
+ });
59
+ it("should handle positions very close to camera", () => {
60
+ const [screenX, screenY, depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
61
+ expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
62
+ expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
63
+ expect(depth).toBeGreaterThanOrEqual(0);
64
+ expect(depth).toBeLessThanOrEqual(1);
65
+ });
66
+ it("should handle different canvas aspect ratios", () => {
67
+ const [squareX, squareY, squareDepth] = worldToScreen([0, 0, 0], camera, 1000, 1000);
68
+ const [wideX, wideY, wideDepth] = worldToScreen([0, 0, 0], camera, 2000, 1000);
69
+ expect(squareX).toBeCloseTo(500, 0);
70
+ expect(squareY).toBeCloseTo(500, 0);
71
+ expect(wideX).toBeCloseTo(1000, 0);
72
+ expect(wideY).toBeCloseTo(500, 0);
73
+ expect(squareDepth).toBeCloseTo(wideDepth, 2);
74
+ });
75
+ it("should return consistent depth values", () => {
76
+ const [x1, y1, depth1] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
77
+ const [x2, y2, depth2] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
78
+ expect(depth1).toBeCloseTo(depth2, 6);
79
+ });
80
+ describe("depth calculation", () => {
81
+ it("should return ~0.5 for position at near plane", () => {
82
+ const [, , depth] = worldToScreen([0, 0, 0.1], camera, canvasWidth, canvasHeight);
83
+ expect(depth).toBeCloseTo(0.5, 2);
84
+ });
85
+ it("should return 2 for position at far plane (behind camera)", () => {
86
+ const [, , depth] = worldToScreen([0, 0, 100], camera, canvasWidth, canvasHeight);
87
+ expect(depth).toBe(2);
88
+ });
89
+ it("should return ~0.5 for position at middle distance in front of camera", () => {
90
+ const [, , depth] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
91
+ expect(depth).toBeCloseTo(0.5, 2);
92
+ });
93
+ it("should return values between 0 and 1 for positions in range", () => {
94
+ const [, , depth1] = worldToScreen([0, 0, 1], camera, canvasWidth, canvasHeight);
95
+ const [, , depth2] = worldToScreen([0, 0, 2], camera, canvasWidth, canvasHeight);
96
+ const [, , depth3] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
97
+ expect(depth1).toBeGreaterThanOrEqual(0);
98
+ expect(depth1).toBeLessThanOrEqual(1);
99
+ expect(depth2).toBeGreaterThanOrEqual(0);
100
+ expect(depth2).toBeLessThanOrEqual(1);
101
+ expect(depth3).toBeGreaterThanOrEqual(0);
102
+ expect(depth3).toBeLessThanOrEqual(1);
103
+ });
104
+ it("should handle positions behind camera", () => {
105
+ const [, , depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
106
+ expect(depth).toBe(2);
107
+ });
108
+ it("should handle positions very close to camera", () => {
109
+ const [, , depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
110
+ expect(depth).toBeCloseTo(0.5, 2);
111
+ });
112
+ it("should be consistent for visible positions", () => {
113
+ const worldPos = [2, 1, 5];
114
+ const [screenX, screenY, depth] = worldToScreen(worldPos, camera, canvasWidth, canvasHeight);
115
+ expect(depth).toBeGreaterThanOrEqual(0);
116
+ expect(depth).toBeLessThanOrEqual(1);
117
+ expect(screenX).toBeGreaterThanOrEqual(0);
118
+ expect(screenX).toBeLessThanOrEqual(canvasWidth);
119
+ expect(screenY).toBeGreaterThanOrEqual(0);
120
+ expect(screenY).toBeLessThanOrEqual(canvasHeight);
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=world-to-screen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-to-screen.test.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,0DAA0D;AAC1D,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,EAAE,GAAG,CAAC;IACd,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IACxB,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAChB,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC;IACzB,MAAM,YAAY,GAAG,GAAG,CAAC;IAEzB,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC9F,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC9F,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/F,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC9F,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/F,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/F,wFAAwF;QACxF,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAChG,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/E,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACrF,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAClF,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAClF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC7E,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACnE,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YACjF,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YACjF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAClF,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAC7F,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FromSchema, Schema } from "../schema/schema.js";
2
+ export declare const createStructGPUBuffer: <S extends Schema>(args: {
3
+ device: GPUDevice;
4
+ schema: S;
5
+ elements: FromSchema<S>[];
6
+ usage: GPUBufferUsageFlags;
7
+ }) => GPUBuffer;
@@ -0,0 +1,17 @@
1
+ import { createStructBuffer, getStructLayout } from "../typed-buffer/index.js";
2
+ export const createStructGPUBuffer = (args) => {
3
+ const { device, schema, elements, usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST } = args;
4
+ const layout = getStructLayout(schema);
5
+ const buffer = device.createBuffer({
6
+ size: Math.max(elements.length, 1) * layout.size,
7
+ usage: usage,
8
+ mappedAtCreation: true,
9
+ });
10
+ const typedBuffer = createStructBuffer(schema, buffer.getMappedRange());
11
+ for (let i = 0; i < elements.length; i++) {
12
+ typedBuffer.set(i, elements[i]);
13
+ }
14
+ buffer.unmap();
15
+ return buffer;
16
+ };
17
+ //# sourceMappingURL=create-struct-gpu-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-struct-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/create-struct-gpu-buffer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,IAKC,EACQ,EAAE;IACX,MAAM,EACF,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAC3D,GAAG,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI;QAChD,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare function extractWGSLBindings(wgsl: string): {
2
+ name: string;
3
+ binding: number;
4
+ group: number;
5
+ }[];
@@ -0,0 +1,10 @@
1
+ export function extractWGSLBindings(wgsl) {
2
+ const regex = /@binding\((\d+)\)\s+@group\((\d+)\)\s+var<[^>]+>\s+(\w+)\s*:/g;
3
+ const result = [];
4
+ let match;
5
+ while ((match = regex.exec(wgsl))) {
6
+ result.push({ name: match[3], binding: +match[1], group: +match[2] });
7
+ }
8
+ return result;
9
+ }
10
+ //# sourceMappingURL=extract-wgsl-bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-wgsl-bindings.js","sourceRoot":"","sources":["../../src/graphics/extract-wgsl-bindings.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,+DAA+D,CAAC;IAC9E,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { FromSchema } from "../schema/schema.js";
2
+ export declare const FrameSchema: {
3
+ readonly type: "object";
4
+ readonly properties: {
5
+ readonly count: {
6
+ readonly type: "number";
7
+ readonly default: 0;
8
+ };
9
+ readonly deltaTime: {
10
+ readonly type: "number";
11
+ readonly default: 0;
12
+ };
13
+ };
14
+ readonly required: readonly ["count", "deltaTime"];
15
+ readonly additionalProperties: false;
16
+ readonly default: {
17
+ readonly count: number;
18
+ readonly deltaTime: number;
19
+ };
20
+ readonly transient: true;
21
+ };
22
+ export type Frame = FromSchema<typeof FrameSchema>;
@@ -0,0 +1,12 @@
1
+ export const FrameSchema = {
2
+ type: "object",
3
+ properties: {
4
+ count: { type: "number", default: 0 },
5
+ deltaTime: { type: "number", default: 0 },
6
+ },
7
+ required: ["count", "deltaTime"],
8
+ additionalProperties: false,
9
+ default: { count: 0, deltaTime: 1 / 60 },
10
+ transient: true,
11
+ };
12
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/graphics/frame.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACrC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;KAC5C;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAChC,oBAAoB,EAAE,KAAK;IAC3B,OAAO,EAAE,EAAE,KAAK,EAAE,CAAW,EAAE,SAAS,EAAE,CAAC,GAAG,EAAY,EAAE;IAC5D,SAAS,EAAE,IAAI;CACQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GraphicsContext } from "./graphics-context.js";
2
+ export declare const getWebGPUGraphicsContext: (canvas: HTMLCanvasElement) => Promise<GraphicsContext>;
@@ -0,0 +1,21 @@
1
+ export const getWebGPUGraphicsContext = async (canvas) => {
2
+ if (!canvas) {
3
+ throw new Error('Canvas not found');
4
+ }
5
+ const adapter = await navigator.gpu?.requestAdapter();
6
+ if (!adapter) {
7
+ throw new Error('No GPU adapter found');
8
+ }
9
+ const device = await adapter.requestDevice();
10
+ const context = canvas.getContext('webgpu');
11
+ if (!context) {
12
+ throw new Error('No WebGPU context');
13
+ }
14
+ context.configure({
15
+ device,
16
+ format: navigator.gpu.getPreferredCanvasFormat(),
17
+ alphaMode: 'premultiplied',
18
+ });
19
+ return { context, device, canvas };
20
+ };
21
+ //# sourceMappingURL=get-web-gpu-device-and-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-web-gpu-device-and-context.js","sourceRoot":"","sources":["../../src/graphics/get-web-gpu-device-and-context.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,MAAyB,EAC7C,EAAE;IACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,SAAS,CAAC;QACd,MAAM;QACN,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE;QAChD,SAAS,EAAE,eAAe;KAC7B,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type GraphicsContext = {
2
+ readonly canvas: HTMLCanvasElement;
3
+ readonly device: GPUDevice;
4
+ readonly context: GPUCanvasContext;
5
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=graphics-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphics-context.js","sourceRoot":"","sources":["../../src/graphics/graphics-context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from './graphics-context.js';
2
+ export * from './get-web-gpu-device-and-context.js';
3
+ export * from './create-struct-gpu-buffer.js';
4
+ export * from './to-gpu-buffer.js';
5
+ export { type Camera } from './camera/index.js';
@@ -0,0 +1,5 @@
1
+ export * from './graphics-context.js';
2
+ export * from './get-web-gpu-device-and-context.js';
3
+ export * from './create-struct-gpu-buffer.js';
4
+ export * from './to-gpu-buffer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphics/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { TypedBuffer } from "../typed-buffer/index.js";
2
+ export declare const toGPUBuffer: <T>(buffer: TypedBuffer<T>, device: GPUDevice, byteLength?: number, offset?: number) => Promise<GPUBuffer>;
@@ -0,0 +1,14 @@
1
+ import { copyToGPUBuffer } from "../typed-buffer/index.js";
2
+ export const toGPUBuffer = async (buffer, device, byteLength, offset) => {
3
+ const array = buffer.getTypedArray();
4
+ byteLength ??= array.byteLength;
5
+ offset ??= 0;
6
+ const gpuBuffer = device.createBuffer({
7
+ size: byteLength,
8
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
9
+ mappedAtCreation: true,
10
+ });
11
+ await copyToGPUBuffer(buffer, device, gpuBuffer, byteLength, offset);
12
+ return gpuBuffer;
13
+ };
14
+ //# sourceMappingURL=to-gpu-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/to-gpu-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,MAAsB,EACtB,MAAiB,EACjB,UAAmB,EACnB,MAAe,EACG,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,KAAK,CAAC,CAAC;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;QACvD,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export { topologicalSort, type Edge } from "./topological-sort.js";
@@ -0,0 +1,23 @@
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
+ export { topologicalSort } from "./topological-sort.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/array/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAEX,OAAO,EAAE,eAAe,EAAa,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Edge representing a dependency relationship from one node to another.
3
+ * [from, to] means "from" must come before "to" in the sorted order.
4
+ */
5
+ export type Edge<T = unknown> = readonly [from: T, to: T];
6
+ /**
7
+ * Performs topological sort on a directed acyclic graph.
8
+ *
9
+ * @param nodes - Array of node identifiers to sort
10
+ * @param edges - Array of dependency edges [from, to] where 'from' must come before 'to'
11
+ * @returns Array of nodes in topologically sorted order
12
+ * @throws Error if circular dependency is detected
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const nodes = ["a", "b", "c"];
17
+ * const edges: Edge<string>[] = [["a", "b"], ["b", "c"]]; // a → b → c
18
+ * const sorted = topologicalSort(nodes, edges); // ["a", "b", "c"]
19
+ *
20
+ * // Works with numbers too
21
+ * const numNodes = [1, 2, 3];
22
+ * const numEdges: Edge<number>[] = [[1, 2], [2, 3]];
23
+ * const numSorted = topologicalSort(numNodes, numEdges); // [1, 2, 3]
24
+ * ```
25
+ */
26
+ export declare const topologicalSort: <T>(nodes: readonly T[], edges: readonly Edge<T>[]) => T[];
@@ -0,0 +1,79 @@
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
+ /**
23
+ * Performs topological sort on a directed acyclic graph.
24
+ *
25
+ * @param nodes - Array of node identifiers to sort
26
+ * @param edges - Array of dependency edges [from, to] where 'from' must come before 'to'
27
+ * @returns Array of nodes in topologically sorted order
28
+ * @throws Error if circular dependency is detected
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const nodes = ["a", "b", "c"];
33
+ * const edges: Edge<string>[] = [["a", "b"], ["b", "c"]]; // a → b → c
34
+ * const sorted = topologicalSort(nodes, edges); // ["a", "b", "c"]
35
+ *
36
+ * // Works with numbers too
37
+ * const numNodes = [1, 2, 3];
38
+ * const numEdges: Edge<number>[] = [[1, 2], [2, 3]];
39
+ * const numSorted = topologicalSort(numNodes, numEdges); // [1, 2, 3]
40
+ * ```
41
+ */
42
+ export const topologicalSort = (nodes, edges) => {
43
+ const visited = new Set();
44
+ const visiting = new Set();
45
+ const sorted = [];
46
+ // Build adjacency list for efficient dependency lookup
47
+ const dependencies = new Map();
48
+ for (const [from, to] of edges) {
49
+ if (nodes.includes(from) && nodes.includes(to)) {
50
+ const deps = dependencies.get(to) ?? [];
51
+ deps.push(from);
52
+ dependencies.set(to, deps);
53
+ }
54
+ }
55
+ const visit = (node) => {
56
+ if (visiting.has(node)) {
57
+ throw new Error(`Circular dependency detected involving node: ${String(node)}`);
58
+ }
59
+ if (visited.has(node))
60
+ return;
61
+ visiting.add(node);
62
+ // Visit all dependencies first
63
+ const deps = dependencies.get(node) ?? [];
64
+ for (const dep of deps) {
65
+ if (nodes.includes(dep)) {
66
+ visit(dep);
67
+ }
68
+ }
69
+ visiting.delete(node);
70
+ visited.add(node);
71
+ sorted.push(node);
72
+ };
73
+ // Visit all nodes
74
+ for (const node of nodes) {
75
+ visit(node);
76
+ }
77
+ return sorted;
78
+ };
79
+ //# sourceMappingURL=topological-sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topological-sort.js","sourceRoot":"","sources":["../../../src/internal/array/topological-sort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAQX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,KAAmB,EAAE,KAAyB,EAAO,EAAE;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAK,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAK,CAAC;IAC9B,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAO,EAAQ,EAAE;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAE9B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnB,+BAA+B;QAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACL,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,kBAAkB;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};