@asciiz/atoolkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/LICENSE +21 -0
  2. package/ReadMe.md +198 -0
  3. package/dist/acircuit/chip.d.ts +46 -0
  4. package/dist/acircuit/chip.d.ts.map +1 -0
  5. package/dist/acircuit/chip.js +104 -0
  6. package/dist/acircuit/chip.js.map +1 -0
  7. package/dist/acircuit/circuit.d.ts +86 -0
  8. package/dist/acircuit/circuit.d.ts.map +1 -0
  9. package/dist/acircuit/circuit.js +606 -0
  10. package/dist/acircuit/circuit.js.map +1 -0
  11. package/dist/acircuit/composite.d.ts +32 -0
  12. package/dist/acircuit/composite.d.ts.map +1 -0
  13. package/dist/acircuit/composite.js +88 -0
  14. package/dist/acircuit/composite.js.map +1 -0
  15. package/dist/acircuit/index.d.ts +7 -0
  16. package/dist/acircuit/index.d.ts.map +1 -0
  17. package/dist/acircuit/index.js +6 -0
  18. package/dist/acircuit/index.js.map +1 -0
  19. package/dist/acircuit/socket.d.ts +20 -0
  20. package/dist/acircuit/socket.d.ts.map +1 -0
  21. package/dist/acircuit/socket.js +23 -0
  22. package/dist/acircuit/socket.js.map +1 -0
  23. package/dist/acircuit/types.d.ts +94 -0
  24. package/dist/acircuit/types.d.ts.map +1 -0
  25. package/dist/acircuit/types.js +2 -0
  26. package/dist/acircuit/types.js.map +1 -0
  27. package/dist/acircuit/wire.d.ts +26 -0
  28. package/dist/acircuit/wire.d.ts.map +1 -0
  29. package/dist/acircuit/wire.js +23 -0
  30. package/dist/acircuit/wire.js.map +1 -0
  31. package/dist/adiag/bus.d.ts +65 -0
  32. package/dist/adiag/bus.d.ts.map +1 -0
  33. package/dist/adiag/bus.js +225 -0
  34. package/dist/adiag/bus.js.map +1 -0
  35. package/dist/adiag/index.d.ts +3 -0
  36. package/dist/adiag/index.d.ts.map +1 -0
  37. package/dist/adiag/index.js +2 -0
  38. package/dist/adiag/index.js.map +1 -0
  39. package/dist/aecs/ComponentSet.d.ts +33 -0
  40. package/dist/aecs/ComponentSet.d.ts.map +1 -0
  41. package/dist/aecs/ComponentSet.js +127 -0
  42. package/dist/aecs/ComponentSet.js.map +1 -0
  43. package/dist/aecs/Entity.d.ts +43 -0
  44. package/dist/aecs/Entity.d.ts.map +1 -0
  45. package/dist/aecs/Entity.js +82 -0
  46. package/dist/aecs/Entity.js.map +1 -0
  47. package/dist/aecs/FloatSet.d.ts +34 -0
  48. package/dist/aecs/FloatSet.d.ts.map +1 -0
  49. package/dist/aecs/FloatSet.js +147 -0
  50. package/dist/aecs/FloatSet.js.map +1 -0
  51. package/dist/aecs/Query.d.ts +90 -0
  52. package/dist/aecs/Query.d.ts.map +1 -0
  53. package/dist/aecs/Query.js +304 -0
  54. package/dist/aecs/Query.js.map +1 -0
  55. package/dist/aecs/index.d.ts +6 -0
  56. package/dist/aecs/index.d.ts.map +1 -0
  57. package/dist/aecs/index.js +6 -0
  58. package/dist/aecs/index.js.map +1 -0
  59. package/dist/aecs/join.d.ts +2 -0
  60. package/dist/aecs/join.d.ts.map +1 -0
  61. package/dist/aecs/join.js +2 -0
  62. package/dist/aecs/join.js.map +1 -0
  63. package/dist/alm/constants.d.ts +11 -0
  64. package/dist/alm/constants.d.ts.map +1 -0
  65. package/dist/alm/constants.js +17 -0
  66. package/dist/alm/constants.js.map +1 -0
  67. package/dist/alm/index.d.ts +9 -0
  68. package/dist/alm/index.d.ts.map +1 -0
  69. package/dist/alm/index.js +12 -0
  70. package/dist/alm/index.js.map +1 -0
  71. package/dist/alm/mat3.d.ts +63 -0
  72. package/dist/alm/mat3.d.ts.map +1 -0
  73. package/dist/alm/mat3.js +393 -0
  74. package/dist/alm/mat3.js.map +1 -0
  75. package/dist/alm/mat4.d.ts +157 -0
  76. package/dist/alm/mat4.d.ts.map +1 -0
  77. package/dist/alm/mat4.js +1448 -0
  78. package/dist/alm/mat4.js.map +1 -0
  79. package/dist/alm/quat.d.ts +89 -0
  80. package/dist/alm/quat.d.ts.map +1 -0
  81. package/dist/alm/quat.js +543 -0
  82. package/dist/alm/quat.js.map +1 -0
  83. package/dist/alm/spatial.d.ts +102 -0
  84. package/dist/alm/spatial.d.ts.map +1 -0
  85. package/dist/alm/spatial.js +389 -0
  86. package/dist/alm/spatial.js.map +1 -0
  87. package/dist/alm/vec2.d.ts +97 -0
  88. package/dist/alm/vec2.d.ts.map +1 -0
  89. package/dist/alm/vec2.js +369 -0
  90. package/dist/alm/vec2.js.map +1 -0
  91. package/dist/alm/vec3.d.ts +117 -0
  92. package/dist/alm/vec3.d.ts.map +1 -0
  93. package/dist/alm/vec3.js +547 -0
  94. package/dist/alm/vec3.js.map +1 -0
  95. package/dist/alm/vec4.d.ts +95 -0
  96. package/dist/alm/vec4.d.ts.map +1 -0
  97. package/dist/alm/vec4.js +452 -0
  98. package/dist/alm/vec4.js.map +1 -0
  99. package/dist/atempo/cadence.d.ts +58 -0
  100. package/dist/atempo/cadence.d.ts.map +1 -0
  101. package/dist/atempo/cadence.js +110 -0
  102. package/dist/atempo/cadence.js.map +1 -0
  103. package/dist/atempo/clip.d.ts +37 -0
  104. package/dist/atempo/clip.d.ts.map +1 -0
  105. package/dist/atempo/clip.js +92 -0
  106. package/dist/atempo/clip.js.map +1 -0
  107. package/dist/atempo/curve.d.ts +6 -0
  108. package/dist/atempo/curve.d.ts.map +1 -0
  109. package/dist/atempo/curve.js +2 -0
  110. package/dist/atempo/curve.js.map +1 -0
  111. package/dist/atempo/curves/bezier.d.ts +7 -0
  112. package/dist/atempo/curves/bezier.d.ts.map +1 -0
  113. package/dist/atempo/curves/bezier.js +46 -0
  114. package/dist/atempo/curves/bezier.js.map +1 -0
  115. package/dist/atempo/curves/bounce.d.ts +6 -0
  116. package/dist/atempo/curves/bounce.d.ts.map +1 -0
  117. package/dist/atempo/curves/bounce.js +22 -0
  118. package/dist/atempo/curves/bounce.js.map +1 -0
  119. package/dist/atempo/curves/cubic.d.ts +14 -0
  120. package/dist/atempo/curves/cubic.d.ts.map +1 -0
  121. package/dist/atempo/curves/cubic.js +22 -0
  122. package/dist/atempo/curves/cubic.js.map +1 -0
  123. package/dist/atempo/curves/elastic.d.ts +6 -0
  124. package/dist/atempo/curves/elastic.d.ts.map +1 -0
  125. package/dist/atempo/curves/elastic.js +12 -0
  126. package/dist/atempo/curves/elastic.js.map +1 -0
  127. package/dist/atempo/curves/expo.d.ts +14 -0
  128. package/dist/atempo/curves/expo.d.ts.map +1 -0
  129. package/dist/atempo/curves/expo.js +26 -0
  130. package/dist/atempo/curves/expo.js.map +1 -0
  131. package/dist/atempo/curves/holdSnap.d.ts +6 -0
  132. package/dist/atempo/curves/holdSnap.d.ts.map +1 -0
  133. package/dist/atempo/curves/holdSnap.js +15 -0
  134. package/dist/atempo/curves/holdSnap.js.map +1 -0
  135. package/dist/atempo/curves/index.d.ts +14 -0
  136. package/dist/atempo/curves/index.d.ts.map +1 -0
  137. package/dist/atempo/curves/index.js +14 -0
  138. package/dist/atempo/curves/index.js.map +1 -0
  139. package/dist/atempo/curves/linear.d.ts +6 -0
  140. package/dist/atempo/curves/linear.d.ts.map +1 -0
  141. package/dist/atempo/curves/linear.js +5 -0
  142. package/dist/atempo/curves/linear.js.map +1 -0
  143. package/dist/atempo/curves/overshoot.d.ts +6 -0
  144. package/dist/atempo/curves/overshoot.d.ts.map +1 -0
  145. package/dist/atempo/curves/overshoot.js +16 -0
  146. package/dist/atempo/curves/overshoot.js.map +1 -0
  147. package/dist/atempo/curves/quad.d.ts +14 -0
  148. package/dist/atempo/curves/quad.d.ts.map +1 -0
  149. package/dist/atempo/curves/quad.js +22 -0
  150. package/dist/atempo/curves/quad.js.map +1 -0
  151. package/dist/atempo/curves/step.d.ts +6 -0
  152. package/dist/atempo/curves/step.d.ts.map +1 -0
  153. package/dist/atempo/curves/step.js +11 -0
  154. package/dist/atempo/curves/step.js.map +1 -0
  155. package/dist/atempo/index.d.ts +17 -0
  156. package/dist/atempo/index.d.ts.map +1 -0
  157. package/dist/atempo/index.js +18 -0
  158. package/dist/atempo/index.js.map +1 -0
  159. package/dist/atempo/phase.d.ts +66 -0
  160. package/dist/atempo/phase.d.ts.map +1 -0
  161. package/dist/atempo/phase.js +121 -0
  162. package/dist/atempo/phase.js.map +1 -0
  163. package/dist/atempo/spring.d.ts +20 -0
  164. package/dist/atempo/spring.d.ts.map +1 -0
  165. package/dist/atempo/spring.js +71 -0
  166. package/dist/atempo/spring.js.map +1 -0
  167. package/dist/atempo/track.d.ts +69 -0
  168. package/dist/atempo/track.d.ts.map +1 -0
  169. package/dist/atempo/track.js +184 -0
  170. package/dist/atempo/track.js.map +1 -0
  171. package/dist/atempo/tracks/color.d.ts +20 -0
  172. package/dist/atempo/tracks/color.d.ts.map +1 -0
  173. package/dist/atempo/tracks/color.js +52 -0
  174. package/dist/atempo/tracks/color.js.map +1 -0
  175. package/dist/atempo/tracks/float.d.ts +9 -0
  176. package/dist/atempo/tracks/float.d.ts.map +1 -0
  177. package/dist/atempo/tracks/float.js +13 -0
  178. package/dist/atempo/tracks/float.js.map +1 -0
  179. package/dist/atempo/tracks/index.d.ts +8 -0
  180. package/dist/atempo/tracks/index.d.ts.map +1 -0
  181. package/dist/atempo/tracks/index.js +8 -0
  182. package/dist/atempo/tracks/index.js.map +1 -0
  183. package/dist/atempo/tracks/quat.d.ts +16 -0
  184. package/dist/atempo/tracks/quat.d.ts.map +1 -0
  185. package/dist/atempo/tracks/quat.js +72 -0
  186. package/dist/atempo/tracks/quat.js.map +1 -0
  187. package/dist/atempo/tracks/vec.d.ts +11 -0
  188. package/dist/atempo/tracks/vec.d.ts.map +1 -0
  189. package/dist/atempo/tracks/vec.js +27 -0
  190. package/dist/atempo/tracks/vec.js.map +1 -0
  191. package/dist/awasm/abi/index.d.ts +4 -0
  192. package/dist/awasm/abi/index.d.ts.map +1 -0
  193. package/dist/awasm/abi/index.js +4 -0
  194. package/dist/awasm/abi/index.js.map +1 -0
  195. package/dist/awasm/abi/layout.d.ts +40 -0
  196. package/dist/awasm/abi/layout.d.ts.map +1 -0
  197. package/dist/awasm/abi/layout.js +100 -0
  198. package/dist/awasm/abi/layout.js.map +1 -0
  199. package/dist/awasm/abi/slice.d.ts +28 -0
  200. package/dist/awasm/abi/slice.d.ts.map +1 -0
  201. package/dist/awasm/abi/slice.js +68 -0
  202. package/dist/awasm/abi/slice.js.map +1 -0
  203. package/dist/awasm/abi/string-buffer.d.ts +23 -0
  204. package/dist/awasm/abi/string-buffer.d.ts.map +1 -0
  205. package/dist/awasm/abi/string-buffer.js +52 -0
  206. package/dist/awasm/abi/string-buffer.js.map +1 -0
  207. package/dist/awasm/index.d.ts +5 -0
  208. package/dist/awasm/index.d.ts.map +1 -0
  209. package/dist/awasm/index.js +8 -0
  210. package/dist/awasm/index.js.map +1 -0
  211. package/dist/awasm/memory/block-pool.d.ts +31 -0
  212. package/dist/awasm/memory/block-pool.d.ts.map +1 -0
  213. package/dist/awasm/memory/block-pool.js +98 -0
  214. package/dist/awasm/memory/block-pool.js.map +1 -0
  215. package/dist/awasm/memory/index.d.ts +5 -0
  216. package/dist/awasm/memory/index.d.ts.map +1 -0
  217. package/dist/awasm/memory/index.js +5 -0
  218. package/dist/awasm/memory/index.js.map +1 -0
  219. package/dist/awasm/memory/linear-arena.d.ts +36 -0
  220. package/dist/awasm/memory/linear-arena.d.ts.map +1 -0
  221. package/dist/awasm/memory/linear-arena.js +94 -0
  222. package/dist/awasm/memory/linear-arena.js.map +1 -0
  223. package/dist/awasm/memory/memory-view.d.ts +51 -0
  224. package/dist/awasm/memory/memory-view.d.ts.map +1 -0
  225. package/dist/awasm/memory/memory-view.js +110 -0
  226. package/dist/awasm/memory/memory-view.js.map +1 -0
  227. package/dist/awasm/memory/wasm-memory.d.ts +40 -0
  228. package/dist/awasm/memory/wasm-memory.d.ts.map +1 -0
  229. package/dist/awasm/memory/wasm-memory.js +88 -0
  230. package/dist/awasm/memory/wasm-memory.js.map +1 -0
  231. package/dist/awasm/runtime/host-bridge.d.ts +30 -0
  232. package/dist/awasm/runtime/host-bridge.d.ts.map +1 -0
  233. package/dist/awasm/runtime/host-bridge.js +57 -0
  234. package/dist/awasm/runtime/host-bridge.js.map +1 -0
  235. package/dist/awasm/runtime/index.d.ts +5 -0
  236. package/dist/awasm/runtime/index.d.ts.map +1 -0
  237. package/dist/awasm/runtime/index.js +5 -0
  238. package/dist/awasm/runtime/index.js.map +1 -0
  239. package/dist/awasm/runtime/module-inspector.d.ts +32 -0
  240. package/dist/awasm/runtime/module-inspector.d.ts.map +1 -0
  241. package/dist/awasm/runtime/module-inspector.js +43 -0
  242. package/dist/awasm/runtime/module-inspector.js.map +1 -0
  243. package/dist/awasm/runtime/module-loader.d.ts +17 -0
  244. package/dist/awasm/runtime/module-loader.d.ts.map +1 -0
  245. package/dist/awasm/runtime/module-loader.js +99 -0
  246. package/dist/awasm/runtime/module-loader.js.map +1 -0
  247. package/dist/awasm/runtime/wasm-instance.d.ts +25 -0
  248. package/dist/awasm/runtime/wasm-instance.d.ts.map +1 -0
  249. package/dist/awasm/runtime/wasm-instance.js +60 -0
  250. package/dist/awasm/runtime/wasm-instance.js.map +1 -0
  251. package/dist/awasm/thread/atomic-queue.d.ts +33 -0
  252. package/dist/awasm/thread/atomic-queue.d.ts.map +1 -0
  253. package/dist/awasm/thread/atomic-queue.js +78 -0
  254. package/dist/awasm/thread/atomic-queue.js.map +1 -0
  255. package/dist/awasm/thread/index.d.ts +4 -0
  256. package/dist/awasm/thread/index.d.ts.map +1 -0
  257. package/dist/awasm/thread/index.js +4 -0
  258. package/dist/awasm/thread/index.js.map +1 -0
  259. package/dist/awasm/thread/shared-memory.d.ts +38 -0
  260. package/dist/awasm/thread/shared-memory.d.ts.map +1 -0
  261. package/dist/awasm/thread/shared-memory.js +74 -0
  262. package/dist/awasm/thread/shared-memory.js.map +1 -0
  263. package/dist/awasm/thread/worker-pool.d.ts +43 -0
  264. package/dist/awasm/thread/worker-pool.d.ts.map +1 -0
  265. package/dist/awasm/thread/worker-pool.js +118 -0
  266. package/dist/awasm/thread/worker-pool.js.map +1 -0
  267. package/dist/awgpu/binding.d.ts +108 -0
  268. package/dist/awgpu/binding.d.ts.map +1 -0
  269. package/dist/awgpu/binding.js +251 -0
  270. package/dist/awgpu/binding.js.map +1 -0
  271. package/dist/awgpu/device.d.ts +68 -0
  272. package/dist/awgpu/device.d.ts.map +1 -0
  273. package/dist/awgpu/device.js +150 -0
  274. package/dist/awgpu/device.js.map +1 -0
  275. package/dist/awgpu/graph.d.ts +77 -0
  276. package/dist/awgpu/graph.d.ts.map +1 -0
  277. package/dist/awgpu/graph.js +288 -0
  278. package/dist/awgpu/graph.js.map +1 -0
  279. package/dist/awgpu/index.d.ts +10 -0
  280. package/dist/awgpu/index.d.ts.map +1 -0
  281. package/dist/awgpu/index.js +19 -0
  282. package/dist/awgpu/index.js.map +1 -0
  283. package/dist/awgpu/memory.d.ts +231 -0
  284. package/dist/awgpu/memory.d.ts.map +1 -0
  285. package/dist/awgpu/memory.js +547 -0
  286. package/dist/awgpu/memory.js.map +1 -0
  287. package/dist/awgpu/pipeline.d.ts +114 -0
  288. package/dist/awgpu/pipeline.d.ts.map +1 -0
  289. package/dist/awgpu/pipeline.js +335 -0
  290. package/dist/awgpu/pipeline.js.map +1 -0
  291. package/dist/awgpu/sequence.d.ts +83 -0
  292. package/dist/awgpu/sequence.d.ts.map +1 -0
  293. package/dist/awgpu/sequence.js +273 -0
  294. package/dist/awgpu/sequence.js.map +1 -0
  295. package/dist/awgpu/state.d.ts +27 -0
  296. package/dist/awgpu/state.d.ts.map +1 -0
  297. package/dist/awgpu/state.js +43 -0
  298. package/dist/awgpu/state.js.map +1 -0
  299. package/dist/awgpu/stream.d.ts +57 -0
  300. package/dist/awgpu/stream.d.ts.map +1 -0
  301. package/dist/awgpu/stream.js +139 -0
  302. package/dist/awgpu/stream.js.map +1 -0
  303. package/dist/awgpu/target.d.ts +98 -0
  304. package/dist/awgpu/target.d.ts.map +1 -0
  305. package/dist/awgpu/target.js +357 -0
  306. package/dist/awgpu/target.js.map +1 -0
  307. package/dist/awgpu_old/buffer.d.ts +78 -0
  308. package/dist/awgpu_old/buffer.d.ts.map +1 -0
  309. package/dist/awgpu_old/buffer.js +220 -0
  310. package/dist/awgpu_old/buffer.js.map +1 -0
  311. package/dist/awgpu_old/device.d.ts +69 -0
  312. package/dist/awgpu_old/device.d.ts.map +1 -0
  313. package/dist/awgpu_old/device.js +121 -0
  314. package/dist/awgpu_old/device.js.map +1 -0
  315. package/dist/awgpu_old/frame.d.ts +17 -0
  316. package/dist/awgpu_old/frame.d.ts.map +1 -0
  317. package/dist/awgpu_old/frame.js +29 -0
  318. package/dist/awgpu_old/frame.js.map +1 -0
  319. package/dist/awgpu_old/index.d.ts +8 -0
  320. package/dist/awgpu_old/index.d.ts.map +1 -0
  321. package/dist/awgpu_old/index.js +18 -0
  322. package/dist/awgpu_old/index.js.map +1 -0
  323. package/dist/awgpu_old/layout.d.ts +70 -0
  324. package/dist/awgpu_old/layout.d.ts.map +1 -0
  325. package/dist/awgpu_old/layout.js +137 -0
  326. package/dist/awgpu_old/layout.js.map +1 -0
  327. package/dist/awgpu_old/pass.d.ts +97 -0
  328. package/dist/awgpu_old/pass.d.ts.map +1 -0
  329. package/dist/awgpu_old/pass.js +302 -0
  330. package/dist/awgpu_old/pass.js.map +1 -0
  331. package/dist/awgpu_old/pipeline.d.ts +73 -0
  332. package/dist/awgpu_old/pipeline.d.ts.map +1 -0
  333. package/dist/awgpu_old/pipeline.js +226 -0
  334. package/dist/awgpu_old/pipeline.js.map +1 -0
  335. package/dist/awgpu_old/target.d.ts +186 -0
  336. package/dist/awgpu_old/target.d.ts.map +1 -0
  337. package/dist/awgpu_old/target.js +428 -0
  338. package/dist/awgpu_old/target.js.map +1 -0
  339. package/dist/index.d.ts +10 -0
  340. package/dist/index.d.ts.map +1 -0
  341. package/dist/index.js +10 -0
  342. package/dist/index.js.map +1 -0
  343. package/package.json +106 -0
