@adobe/data 0.5.3 → 0.5.5
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.
- package/dist/ecs/database/create-database.d.ts +2 -2
- package/dist/ecs/database/database-schema/create-database-schema-test.d.ts +1 -0
- package/dist/ecs/database/database-schema/create-database-schema-test.js +42 -0
- package/dist/ecs/database/database-schema/create-database-schema-test.js.map +1 -0
- package/dist/ecs/database/database-schema/create-database-schema.d.ts +14 -0
- package/dist/ecs/database/database-schema/create-database-schema.js +32 -0
- package/dist/ecs/database/database-schema/create-database-schema.js.map +1 -0
- package/dist/ecs/database/database-schema/database-schema.d.ts +13 -0
- package/dist/ecs/database/database-schema/database-schema.js +23 -0
- package/dist/ecs/database/database-schema/database-schema.js.map +1 -0
- package/dist/ecs/database/database-schema/index.d.ts +2 -0
- package/dist/{services → ecs/database/database-schema}/index.js +2 -3
- package/dist/ecs/database/database-schema/index.js.map +1 -0
- package/dist/ecs/database/database.d.ts +3 -1
- package/dist/ecs/database/index.d.ts +1 -0
- package/dist/ecs/database/index.js +1 -0
- package/dist/ecs/database/index.js.map +1 -1
- package/dist/ecs/index.d.ts +2 -1
- package/dist/ecs/index.js +2 -1
- package/dist/ecs/index.js.map +1 -1
- package/dist/ecs/store/archetype-components.d.ts +3 -1
- package/dist/ecs/store/core/core.d.ts +1 -8
- package/dist/ecs/store/core/create-core.js +9 -4
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/create-core.test.js +0 -109
- package/dist/ecs/store/core/create-core.test.js.map +1 -1
- package/dist/ecs/store/create-store.js +21 -0
- package/dist/ecs/store/create-store.js.map +1 -1
- package/dist/ecs/store/store-schema/create-store-schema-test.js +4 -7
- package/dist/ecs/store/store-schema/create-store-schema-test.js.map +1 -1
- package/dist/ecs/store/store-schema/create-store-schema.d.ts +2 -0
- package/dist/ecs/store/store-schema/create-store-schema.js +5 -0
- package/dist/ecs/store/store-schema/create-store-schema.js.map +1 -1
- package/dist/ecs/store/store-schema/index.d.ts +1 -1
- package/dist/ecs/store/store-schema/index.js +1 -1
- package/dist/ecs/store/store-schema/index.js.map +1 -1
- package/dist/ecs/store/store-schema/store-schema.d.ts +1 -1
- package/dist/ecs/world/create-world.d.ts +7 -0
- package/dist/ecs/world/create-world.js +108 -0
- package/dist/ecs/world/create-world.js.map +1 -0
- package/dist/ecs/world/create-world.test.d.ts +1 -0
- package/dist/ecs/world/create-world.test.js +499 -0
- package/dist/ecs/world/create-world.test.js.map +1 -0
- package/dist/ecs/world/index.d.ts +4 -0
- package/dist/ecs/world/index.js +26 -0
- package/dist/ecs/world/index.js.map +1 -0
- package/dist/ecs/world/system.d.ts +20 -0
- package/dist/ecs/world/system.js +2 -0
- package/dist/ecs/world/system.js.map +1 -0
- package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +1 -0
- package/dist/ecs/world/world-schema/create-world-schema-test.js +55 -0
- package/dist/ecs/world/world-schema/create-world-schema-test.js.map +1 -0
- package/dist/ecs/world/world-schema/create-world-schema.d.ts +19 -0
- package/dist/ecs/world/world-schema/create-world-schema.js +33 -0
- package/dist/ecs/world/world-schema/create-world-schema.js.map +1 -0
- package/dist/ecs/world/world-schema/index.d.ts +2 -0
- package/dist/ecs/world/world-schema/index.js +24 -0
- package/dist/ecs/world/world-schema/index.js.map +1 -0
- package/dist/ecs/world/world-schema/world-schema.d.ts +18 -0
- package/dist/ecs/world/world-schema/world-schema.js +23 -0
- package/dist/ecs/world/world-schema/world-schema.js.map +1 -0
- package/dist/ecs/world/world.d.ts +9 -0
- package/dist/ecs/world/world.js +2 -0
- package/dist/ecs/world/world.js.map +1 -0
- package/dist/functions/serialization/serialization.test.js +78 -0
- package/dist/functions/serialization/serialization.test.js.map +1 -1
- package/dist/graphics/camera/camera.d.ts +62 -0
- package/dist/graphics/camera/camera.js +17 -0
- package/dist/graphics/camera/camera.js.map +1 -0
- package/dist/graphics/camera/index.d.ts +4 -0
- package/dist/graphics/camera/index.js +5 -0
- package/dist/graphics/camera/index.js.map +1 -0
- package/dist/graphics/camera/screen-to-world-ray.d.ts +12 -0
- package/dist/graphics/camera/screen-to-world-ray.js +49 -0
- package/dist/graphics/camera/screen-to-world-ray.js.map +1 -0
- package/dist/graphics/camera/screen-to-world-ray.test.d.ts +1 -0
- package/dist/graphics/camera/screen-to-world-ray.test.js +171 -0
- package/dist/graphics/camera/screen-to-world-ray.test.js.map +1 -0
- package/dist/graphics/camera/to-view-projection.d.ts +3 -0
- package/dist/graphics/camera/to-view-projection.js +8 -0
- package/dist/graphics/camera/to-view-projection.js.map +1 -0
- package/dist/graphics/camera/world-to-screen.d.ts +12 -0
- package/dist/graphics/camera/world-to-screen.js +38 -0
- package/dist/graphics/camera/world-to-screen.js.map +1 -0
- package/dist/graphics/camera/world-to-screen.test.d.ts +1 -0
- package/dist/graphics/camera/world-to-screen.test.js +124 -0
- package/dist/graphics/camera/world-to-screen.test.js.map +1 -0
- package/dist/graphics/create-struct-gpu-buffer.d.ts +7 -0
- package/dist/graphics/create-struct-gpu-buffer.js +17 -0
- package/dist/graphics/create-struct-gpu-buffer.js.map +1 -0
- package/dist/graphics/extract-wgsl-bindings.d.ts +5 -0
- package/dist/graphics/extract-wgsl-bindings.js +10 -0
- package/dist/graphics/extract-wgsl-bindings.js.map +1 -0
- package/dist/graphics/frame.d.ts +22 -0
- package/dist/graphics/frame.js +12 -0
- package/dist/graphics/frame.js.map +1 -0
- package/dist/graphics/get-web-gpu-device-and-context.d.ts +2 -0
- package/dist/graphics/get-web-gpu-device-and-context.js +21 -0
- package/dist/graphics/get-web-gpu-device-and-context.js.map +1 -0
- package/dist/graphics/graphics-context.d.ts +5 -0
- package/dist/graphics/graphics-context.js +2 -0
- package/dist/graphics/graphics-context.js.map +1 -0
- package/dist/graphics/index.d.ts +5 -0
- package/dist/graphics/index.js +5 -0
- package/dist/graphics/index.js.map +1 -0
- package/dist/graphics/to-gpu-buffer.d.ts +2 -0
- package/dist/graphics/to-gpu-buffer.js +14 -0
- package/dist/graphics/to-gpu-buffer.js.map +1 -0
- package/dist/internal/array/index.d.ts +1 -0
- package/dist/internal/array/index.js +23 -0
- package/dist/internal/array/index.js.map +1 -0
- package/dist/internal/array/topological-sort.d.ts +26 -0
- package/dist/internal/array/topological-sort.js +79 -0
- package/dist/internal/array/topological-sort.js.map +1 -0
- package/dist/internal/array/topological-sort.test.d.ts +1 -0
- package/dist/internal/array/topological-sort.test.js +100 -0
- package/dist/internal/array/topological-sort.test.js.map +1 -0
- package/dist/internal/function/debounce.d.ts +70 -0
- package/dist/internal/function/debounce.js +155 -0
- package/dist/internal/function/debounce.js.map +1 -0
- package/dist/internal/function/debounce.test.d.ts +1 -0
- package/dist/internal/function/debounce.test.js +306 -0
- package/dist/internal/function/debounce.test.js.map +1 -0
- package/dist/lit/elements/application-element.d.ts +9 -0
- package/dist/lit/elements/application-element.js +62 -0
- package/dist/lit/elements/application-element.js.map +1 -0
- package/dist/lit/elements/application-host.d.ts +16 -0
- package/dist/lit/elements/application-host.js +59 -0
- package/dist/lit/elements/application-host.js.map +1 -0
- package/dist/lit/elements/index.d.ts +2 -0
- package/dist/lit/elements/index.js +2 -0
- package/dist/lit/elements/index.js.map +1 -1
- package/dist/lit/elements/service-application.js +4 -1
- package/dist/lit/elements/service-application.js.map +1 -1
- package/dist/lit/functions/index.d.ts +1 -0
- package/dist/lit/functions/index.js +23 -0
- package/dist/lit/functions/index.js.map +1 -0
- package/dist/lit/functions/iterate-self-and-ancestors.d.ts +1 -0
- package/dist/lit/functions/iterate-self-and-ancestors.js +44 -0
- package/dist/lit/functions/iterate-self-and-ancestors.js.map +1 -0
- package/dist/lit/hooks/attach-decorator.d.ts +4 -0
- package/dist/lit/hooks/attach-decorator.js +46 -0
- package/dist/lit/hooks/attach-decorator.js.map +1 -0
- package/dist/lit/hooks/index.d.ts +4 -0
- package/dist/lit/hooks/index.js +4 -0
- package/dist/lit/hooks/index.js.map +1 -1
- package/dist/lit/hooks/use-drag-observe.d.ts +22 -0
- package/dist/lit/hooks/use-drag-observe.js +55 -0
- package/dist/lit/hooks/use-drag-observe.js.map +1 -0
- package/dist/lit/hooks/use-drag-transaction.d.ts +7 -0
- package/dist/lit/hooks/use-drag-transaction.js +56 -0
- package/dist/lit/hooks/use-drag-transaction.js.map +1 -0
- package/dist/lit/hooks/use-draggable.d.ts +16 -0
- package/dist/lit/hooks/use-draggable.js +122 -0
- package/dist/lit/hooks/use-draggable.js.map +1 -0
- package/dist/math/aabb/aabb.d.ts +48 -0
- package/dist/math/aabb/aabb.js +86 -0
- package/dist/math/aabb/aabb.js.map +1 -0
- package/dist/math/aabb/line-intersection.test.d.ts +1 -0
- package/dist/math/aabb/line-intersection.test.js +210 -0
- package/dist/math/aabb/line-intersection.test.js.map +1 -0
- package/dist/math/constants.d.ts +4 -0
- package/dist/math/constants.js +26 -0
- package/dist/math/constants.js.map +1 -0
- package/dist/math/index.d.ts +18 -0
- package/dist/math/index.js +40 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/line2/intersects.test.d.ts +1 -0
- package/dist/math/line2/intersects.test.js +104 -0
- package/dist/math/line2/intersects.test.js.map +1 -0
- package/dist/math/line2/line2.d.ts +42 -0
- package/dist/math/line2/line2.js +78 -0
- package/dist/math/line2/line2.js.map +1 -0
- package/dist/math/line3/closest-point-on-line.test.d.ts +1 -0
- package/dist/math/line3/closest-point-on-line.test.js +107 -0
- package/dist/math/line3/closest-point-on-line.test.js.map +1 -0
- package/dist/math/line3/interpolate.test.d.ts +1 -0
- package/dist/math/line3/interpolate.test.js +66 -0
- package/dist/math/line3/interpolate.test.js.map +1 -0
- package/dist/math/line3/line3.d.ts +49 -0
- package/dist/math/line3/line3.js +77 -0
- package/dist/math/line3/line3.js.map +1 -0
- package/dist/math/line3/sub-line.test.d.ts +1 -0
- package/dist/math/line3/sub-line.test.js +70 -0
- package/dist/math/line3/sub-line.test.js.map +1 -0
- package/dist/math/mat4x4/mat4x4.d.ts +37 -0
- package/dist/math/mat4x4/mat4x4.js +246 -0
- package/dist/math/mat4x4/mat4x4.js.map +1 -0
- package/dist/math/picking/index.d.ts +1 -0
- package/dist/math/picking/index.js +23 -0
- package/dist/math/picking/index.js.map +1 -0
- package/dist/math/picking/pick-from-tables.d.ts +18 -0
- package/dist/math/picking/pick-from-tables.js +154 -0
- package/dist/math/picking/pick-from-tables.js.map +1 -0
- package/dist/math/picking/pick-result.d.ts +7 -0
- package/dist/{services/service.js → math/picking/pick-result.js} +1 -1
- package/dist/math/picking/pick-result.js.map +1 -0
- package/dist/math/quat/quat.d.ts +42 -0
- package/dist/math/quat/quat.js +220 -0
- package/dist/math/quat/quat.js.map +1 -0
- package/dist/math/vec2/vec2.d.ts +63 -0
- package/dist/math/vec2/vec2.js +114 -0
- package/dist/math/vec2/vec2.js.map +1 -0
- package/dist/math/vec3/vec3.d.ts +65 -0
- package/dist/math/vec3/vec3.js +154 -0
- package/dist/math/vec3/vec3.js.map +1 -0
- package/dist/math/vec4/vec4.d.ts +63 -0
- package/dist/math/vec4/vec4.js +154 -0
- package/dist/math/vec4/vec4.js.map +1 -0
- package/dist/observe/to-async-generator.js +4 -0
- package/dist/observe/to-async-generator.js.map +1 -1
- package/dist/observe/with-filter.d.ts +1 -1
- package/dist/observe/with-filter.js.map +1 -1
- package/dist/samples/index.d.ts +13 -0
- package/dist/samples/index.js +27 -0
- package/dist/samples/index.js.map +1 -0
- package/dist/samples/todo/elements/todo-list/todo-list-presentation.d.ts +25 -0
- package/dist/samples/todo/elements/todo-list/todo-list-presentation.js +12 -0
- package/dist/samples/todo/elements/todo-list/todo-list-presentation.js.map +1 -0
- package/dist/samples/todo/elements/todo-list/todo-list.css.d.ts +18 -0
- package/dist/samples/todo/elements/todo-list/todo-list.css.js +27 -0
- package/dist/samples/todo/elements/todo-list/todo-list.css.js.map +1 -0
- package/dist/samples/todo/elements/todo-list/todo-list.d.ts +12 -0
- package/dist/samples/todo/elements/todo-list/todo-list.js +60 -0
- package/dist/samples/todo/elements/todo-list/todo-list.js.map +1 -0
- package/dist/samples/todo/elements/todo-row/index.d.ts +18 -0
- package/dist/samples/todo/elements/todo-row/index.js +19 -0
- package/dist/samples/todo/elements/todo-row/index.js.map +1 -0
- package/dist/samples/todo/elements/todo-row/todo-row-presentation.d.ts +18 -0
- package/dist/samples/todo/elements/todo-row/todo-row-presentation.js +66 -0
- package/dist/samples/todo/elements/todo-row/todo-row-presentation.js.map +1 -0
- package/dist/samples/todo/elements/todo-row/todo-row.css.d.ts +1 -0
- package/dist/samples/todo/elements/todo-row/todo-row.css.js +65 -0
- package/dist/samples/todo/elements/todo-row/todo-row.css.js.map +1 -0
- package/dist/samples/todo/elements/todo-row/todo-row.d.ts +14 -0
- package/dist/samples/todo/elements/todo-row/todo-row.js +60 -0
- package/dist/samples/todo/elements/todo-row/todo-row.js.map +1 -0
- package/dist/samples/todo/elements/todo-toolbar/index.d.ts +18 -0
- package/dist/samples/todo/elements/todo-toolbar/index.js +19 -0
- package/dist/samples/todo/elements/todo-toolbar/index.js.map +1 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.d.ts +22 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js +57 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar-presentation.js.map +1 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.d.ts +1 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.js +50 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.css.js.map +1 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.d.ts +11 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js +77 -0
- package/dist/samples/todo/elements/todo-toolbar/todo-toolbar.js.map +1 -0
- package/dist/samples/todo/elements/todo-undo-redo/index.d.ts +18 -0
- package/dist/samples/todo/elements/todo-undo-redo/index.js +19 -0
- package/dist/samples/todo/elements/todo-undo-redo/index.js.map +1 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.d.ts +17 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js +45 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo-presentation.js.map +1 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.d.ts +1 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js +28 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.css.js.map +1 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.d.ts +11 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.js +52 -0
- package/dist/samples/todo/elements/todo-undo-redo/todo-undo-redo.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.d.ts +6 -0
- package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.js +21 -0
- package/dist/samples/todo/services/dependent-state-service/create-dependent-state-service.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.d.ts +19 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.js +2 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/all-todos.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.d.ts +19 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.js +2 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/complete-todos.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.d.ts +19 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.js +2 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/incomplete-todos.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/index.d.ts +20 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/index.js +21 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state/index.js.map +1 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state-service.d.ts +19 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state-service.js +2 -0
- package/dist/samples/todo/services/dependent-state-service/dependent-state-service.js.map +1 -0
- package/dist/samples/todo/services/main-service/create-main-service.d.ts +25 -0
- package/dist/samples/todo/services/main-service/create-main-service.js +39 -0
- package/dist/samples/todo/services/main-service/create-main-service.js.map +1 -0
- package/dist/samples/todo/services/main-service/todo-main-service.d.ts +35 -0
- package/dist/samples/todo/services/main-service/todo-main-service.js +2 -0
- package/dist/samples/todo/services/main-service/todo-main-service.js.map +1 -0
- package/dist/samples/todo/services/state-service/create-todo-database.d.ts +13 -0
- package/dist/samples/todo/services/state-service/create-todo-database.js +26 -0
- package/dist/samples/todo/services/state-service/create-todo-database.js.map +1 -0
- package/dist/samples/todo/services/state-service/create-todo-store.d.ts +13 -0
- package/dist/samples/todo/services/state-service/create-todo-store.js +41 -0
- package/dist/samples/todo/services/state-service/create-todo-store.js.map +1 -0
- package/dist/samples/todo/services/state-service/todo-state-service.d.ts +22 -0
- package/dist/samples/todo/services/state-service/todo-state-service.js +2 -0
- package/dist/samples/todo/services/state-service/todo-state-service.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.d.ts +2 -0
- package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.js +26 -0
- package/dist/samples/todo/services/state-service/transactions/create-bulk-todos.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.d.ts +22 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.js +13 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.test.d.ts +1 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.test.js +32 -0
- package/dist/samples/todo/services/state-service/transactions/create-todo.test.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/delete-all-todos.d.ts +19 -0
- package/dist/samples/todo/services/state-service/transactions/delete-all-todos.js +16 -0
- package/dist/samples/todo/services/state-service/transactions/delete-all-todos.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.d.ts +3 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.js +24 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.test.d.ts +1 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.test.js +40 -0
- package/dist/samples/todo/services/state-service/transactions/delete-todo.test.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/drag-todo.d.ts +7 -0
- package/dist/samples/todo/services/state-service/transactions/drag-todo.js +33 -0
- package/dist/samples/todo/services/state-service/transactions/drag-todo.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/index.d.ts +23 -0
- package/dist/samples/todo/services/state-service/transactions/index.js +25 -0
- package/dist/samples/todo/services/state-service/transactions/index.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/reorder-todos.d.ts +23 -0
- package/dist/samples/todo/services/state-service/transactions/reorder-todos.js +11 -0
- package/dist/samples/todo/services/state-service/transactions/reorder-todos.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.d.ts +20 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.js +11 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.js.map +1 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.d.ts +1 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.js +81 -0
- package/dist/samples/todo/services/state-service/transactions/toggle-complete.test.js.map +1 -0
- package/dist/samples/todo/todo-element.d.ts +21 -0
- package/dist/samples/todo/todo-element.js +4 -0
- package/dist/samples/todo/todo-element.js.map +1 -0
- package/dist/samples/todo/todo-host.d.ts +8 -0
- package/dist/samples/todo/todo-host.js +55 -0
- package/dist/samples/todo/todo-host.js.map +1 -0
- package/dist/samples/todo/todo-main-element.d.ts +27 -0
- package/dist/samples/todo/todo-main-element.js +63 -0
- package/dist/samples/todo/todo-main-element.js.map +1 -0
- package/dist/samples/todo/todo-sample.d.ts +3 -0
- package/dist/samples/todo/todo-sample.js +39 -0
- package/dist/samples/todo/todo-sample.js.map +1 -0
- package/dist/schema/schema.d.ts +7 -6
- package/dist/schema/schema.js.map +1 -1
- package/dist/service/disposable.d.ts +4 -0
- package/dist/{services/is-service.js → service/disposable.js} +3 -3
- package/dist/service/disposable.js.map +1 -0
- package/dist/service/progressive-result.d.ts +7 -10
- package/dist/service/progressive-result.js +0 -6
- package/dist/service/progressive-result.js.map +1 -1
- package/dist/service/service.d.ts +11 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/typed-buffer/register-typed-buffer-codecs.js +39 -22
- package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
- package/dist/typed-buffer/structs/get-struct-layout.js +3 -0
- package/dist/typed-buffer/structs/get-struct-layout.js.map +1 -1
- package/package.json +20 -3
- package/dist/services/add-observable-actions.d.ts +0 -29
- package/dist/services/add-observable-actions.js +0 -108
- package/dist/services/add-observable-actions.js.map +0 -1
- package/dist/services/index.d.ts +0 -4
- package/dist/services/index.js.map +0 -1
- package/dist/services/is-service.d.ts +0 -2
- package/dist/services/is-service.js.map +0 -1
- package/dist/services/progressive-result.d.ts +0 -96
- package/dist/services/progressive-result.js +0 -99
- package/dist/services/progressive-result.js.map +0 -1
- package/dist/services/service.d.ts +0 -4
- package/dist/services/service.js.map +0 -1
|
@@ -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":"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"}
|
|
@@ -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,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,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 @@
|
|
|
1
|
+
{"version":3,"file":"graphics-context.js","sourceRoot":"","sources":["../../src/graphics/graphics-context.ts"],"names":[],"mappings":""}
|
|
@@ -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,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 {};
|