@@ -0,0 +1,251 @@
1
+ // ================================================================
2
+ // Awgpu - Level 3: Resource Binding System (BindLayout, BindTable)
3
+ // ================================================================
4
+ import { resolveDevice } from "./device.js";
5
+ import { resolveTextureView } from "./memory.js";
6
+ /**
7
+ * Standardized 4-tier WebGPU update frequency slots.
8
+ */
9
+ export var SlotFrequency;
10
+ (function (SlotFrequency) {
11
+ SlotFrequency[SlotFrequency["PerFrame"] = 0] = "PerFrame";
12
+ SlotFrequency[SlotFrequency["PerPhase"] = 1] = "PerPhase";
13
+ SlotFrequency[SlotFrequency["PerBatch"] = 2] = "PerBatch";
14
+ SlotFrequency[SlotFrequency["PerInstance"] = 3] = "PerInstance";
15
+ })(SlotFrequency || (SlotFrequency = {}));
16
+ /**
17
+ * Resolves a high-level or raw resource into a native GPUBindingResource descriptor.
18
+ */
19
+ export function resolveBindingResource(res) {
20
+ if ("byteOffset" in res) {
21
+ // BufferSlice
22
+ const rawBuf = "native" in res.buffer ? res.buffer.native : res.buffer;
23
+ return {
24
+ buffer: rawBuf,
25
+ offset: res.byteOffset,
26
+ size: res.byteLength,
27
+ };
28
+ }
29
+ if ("native" in res) {
30
+ // Buffer, Sampler, or Texture wrapper
31
+ if ("view" in res) {
32
+ return res.view;
33
+ }
34
+ if ("usage" in res) {
35
+ return { buffer: res.native };
36
+ }
37
+ return res.native;
38
+ }
39
+ if ("createView" in res) {
40
+ // Raw GPUTexture: resolve via cached default view
41
+ return resolveTextureView(res);
42
+ }
43
+ if ("size" in res && "usage" in res) {
44
+ // Raw GPUBuffer
45
+ return { buffer: res };
46
+ }
47
+ return res;
48
+ }
49
+ /**
50
+ * Fluent builder for creating GPUBindGroupLayout descriptors.
51
+ */
52
+ export class BindLayout {
53
+ native;
54
+ label;
55
+ constructor(native, label = "BindLayout") {
56
+ this.native = native;
57
+ this.label = label;
58
+ }
59
+ /**
60
+ * Builder factory for fluent layout construction.
61
+ */
62
+ static builder() {
63
+ return new BindLayoutBuilder();
64
+ }
65
+ /**
66
+ * Creates BindLayout from raw GPUBindGroupLayoutEntry array.
67
+ */
68
+ static create(device, entries, label = "BindLayout") {
69
+ const gpu = resolveDevice(device);
70
+ const native = gpu.createBindGroupLayout({ label, entries });
71
+ return new BindLayout(native, label);
72
+ }
73
+ }
74
+ export class BindLayoutBuilder {
75
+ entries = [];
76
+ addUniform(binding, visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, options = {}) {
77
+ this.entries.push({
78
+ binding,
79
+ visibility,
80
+ buffer: {
81
+ type: "uniform",
82
+ hasDynamicOffset: options.hasDynamicOffset ?? false,
83
+ minBindingSize: options.minBindingSize,
84
+ },
85
+ });
86
+ return this;
87
+ }
88
+ addStorage(binding, visibility = GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT, options = {}) {
89
+ const type = (options.readOnly ?? true) ? "read-only-storage" : "storage";
90
+ this.entries.push({
91
+ binding,
92
+ visibility,
93
+ buffer: {
94
+ type,
95
+ hasDynamicOffset: options.hasDynamicOffset ?? false,
96
+ minBindingSize: options.minBindingSize,
97
+ },
98
+ });
99
+ return this;
100
+ }
101
+ addTexture(binding, visibility = GPUShaderStage.FRAGMENT, options = {}) {
102
+ this.entries.push({
103
+ binding,
104
+ visibility,
105
+ texture: {
106
+ sampleType: options.sampleType ?? "float",
107
+ viewDimension: options.viewDimension ?? "2d",
108
+ multisampled: options.multisampled ?? false,
109
+ },
110
+ });
111
+ return this;
112
+ }
113
+ addStorageTexture(binding, format, visibility = GPUShaderStage.COMPUTE, options = {}) {
114
+ this.entries.push({
115
+ binding,
116
+ visibility,
117
+ storageTexture: {
118
+ access: options.access ?? "write-only",
119
+ format,
120
+ viewDimension: options.viewDimension ?? "2d",
121
+ },
122
+ });
123
+ return this;
124
+ }
125
+ addSampler(binding, visibility = GPUShaderStage.FRAGMENT, options = {}) {
126
+ this.entries.push({
127
+ binding,
128
+ visibility,
129
+ sampler: {
130
+ type: options.comparison ? "comparison" : "filtering",
131
+ },
132
+ });
133
+ return this;
134
+ }
135
+ build(device, label = "BindLayout") {
136
+ return BindLayout.create(device, this.entries, label);
137
+ }
138
+ }
139
+ /**
140
+ * GPU bind group wrapper tracking slot index and native GPUBindGroup.
141
+ */
142
+ export class BindTable {
143
+ native;
144
+ layout;
145
+ slot;
146
+ label;
147
+ constructor(native, layout, slot = SlotFrequency.PerFrame, label = "BindTable") {
148
+ this.native = native;
149
+ this.layout = layout;
150
+ this.slot = slot;
151
+ this.label = label;
152
+ }
153
+ /**
154
+ * Factory: Instantiates GPUBindGroup with automated resource resolution.
155
+ */
156
+ static create(device, layout, entries, options = {}) {
157
+ const gpu = resolveDevice(device);
158
+ const rawLayout = "native" in layout ? layout.native : layout;
159
+ const slot = options.slot ?? SlotFrequency.PerFrame;
160
+ const label = options.label ?? "BindTable";
161
+ const resolvedEntries = new Array(entries.length);
162
+ for (let i = 0; i < entries.length; i++) {
163
+ resolvedEntries[i] = {
164
+ binding: entries[i].binding,
165
+ resource: resolveBindingResource(entries[i].resource),
166
+ };
167
+ }
168
+ const native = gpu.createBindGroup({
169
+ label,
170
+ layout: rawLayout,
171
+ entries: resolvedEntries,
172
+ });
173
+ return new BindTable(native, rawLayout, slot, label);
174
+ }
175
+ static _defaultCache;
176
+ /**
177
+ * Retrieves existing cached BindTable or creates new instance if not present.
178
+ */
179
+ static getOrCreate(device, layout, entries, options = {}) {
180
+ if (!BindTable._defaultCache) {
181
+ BindTable._defaultCache = new BindTableCache();
182
+ }
183
+ return BindTable._defaultCache.getOrCreate(device, layout, entries, options);
184
+ }
185
+ /**
186
+ * Clears default BindTable deduplication cache.
187
+ */
188
+ static clearCache() {
189
+ BindTable._defaultCache?.clear();
190
+ }
191
+ }
192
+ let _nextBindResourceId = 1;
193
+ const _bindResourceIdMap = new WeakMap();
194
+ function getResourceId(obj) {
195
+ let id = _bindResourceIdMap.get(obj);
196
+ if (id === undefined) {
197
+ id = _nextBindResourceId++;
198
+ _bindResourceIdMap.set(obj, id);
199
+ }
200
+ return id;
201
+ }
202
+ /**
203
+ * Computes deterministic lookup key for GPUBindGroupLayout and resource entries.
204
+ */
205
+ export function hashBindingEntries(layout, entries) {
206
+ const layoutId = getResourceId(layout);
207
+ const sorted = entries.length > 1
208
+ ? entries.slice().sort((a, b) => a.binding - b.binding)
209
+ : entries;
210
+ let key = `${layoutId};`;
211
+ for (let i = 0; i < sorted.length; i++) {
212
+ const entry = sorted[i];
213
+ const res = resolveBindingResource(entry.resource);
214
+ key += `${entry.binding}:`;
215
+ if ("buffer" in res) {
216
+ const bufId = getResourceId(res.buffer);
217
+ key += `b_${bufId}_${res.offset ?? 0}_${res.size ?? 0};`;
218
+ }
219
+ else if (typeof res === "object" && res !== null) {
220
+ const resId = getResourceId(res);
221
+ key += `r_${resId};`;
222
+ }
223
+ }
224
+ return key;
225
+ }
226
+ /**
227
+ * Cache preventing redundant allocation of identical GPUBindGroup instances.
228
+ */
229
+ export class BindTableCache {
230
+ _cache = new Map();
231
+ get(key) {
232
+ return this._cache.get(key);
233
+ }
234
+ set(key, table) {
235
+ this._cache.set(key, table);
236
+ }
237
+ getOrCreate(device, layout, entries, options = {}) {
238
+ const rawLayout = "native" in layout ? layout.native : layout;
239
+ const key = hashBindingEntries(rawLayout, entries);
240
+ let cached = this._cache.get(key);
241
+ if (!cached) {
242
+ cached = BindTable.create(device, rawLayout, entries, options);
243
+ this._cache.set(key, cached);
244
+ }
245
+ return cached;
246
+ }
247
+ clear() {
248
+ this._cache.clear();
249
+ }
250
+ }
251
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../awgpu/binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export interface DeviceConfig {
2
+ canvas?: HTMLCanvasElement | string | null;
3
+ powerPreference?: GPUPowerPreference;
4
+ requiredFeatures?: GPUFeatureName[];
5
+ requiredLimits?: Record<string, number>;
6
+ alphaMode?: GPUCanvasAlphaMode;
7
+ onError?: (event: GPUUncapturedErrorEvent) => void;
8
+ onDeviceLost?: (info: GPUDeviceLostInfo) => void;
9
+ }
10
+ /**
11
+ * Resolves a GPUDevice from either a Device instance or a native GPUDevice.
12
+ */
13
+ export declare function resolveDevice(deviceOrGpu: Device | GPUDevice): GPUDevice;
14
+ /**
15
+ * Resolves GPUQueue from Device wrapper or raw GPUDevice.
16
+ */
17
+ export declare function resolveQueue(deviceOrGpu: Device | GPUDevice): GPUQueue;
18
+ /**
19
+ * Encapsulates GPU adapter negotiation, device lifetime, and swapchain presentation.
20
+ */
21
+ export declare class Device {
22
+ readonly adapter: GPUAdapter;
23
+ readonly device: GPUDevice;
24
+ readonly queue: GPUQueue;
25
+ readonly canvas: HTMLCanvasElement | null;
26
+ readonly context: GPUCanvasContext | null;
27
+ readonly format: GPUTextureFormat;
28
+ constructor(adapter: GPUAdapter, device: GPUDevice, canvas: HTMLCanvasElement | null, context: GPUCanvasContext | null, format: GPUTextureFormat);
29
+ /**
30
+ * Unabstracted native GPUDevice handle.
31
+ */
32
+ get native(): GPUDevice;
33
+ /**
34
+ * Hardware limit capabilities negotiated for device.
35
+ */
36
+ get limits(): GPUSupportedLimits;
37
+ /**
38
+ * Set of feature flags enabled on device.
39
+ */
40
+ get features(): GPUSupportedFeatures;
41
+ /**
42
+ * Promise resolving when device disconnection occurs.
43
+ */
44
+ get lost(): Promise<GPUDeviceLostInfo>;
45
+ /**
46
+ * Factory: Negotiates hardware adapter, acquires GPUDevice, and configures canvas swapchain.
47
+ */
48
+ static create(config?: DeviceConfig): Promise<Device>;
49
+ /**
50
+ * Factory: Allocates a headless device omitting presentation swapchains for compute or offscreen testing.
51
+ */
52
+ static createHeadless(config?: DeviceConfig): Promise<Device>;
53
+ /**
54
+ * Instantiates a fresh GPUCommandEncoder with optional diagnostic label.
55
+ */
56
+ createCommandEncoder(label?: string): GPUCommandEncoder;
57
+ private _singleSubmitArray;
58
+ /**
59
+ * Accepts a single command buffer/encoder or an array of command buffers/encoders.
60
+ * Encoders are automatically finalized before submission.
61
+ */
62
+ submit(commands: (GPUCommandBuffer | GPUCommandEncoder)[] | GPUCommandBuffer | GPUCommandEncoder): void;
63
+ /**
64
+ * Unconfigures presentation context and releases hardware device resources.
65
+ */
66
+ destroy(): void;
67
+ }
68
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../awgpu/device.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAEtE;AAED;;GAEG;AACH,qBAAa,MAAM;IACf,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAG9B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,MAAM,EAAE,gBAAgB;IAU5B;;OAEG;IACH,IAAI,MAAM,IAAI,SAAS,CAEtB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,kBAAkB,CAE/B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,oBAAoB,CAEnC;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAErC;IAED;;OAEG;WACU,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAyD/D;;OAEG;WACU,cAAc,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvE;;OAEG;IACH,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIvD,OAAO,CAAC,kBAAkB,CAA6D;IAEvF;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI;IAkBvG;;OAEG;IACH,OAAO,IAAI,IAAI;CAMlB"}
@@ -0,0 +1,150 @@
1
+ // ================================================================
2
+ // Awgpu - Level 0: Hardware Foundation
3
+ // ================================================================
4
+ /**
5
+ * Resolves a GPUDevice from either a Device instance or a native GPUDevice.
6
+ */
7
+ export function resolveDevice(deviceOrGpu) {
8
+ return "device" in deviceOrGpu ? deviceOrGpu.device : deviceOrGpu;
9
+ }
10
+ /**
11
+ * Resolves GPUQueue from Device wrapper or raw GPUDevice.
12
+ */
13
+ export function resolveQueue(deviceOrGpu) {
14
+ return "device" in deviceOrGpu ? deviceOrGpu.device.queue : deviceOrGpu.queue;
15
+ }
16
+ /**
17
+ * Encapsulates GPU adapter negotiation, device lifetime, and swapchain presentation.
18
+ */
19
+ export class Device {
20
+ adapter;
21
+ device;
22
+ queue;
23
+ canvas;
24
+ context;
25
+ format;
26
+ constructor(adapter, device, canvas, context, format) {
27
+ this.adapter = adapter;
28
+ this.device = device;
29
+ this.queue = device.queue;
30
+ this.canvas = canvas;
31
+ this.context = context;
32
+ this.format = format;
33
+ }
34
+ /**
35
+ * Unabstracted native GPUDevice handle.
36
+ */
37
+ get native() {
38
+ return this.device;
39
+ }
40
+ /**
41
+ * Hardware limit capabilities negotiated for device.
42
+ */
43
+ get limits() {
44
+ return this.device.limits;
45
+ }
46
+ /**
47
+ * Set of feature flags enabled on device.
48
+ */
49
+ get features() {
50
+ return this.device.features;
51
+ }
52
+ /**
53
+ * Promise resolving when device disconnection occurs.
54
+ */
55
+ get lost() {
56
+ return this.device.lost;
57
+ }
58
+ /**
59
+ * Factory: Negotiates hardware adapter, acquires GPUDevice, and configures canvas swapchain.
60
+ */
61
+ static async create(config = {}) {
62
+ if (!navigator.gpu) {
63
+ throw new Error("WebGPU is not supported in this runtime environment.");
64
+ }
65
+ const adapter = await navigator.gpu.requestAdapter({
66
+ powerPreference: config.powerPreference ?? "high-performance",
67
+ });
68
+ if (!adapter) {
69
+ throw new Error("Failed to acquire GPUAdapter matching requested configuration.");
70
+ }
71
+ const device = await adapter.requestDevice({
72
+ requiredFeatures: config.requiredFeatures,
73
+ requiredLimits: config.requiredLimits,
74
+ });
75
+ if (config.onError) {
76
+ device.addEventListener("uncapturederror", config.onError);
77
+ }
78
+ if (config.onDeviceLost) {
79
+ device.lost.then(config.onDeviceLost);
80
+ }
81
+ let canvasEl = null;
82
+ let ctx = null;
83
+ let preferredFormat = "rgba8unorm";
84
+ if (config.canvas) {
85
+ if (typeof config.canvas === "string") {
86
+ const el = document.querySelector(config.canvas);
87
+ if (!el || !(el instanceof HTMLCanvasElement)) {
88
+ throw new Error(`Canvas element with selector '${config.canvas}' not found.`);
89
+ }
90
+ canvasEl = el;
91
+ }
92
+ else {
93
+ canvasEl = config.canvas;
94
+ }
95
+ ctx = canvasEl.getContext("webgpu");
96
+ if (!ctx) {
97
+ throw new Error("Failed to acquire WebGPU presentation context from canvas.");
98
+ }
99
+ preferredFormat = navigator.gpu.getPreferredCanvasFormat();
100
+ ctx.configure({
101
+ device,
102
+ format: preferredFormat,
103
+ alphaMode: config.alphaMode ?? "premultiplied",
104
+ });
105
+ }
106
+ return new Device(adapter, device, canvasEl, ctx, preferredFormat);
107
+ }
108
+ /**
109
+ * Factory: Allocates a headless device omitting presentation swapchains for compute or offscreen testing.
110
+ */
111
+ static async createHeadless(config = {}) {
112
+ return Device.create({ ...config, canvas: null });
113
+ }
114
+ /**
115
+ * Instantiates a fresh GPUCommandEncoder with optional diagnostic label.
116
+ */
117
+ createCommandEncoder(label) {
118
+ return this.device.createCommandEncoder({ label });
119
+ }
120
+ _singleSubmitArray = [null];
121
+ /**
122
+ * Accepts a single command buffer/encoder or an array of command buffers/encoders.
123
+ * Encoders are automatically finalized before submission.
124
+ */
125
+ submit(commands) {
126
+ if (!Array.isArray(commands)) {
127
+ const buf = "finish" in commands ? commands.finish() : commands;
128
+ this._singleSubmitArray[0] = buf;
129
+ this.queue.submit(this._singleSubmitArray);
130
+ this._singleSubmitArray[0] = null;
131
+ return;
132
+ }
133
+ const buffers = new Array(commands.length);
134
+ for (let i = 0; i < commands.length; i++) {
135
+ const item = commands[i];
136
+ buffers[i] = "finish" in item ? item.finish() : item;
137
+ }
138
+ this.queue.submit(buffers);
139
+ }
140
+ /**
141
+ * Unconfigures presentation context and releases hardware device resources.
142
+ */
143
+ destroy() {
144
+ if (this.context) {
145
+ this.context.unconfigure();
146
+ }
147
+ this.device.destroy();
148
+ }
149
+ }
150
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../awgpu/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { Device } from "./device.js";
2
+ import type { Target } from "./target.js";
3
+ import type { Buffer, Texture } from "./memory.js";
4
+ import { RenderPassNode, ComputePassNode, PassSequence, type DrawBatch, type ComputeBatch } from "./sequence.js";
5
+ export type GraphResource = Buffer | Texture | GPUBuffer | GPUTexture | GPUTextureView;
6
+ export declare class RenderGraphNode {
7
+ readonly node: RenderPassNode;
8
+ readonly reads: Set<object>;
9
+ readonly writes: Set<object>;
10
+ private _hasSideEffect;
11
+ constructor(target: Target, label: string);
12
+ get hasSideEffect(): boolean;
13
+ sideEffect(enabled?: boolean): this;
14
+ read(res: GraphResource): this;
15
+ write(res: GraphResource): this;
16
+ /**
17
+ * Proxy: adds draw batch to the inner RenderPassNode.
18
+ */
19
+ addDraw(batch: DrawBatch): this;
20
+ /**
21
+ * Proxy: registers custom imperative recording callback on the inner RenderPassNode.
22
+ */
23
+ record(recorder: (pass: GPURenderPassEncoder) => void): this;
24
+ }
25
+ export declare class ComputeGraphNode {
26
+ readonly node: ComputePassNode;
27
+ readonly reads: Set<object>;
28
+ readonly writes: Set<object>;
29
+ private _hasSideEffect;
30
+ constructor(label: string);
31
+ get hasSideEffect(): boolean;
32
+ sideEffect(enabled?: boolean): this;
33
+ read(res: GraphResource): this;
34
+ write(res: GraphResource): this;
35
+ /**
36
+ * Proxy: adds compute dispatch to the inner ComputePassNode.
37
+ */
38
+ addDispatch(batch: ComputeBatch): this;
39
+ /**
40
+ * Proxy: registers custom imperative recording callback on the inner ComputePassNode.
41
+ */
42
+ record(recorder: (pass: GPUComputePassEncoder) => void): this;
43
+ }
44
+ /**
45
+ * Directed acyclic graph (DAG) scheduler for compute and render passes.
46
+ * Automatically sorts pass execution order based on read/write resource dependencies.
47
+ * compile() uses Kahn's algorithm in O(V+E) time via an index pointer instead of shift().
48
+ * Automatically eliminates dead passes not contributing to side effects or screen targets.
49
+ */
50
+ export declare class PassGraph {
51
+ private _nodes;
52
+ private _cachedSequence?;
53
+ private _dirty;
54
+ addRenderPass(target: Target, label?: string): RenderGraphNode;
55
+ addComputePass(label?: string): ComputeGraphNode;
56
+ clear(): void;
57
+ invalidate(): void;
58
+ /**
59
+ * Compiles dependency graph into linear PassSequence using Kahn topological sort.
60
+ * Evaluates read/write hazards bidirectionally across pass pairs.
61
+ * Performs reverse reachability analysis from side-effect roots to eliminate dead passes.
62
+ * When cycle is detected, logs warning and falls back to declaration order.
63
+ * Caches compiled sequence when topology is unchanged.
64
+ */
65
+ compile(optionsOrForce?: boolean | {
66
+ force?: boolean;
67
+ cullDeadPasses?: boolean;
68
+ }, cullDeadPasses?: boolean): PassSequence;
69
+ /**
70
+ * Compiles and executes the graph in a single call.
71
+ */
72
+ execute(device: Device | GPUDevice, label?: string, options?: {
73
+ force?: boolean;
74
+ cullDeadPasses?: boolean;
75
+ }): void;
76
+ }
77
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../awgpu/graph.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;AAOvF,qBAAa,eAAe;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,cAAqB;IACnC,QAAQ,CAAC,MAAM,cAAqB;IACpC,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAqBzC,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,UAAU,CAAC,OAAO,UAAO,GAAG,IAAI;IAKhC,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAK9B,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAK/B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAK/B;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI;CAK/D;AAED,qBAAa,gBAAgB;IACzB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,cAAqB;IACnC,QAAQ,CAAC,MAAM,cAAqB;IACpC,OAAO,CAAC,cAAc,CAAS;gBAEnB,KAAK,EAAE,MAAM;IAIzB,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,UAAU,CAAC,OAAO,UAAO,GAAG,IAAI;IAKhC,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAK9B,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAK/B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKtC;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI;CAKhE;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,eAAe,CAAC,CAAe;IACvC,OAAO,CAAC,MAAM,CAAQ;IAEtB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAe,GAAG,eAAe;IAOpE,cAAc,CAAC,KAAK,SAAgB,GAAG,gBAAgB;IAOvD,KAAK,IAAI,IAAI;IAMb,UAAU,IAAI,IAAI;IAKlB;;;;;;OAMG;IACH,OAAO,CACH,cAAc,GAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAU,EAC/E,cAAc,UAAO,GACtB,YAAY;IAyJf;;OAEG;IACH,OAAO,CACH,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,SAAc,EACnB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GACxD,IAAI;CAIV"}