@jgengine/core 0.10.0 → 0.11.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 (607) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/LICENSE +203 -661
  3. package/README.md +1 -1
  4. package/dist/ai/crowd.d.ts +55 -0
  5. package/dist/ai/crowd.js +114 -0
  6. package/dist/ai/flock.d.ts +5 -2
  7. package/dist/ai/flock.js +5 -2
  8. package/dist/ai/groupAssist.d.ts +1 -0
  9. package/dist/ai/groupAssist.js +1 -0
  10. package/dist/ai/heatSystem.d.ts +76 -0
  11. package/dist/ai/heatSystem.js +97 -0
  12. package/dist/ai/interestScheduler.d.ts +107 -0
  13. package/dist/ai/interestScheduler.js +118 -0
  14. package/dist/ai/jobBoard.d.ts +1 -0
  15. package/dist/ai/jobBoard.js +1 -0
  16. package/dist/ai/laneSelect.d.ts +5 -2
  17. package/dist/ai/laneSelect.js +5 -2
  18. package/dist/ai/mobBrain.d.ts +1 -0
  19. package/dist/ai/mobBrain.js +1 -0
  20. package/dist/ai/spawnDirector.d.ts +7 -2
  21. package/dist/ai/spawnDirector.js +18 -15
  22. package/dist/ai/spawnPoint.d.ts +3 -1
  23. package/dist/ai/spawnPoint.js +3 -1
  24. package/dist/ai/targetAcquisition.d.ts +84 -0
  25. package/dist/ai/targetAcquisition.js +92 -0
  26. package/dist/anim/easing.d.ts +19 -0
  27. package/dist/anim/easing.js +19 -0
  28. package/dist/anim/oscillator.d.ts +12 -0
  29. package/dist/anim/oscillator.js +25 -0
  30. package/dist/area/areaEffectField.d.ts +127 -0
  31. package/dist/area/areaEffectField.js +175 -0
  32. package/dist/area/stackPolicy.d.ts +47 -0
  33. package/dist/area/stackPolicy.js +99 -0
  34. package/dist/authoring.d.ts +1 -0
  35. package/dist/authoring.js +1 -0
  36. package/dist/board/laneBoard.d.ts +13 -0
  37. package/dist/board/laneBoard.js +13 -0
  38. package/dist/board/timelineBoard.d.ts +10 -0
  39. package/dist/board/timelineBoard.js +10 -0
  40. package/dist/combat/abilityKit.d.ts +18 -0
  41. package/dist/combat/abilityKit.js +24 -9
  42. package/dist/combat/animationState.d.ts +5 -0
  43. package/dist/combat/animationState.js +5 -0
  44. package/dist/combat/breakMeters.d.ts +10 -0
  45. package/dist/combat/breakMeters.js +10 -0
  46. package/dist/combat/castRunner.d.ts +5 -0
  47. package/dist/combat/castRunner.js +5 -0
  48. package/dist/combat/comboPoints.d.ts +5 -0
  49. package/dist/combat/comboPoints.js +5 -0
  50. package/dist/combat/comboString.d.ts +5 -0
  51. package/dist/combat/comboString.js +5 -0
  52. package/dist/combat/damageInterceptors.d.ts +192 -0
  53. package/dist/combat/damageInterceptors.js +251 -0
  54. package/dist/combat/damageMatchup.d.ts +68 -0
  55. package/dist/combat/damageMatchup.js +42 -0
  56. package/dist/combat/damageResolution.d.ts +63 -0
  57. package/dist/combat/damageResolution.js +50 -0
  58. package/dist/combat/death.d.ts +7 -1
  59. package/dist/combat/death.js +5 -0
  60. package/dist/combat/deathReason.d.ts +14 -0
  61. package/dist/combat/deathReason.js +1 -0
  62. package/dist/combat/defensiveWindow.d.ts +5 -0
  63. package/dist/combat/defensiveWindow.js +5 -0
  64. package/dist/combat/dotField.d.ts +5 -1
  65. package/dist/combat/dotField.js +5 -1
  66. package/dist/combat/downed.d.ts +5 -0
  67. package/dist/combat/downed.js +5 -0
  68. package/dist/combat/effects.d.ts +5 -0
  69. package/dist/combat/effects.js +5 -0
  70. package/dist/combat/encounterSequence.d.ts +258 -0
  71. package/dist/combat/encounterSequence.js +426 -0
  72. package/dist/combat/hitReaction.d.ts +57 -1
  73. package/dist/combat/hitReaction.js +45 -5
  74. package/dist/combat/magazine.d.ts +54 -0
  75. package/dist/combat/magazine.js +96 -0
  76. package/dist/combat/projectiles.d.ts +5 -0
  77. package/dist/combat/projectiles.js +32 -14
  78. package/dist/combat/receivedDamage.d.ts +117 -0
  79. package/dist/combat/receivedDamage.js +92 -0
  80. package/dist/combat/regenShield.d.ts +5 -1
  81. package/dist/combat/regenShield.js +5 -1
  82. package/dist/combat/renderCues.d.ts +51 -0
  83. package/dist/combat/renderCues.js +44 -0
  84. package/dist/combat/resourcePool.d.ts +5 -0
  85. package/dist/combat/resourcePool.js +5 -0
  86. package/dist/combat/rewardAllocation.d.ts +121 -0
  87. package/dist/combat/rewardAllocation.js +251 -0
  88. package/dist/combat/shotOrigin.d.ts +18 -1
  89. package/dist/combat/shotOrigin.js +39 -0
  90. package/dist/combat/statusApplication.d.ts +96 -0
  91. package/dist/combat/statusApplication.js +81 -0
  92. package/dist/combat/telegraph.d.ts +11 -2
  93. package/dist/combat/telegraph.js +11 -2
  94. package/dist/combat/thresholdCrossings.d.ts +85 -0
  95. package/dist/combat/thresholdCrossings.js +116 -0
  96. package/dist/combat.d.ts +34 -0
  97. package/dist/combat.js +34 -0
  98. package/dist/commands/commandRegistry.d.ts +11 -0
  99. package/dist/commands/commandRegistry.js +9 -2
  100. package/dist/crafting/crop.d.ts +18 -0
  101. package/dist/crafting/crop.js +18 -0
  102. package/dist/crafting/production.d.ts +5 -0
  103. package/dist/crafting/production.js +5 -0
  104. package/dist/devtools/rewriteTunables.d.ts +17 -0
  105. package/dist/devtools/rewriteTunables.js +276 -0
  106. package/dist/devtools/saveEndpoint.d.ts +46 -0
  107. package/dist/devtools/saveEndpoint.js +48 -0
  108. package/dist/devtools/transformTunables.d.ts +3 -0
  109. package/dist/devtools/transformTunables.js +3 -0
  110. package/dist/devtools/tunableSchema.d.ts +31 -0
  111. package/dist/devtools/tunableSchema.js +31 -0
  112. package/dist/economy/currency.d.ts +12 -1
  113. package/dist/economy/currency.js +12 -1
  114. package/dist/economy/listingBook.d.ts +91 -0
  115. package/dist/economy/listingBook.js +144 -0
  116. package/dist/economy/resourceLedger.d.ts +222 -0
  117. package/dist/economy/resourceLedger.js +353 -0
  118. package/dist/economy/sharedWallet.d.ts +14 -0
  119. package/dist/economy/sharedWallet.js +14 -0
  120. package/dist/economy/techTree.d.ts +12 -0
  121. package/dist/economy/techTree.js +12 -0
  122. package/dist/economy/wallet.d.ts +26 -2
  123. package/dist/economy/wallet.js +35 -6
  124. package/dist/editor/commands.d.ts +190 -7
  125. package/dist/editor/commands.js +727 -55
  126. package/dist/editor/document.d.ts +159 -13
  127. package/dist/editor/document.js +750 -19
  128. package/dist/editor/grid.d.ts +229 -0
  129. package/dist/editor/grid.js +366 -0
  130. package/dist/editor/gridAdapters.d.ts +80 -0
  131. package/dist/editor/gridAdapters.js +134 -0
  132. package/dist/editor/index.d.ts +73 -6
  133. package/dist/editor/index.js +6 -2
  134. package/dist/editor/liveSync.d.ts +127 -0
  135. package/dist/editor/liveSync.js +249 -0
  136. package/dist/editor/runtimeInspector.d.ts +88 -0
  137. package/dist/editor/runtimeInspector.js +239 -0
  138. package/dist/editor/types.d.ts +107 -1
  139. package/dist/faction/reputation.d.ts +5 -0
  140. package/dist/faction/reputation.js +5 -0
  141. package/dist/format/distance.d.ts +17 -0
  142. package/dist/format/distance.js +18 -0
  143. package/dist/format/duration.d.ts +27 -0
  144. package/dist/format/duration.js +45 -0
  145. package/dist/format/speed.d.ts +17 -0
  146. package/dist/format/speed.js +25 -0
  147. package/dist/game/connectedPlayers.d.ts +6 -4
  148. package/dist/game/connectedPlayers.js +2 -2
  149. package/dist/game/cosmetics.d.ts +9 -0
  150. package/dist/game/cosmetics.js +16 -0
  151. package/dist/game/defineGame.d.ts +100 -2
  152. package/dist/game/defineGame.js +39 -2
  153. package/dist/game/defineSystem.d.ts +88 -0
  154. package/dist/game/defineSystem.js +45 -0
  155. package/dist/game/dialogue.d.ts +33 -0
  156. package/dist/game/dialogue.js +21 -0
  157. package/dist/game/events.d.ts +35 -13
  158. package/dist/game/events.js +5 -0
  159. package/dist/game/feed.d.ts +33 -0
  160. package/dist/game/feed.js +35 -2
  161. package/dist/game/gamePhase.d.ts +11 -0
  162. package/dist/game/gamePhase.js +16 -0
  163. package/dist/game/leaderboard.d.ts +5 -0
  164. package/dist/game/leaderboard.js +5 -0
  165. package/dist/game/loadout.d.ts +5 -0
  166. package/dist/game/loadout.js +5 -0
  167. package/dist/game/lootFilter.d.ts +2 -0
  168. package/dist/game/lootFilter.js +2 -0
  169. package/dist/game/lootPipeline.d.ts +164 -0
  170. package/dist/game/lootPipeline.js +216 -0
  171. package/dist/game/lootTable.d.ts +19 -2
  172. package/dist/game/lootTable.js +15 -5
  173. package/dist/game/objectives.d.ts +43 -0
  174. package/dist/game/objectives.js +36 -0
  175. package/dist/game/paramLayers.d.ts +148 -0
  176. package/dist/game/paramLayers.js +185 -0
  177. package/dist/game/ping.d.ts +5 -0
  178. package/dist/game/ping.js +5 -0
  179. package/dist/game/playableGame.d.ts +92 -7
  180. package/dist/game/quest.d.ts +8 -0
  181. package/dist/game/quest.js +29 -0
  182. package/dist/game/race.d.ts +141 -0
  183. package/dist/game/race.js +169 -0
  184. package/dist/game/recordBook.d.ts +3 -1
  185. package/dist/game/recordBook.js +4 -1
  186. package/dist/game/ruleSelection.d.ts +75 -0
  187. package/dist/game/ruleSelection.js +127 -0
  188. package/dist/game/runDraft.d.ts +5 -0
  189. package/dist/game/runDraft.js +5 -0
  190. package/dist/game/saveStore.d.ts +111 -0
  191. package/dist/game/saveStore.js +312 -0
  192. package/dist/game/snapshotHistory.d.ts +67 -0
  193. package/dist/game/snapshotHistory.js +95 -0
  194. package/dist/game/social.d.ts +38 -1
  195. package/dist/game/social.js +71 -0
  196. package/dist/game/spawnPoints.d.ts +5 -0
  197. package/dist/game/spawnPoints.js +5 -0
  198. package/dist/game/systemRuntime.d.ts +50 -0
  199. package/dist/game/systemRuntime.js +157 -0
  200. package/dist/game/systemSchedule.d.ts +72 -0
  201. package/dist/game/systemSchedule.js +242 -0
  202. package/dist/game/toasts.d.ts +43 -0
  203. package/dist/game/toasts.js +44 -0
  204. package/dist/game/trade.d.ts +10 -0
  205. package/dist/game/trade.js +10 -0
  206. package/dist/game/unlocks.d.ts +8 -0
  207. package/dist/game/unlocks.js +16 -0
  208. package/dist/game/vfxInstance.d.ts +138 -0
  209. package/dist/game/vfxInstance.js +96 -0
  210. package/dist/game/worldItem.d.ts +17 -4
  211. package/dist/game/worldItem.js +17 -4
  212. package/dist/gameplay.d.ts +91 -0
  213. package/dist/gameplay.js +91 -0
  214. package/dist/index.d.ts +5 -14
  215. package/dist/index.js +5 -14
  216. package/dist/input/actionBindings.d.ts +23 -6
  217. package/dist/input/actionBindings.js +23 -6
  218. package/dist/input/axisInput.d.ts +7 -2
  219. package/dist/input/axisInput.js +7 -2
  220. package/dist/input/controlGroups.d.ts +67 -0
  221. package/dist/input/controlGroups.js +41 -0
  222. package/dist/input/touchScheme.d.ts +82 -6
  223. package/dist/input/touchScheme.js +123 -10
  224. package/dist/interaction/lockpick.d.ts +61 -0
  225. package/dist/interaction/lockpick.js +168 -0
  226. package/dist/interaction/proximityPrompt.d.ts +2 -0
  227. package/dist/interaction/proximityPrompt.js +2 -0
  228. package/dist/interaction/qte.d.ts +5 -0
  229. package/dist/interaction/qte.js +5 -0
  230. package/dist/interaction/skillCheck.d.ts +5 -0
  231. package/dist/interaction/skillCheck.js +5 -0
  232. package/dist/inventory/inventoryModel.d.ts +12 -0
  233. package/dist/inventory/inventoryModel.js +12 -0
  234. package/dist/inventory/shapedGrid.d.ts +16 -0
  235. package/dist/inventory/shapedGrid.js +16 -0
  236. package/dist/inventory/slotModel.d.ts +10 -0
  237. package/dist/inventory/slotModel.js +10 -0
  238. package/dist/item/durability.d.ts +5 -0
  239. package/dist/item/durability.js +5 -0
  240. package/dist/item/itemIdentity.d.ts +171 -0
  241. package/dist/item/itemIdentity.js +138 -0
  242. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  243. package/dist/item/itemInstanceRegistry.js +34 -0
  244. package/dist/item/itemgen.d.ts +163 -0
  245. package/dist/item/itemgen.js +151 -0
  246. package/dist/item/modularItem.d.ts +5 -0
  247. package/dist/item/modularItem.js +5 -0
  248. package/dist/item/use.d.ts +5 -0
  249. package/dist/item/use.js +5 -0
  250. package/dist/item/useBehavior.d.ts +142 -0
  251. package/dist/item/useBehavior.js +105 -0
  252. package/dist/item/weapon.d.ts +5 -0
  253. package/dist/item/weapon.js +5 -0
  254. package/dist/math/scalar.d.ts +25 -0
  255. package/dist/math/scalar.js +47 -0
  256. package/dist/meta/changelog.d.ts +4 -1
  257. package/dist/meta/changelog.js +16 -2
  258. package/dist/movement/avoidance.d.ts +45 -0
  259. package/dist/movement/avoidance.js +123 -0
  260. package/dist/movement/cameraRig.d.ts +8 -0
  261. package/dist/movement/cameraRig.js +8 -0
  262. package/dist/movement/dash.d.ts +11 -0
  263. package/dist/movement/dash.js +11 -0
  264. package/dist/movement/formation.d.ts +135 -0
  265. package/dist/movement/formation.js +194 -0
  266. package/dist/movement/glideModel.d.ts +5 -0
  267. package/dist/movement/glideModel.js +5 -0
  268. package/dist/movement/grappleSwing.d.ts +5 -0
  269. package/dist/movement/grappleSwing.js +5 -0
  270. package/dist/movement/leaderTrail.d.ts +5 -0
  271. package/dist/movement/leaderTrail.js +5 -0
  272. package/dist/movement/movementModel.d.ts +35 -8
  273. package/dist/movement/movementModel.js +42 -14
  274. package/dist/movement/playerMovement.js +65 -10
  275. package/dist/movement/poseState.d.ts +13 -0
  276. package/dist/movement/poseState.js +16 -0
  277. package/dist/movement/steering.d.ts +8 -0
  278. package/dist/movement/steering.js +18 -0
  279. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  280. package/dist/multiplayer/combatSnapshot.js +3 -0
  281. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  282. package/dist/multiplayer/lagCompensation.js +5 -0
  283. package/dist/multiplayer/presenceModel.d.ts +9 -1
  284. package/dist/multiplayer/presenceModel.js +9 -1
  285. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  286. package/dist/multiplayer/simultaneousCommit.js +3 -0
  287. package/dist/multiplayer.d.ts +11 -0
  288. package/dist/multiplayer.js +11 -0
  289. package/dist/nav/pathFollow.d.ts +57 -0
  290. package/dist/nav/pathFollow.js +109 -0
  291. package/dist/orders/orderKinds.d.ts +156 -0
  292. package/dist/orders/orderKinds.js +197 -0
  293. package/dist/orders/orderQueue.d.ts +208 -0
  294. package/dist/orders/orderQueue.js +211 -0
  295. package/dist/physics/drivableVehicle.d.ts +29 -0
  296. package/dist/physics/drivableVehicle.js +16 -0
  297. package/dist/physics/kinematicVehicle.d.ts +21 -1
  298. package/dist/physics/kinematicVehicle.js +23 -8
  299. package/dist/physics/physicsWorld.d.ts +24 -12
  300. package/dist/physics/physicsWorld.js +11 -5
  301. package/dist/physics/radialImpulse.d.ts +25 -0
  302. package/dist/physics/radialImpulse.js +27 -0
  303. package/dist/procedural.d.ts +3 -0
  304. package/dist/procedural.js +3 -0
  305. package/dist/progression/statGraph.d.ts +116 -0
  306. package/dist/progression/statGraph.js +318 -0
  307. package/dist/puzzle/cellGrid.d.ts +9 -0
  308. package/dist/puzzle/cellGrid.js +9 -0
  309. package/dist/puzzle/fallingPiece.d.ts +9 -0
  310. package/dist/puzzle/fallingPiece.js +9 -0
  311. package/dist/puzzle/nonogram.d.ts +39 -0
  312. package/dist/puzzle/nonogram.js +136 -0
  313. package/dist/random/nameGen.d.ts +5 -0
  314. package/dist/random/nameGen.js +5 -0
  315. package/dist/random/pick.d.ts +8 -0
  316. package/dist/random/pick.js +31 -0
  317. package/dist/random/rng.d.ts +22 -0
  318. package/dist/random/rng.js +28 -8
  319. package/dist/random/seedLink.d.ts +4 -0
  320. package/dist/random/seedLink.js +4 -0
  321. package/dist/relation/keyedValues.d.ts +54 -0
  322. package/dist/relation/keyedValues.js +115 -0
  323. package/dist/relation/thresholds.d.ts +62 -0
  324. package/dist/relation/thresholds.js +62 -0
  325. package/dist/render/color.d.ts +12 -0
  326. package/dist/render/color.js +26 -0
  327. package/dist/render/lookPreset.d.ts +41 -0
  328. package/dist/render/lookPreset.js +29 -0
  329. package/dist/render/postProcessing.d.ts +20 -0
  330. package/dist/render/postProcessing.js +21 -1
  331. package/dist/rules/predicate.d.ts +53 -0
  332. package/dist/rules/predicate.js +64 -0
  333. package/dist/rules/ruleEffects.d.ts +38 -0
  334. package/dist/rules/ruleEffects.js +37 -0
  335. package/dist/rules/triggeredRules.d.ts +160 -0
  336. package/dist/rules/triggeredRules.js +241 -0
  337. package/dist/runtime/adapter.d.ts +42 -3
  338. package/dist/runtime/adapter.js +44 -1
  339. package/dist/runtime/cameraDirector.d.ts +1 -0
  340. package/dist/runtime/cameraDirector.js +1 -0
  341. package/dist/runtime/commandRunner.d.ts +1 -0
  342. package/dist/runtime/commandRunner.js +1 -0
  343. package/dist/runtime/context/combatFx.d.ts +23 -0
  344. package/dist/runtime/context/combatFx.js +161 -0
  345. package/dist/runtime/context/registries.d.ts +13 -0
  346. package/dist/runtime/context/registries.js +84 -0
  347. package/dist/runtime/context/worldItems.d.ts +21 -0
  348. package/dist/runtime/context/worldItems.js +37 -0
  349. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  350. package/dist/runtime/descriptors/baseline.js +134 -0
  351. package/dist/runtime/descriptors/features.d.ts +74 -0
  352. package/dist/runtime/descriptors/features.js +281 -0
  353. package/dist/runtime/gameContext.d.ts +114 -13
  354. package/dist/runtime/gameContext.js +303 -395
  355. package/dist/runtime/gameRuntime.d.ts +1 -0
  356. package/dist/runtime/gameRuntime.js +1 -0
  357. package/dist/runtime/headlessRunner.d.ts +60 -0
  358. package/dist/runtime/headlessRunner.js +44 -0
  359. package/dist/runtime/hostPersistence.d.ts +12 -0
  360. package/dist/runtime/hostPersistence.js +12 -0
  361. package/dist/runtime/hostedGameRunner.d.ts +8 -3
  362. package/dist/runtime/hostedGameRunner.js +26 -3
  363. package/dist/runtime/hostedWorldSession.d.ts +12 -4
  364. package/dist/runtime/hostedWorldSession.js +11 -4
  365. package/dist/runtime/inputSnapshot.d.ts +8 -3
  366. package/dist/runtime/inputSnapshot.js +6 -2
  367. package/dist/runtime/motionIntents.d.ts +11 -2
  368. package/dist/runtime/motionIntents.js +16 -2
  369. package/dist/runtime/perContext.d.ts +15 -0
  370. package/dist/runtime/perContext.js +21 -0
  371. package/dist/runtime/runtimeSave.d.ts +79 -0
  372. package/dist/runtime/runtimeSave.js +105 -0
  373. package/dist/runtime/save.d.ts +4 -0
  374. package/dist/runtime/save.js +4 -0
  375. package/dist/runtime/snapshot.d.ts +7 -0
  376. package/dist/runtime/snapshot.js +7 -0
  377. package/dist/runtime/visibility.d.ts +2 -1
  378. package/dist/runtime/visibility.js +2 -1
  379. package/dist/runtime/worldChannel.d.ts +7 -3
  380. package/dist/runtime/worldChannel.js +51 -6
  381. package/dist/runtime/worldMirror.d.ts +14 -2
  382. package/dist/runtime/worldMirror.js +15 -2
  383. package/dist/runtime/worldProjection.d.ts +47 -0
  384. package/dist/runtime/worldProjection.js +52 -0
  385. package/dist/runtime/worldReplication.d.ts +30 -7
  386. package/dist/runtime/worldReplication.js +41 -9
  387. package/dist/runtime/worldSnapshot.d.ts +30 -3
  388. package/dist/runtime/worldSnapshot.js +20 -5
  389. package/dist/scene/assetCatalog.d.ts +21 -0
  390. package/dist/scene/assetCatalog.js +4 -0
  391. package/dist/scene/assetDiagnostics.d.ts +69 -0
  392. package/dist/scene/assetDiagnostics.js +110 -0
  393. package/dist/scene/assetGenerator.d.ts +65 -0
  394. package/dist/scene/assetGenerator.js +64 -0
  395. package/dist/scene/assetSpace.d.ts +137 -0
  396. package/dist/scene/assetSpace.js +259 -0
  397. package/dist/scene/authoredTriggers.d.ts +169 -0
  398. package/dist/scene/authoredTriggers.js +340 -0
  399. package/dist/scene/behaviorRuntime.d.ts +75 -0
  400. package/dist/scene/behaviorRuntime.js +217 -0
  401. package/dist/scene/behaviors.d.ts +14 -2
  402. package/dist/scene/behaviors.js +7 -2
  403. package/dist/scene/bodyBind.d.ts +60 -0
  404. package/dist/scene/bodyBind.js +51 -0
  405. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  406. package/dist/scene/builtinSceneKinds.js +62 -0
  407. package/dist/scene/colliders.d.ts +13 -1
  408. package/dist/scene/colliders.js +37 -1
  409. package/dist/scene/entityStats.d.ts +11 -2
  410. package/dist/scene/entityStats.js +11 -2
  411. package/dist/scene/entityStore.d.ts +12 -1
  412. package/dist/scene/entityStore.js +15 -0
  413. package/dist/scene/facing.d.ts +18 -0
  414. package/dist/scene/facing.js +26 -0
  415. package/dist/scene/modelSockets.d.ts +33 -0
  416. package/dist/scene/modelSockets.js +29 -0
  417. package/dist/scene/objectQuery.d.ts +2 -0
  418. package/dist/scene/objectQuery.js +2 -0
  419. package/dist/scene/objectStore.d.ts +4 -0
  420. package/dist/scene/objectStore.js +6 -0
  421. package/dist/scene/possession.d.ts +8 -0
  422. package/dist/scene/possession.js +14 -0
  423. package/dist/scene/roster.d.ts +3 -0
  424. package/dist/scene/roster.js +12 -0
  425. package/dist/scene/sceneKinds.d.ts +240 -0
  426. package/dist/scene/sceneKinds.js +214 -0
  427. package/dist/scene/sceneOwnership.d.ts +169 -0
  428. package/dist/scene/sceneOwnership.js +179 -0
  429. package/dist/scene/selectionBookmarks.d.ts +93 -0
  430. package/dist/scene/selectionBookmarks.js +122 -0
  431. package/dist/scene/vehicleSeat.d.ts +68 -0
  432. package/dist/scene/vehicleSeat.js +59 -0
  433. package/dist/sensor/concealment.d.ts +3 -0
  434. package/dist/sensor/concealment.js +3 -0
  435. package/dist/sensor/freezeMonitor.d.ts +1 -0
  436. package/dist/sensor/freezeMonitor.js +1 -0
  437. package/dist/sensor/frustumSensor.d.ts +7 -3
  438. package/dist/sensor/frustumSensor.js +7 -3
  439. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  440. package/dist/sensor/hiddenStateProbe.js +5 -2
  441. package/dist/sensor/recordingBuffer.d.ts +2 -1
  442. package/dist/sensor/recordingBuffer.js +2 -1
  443. package/dist/sensor/replayLoop.d.ts +6 -2
  444. package/dist/sensor/replayLoop.js +6 -2
  445. package/dist/sensor/revealQuery.d.ts +2 -1
  446. package/dist/sensor/revealQuery.js +2 -1
  447. package/dist/sensor/visionCone.d.ts +10 -3
  448. package/dist/sensor/visionCone.js +10 -3
  449. package/dist/session/contestedChannel.d.ts +1 -0
  450. package/dist/session/contestedChannel.js +1 -0
  451. package/dist/session/extraction.d.ts +1 -0
  452. package/dist/session/extraction.js +1 -0
  453. package/dist/session/roles.d.ts +6 -0
  454. package/dist/session/roles.js +6 -0
  455. package/dist/session/roundState.d.ts +8 -0
  456. package/dist/session/roundState.js +2 -0
  457. package/dist/settings/settingsModel.d.ts +1 -0
  458. package/dist/settings/settingsModel.js +1 -0
  459. package/dist/stats/accumulatorMeter.d.ts +6 -0
  460. package/dist/stats/accumulatorMeter.js +6 -0
  461. package/dist/stats/eventMeter.d.ts +5 -0
  462. package/dist/stats/eventMeter.js +5 -0
  463. package/dist/stats/rollCheck.d.ts +5 -0
  464. package/dist/stats/rollCheck.js +5 -0
  465. package/dist/stats/statModifiers.d.ts +5 -0
  466. package/dist/stats/statModifiers.js +5 -0
  467. package/dist/store/defineKeyedStore.d.ts +38 -0
  468. package/dist/store/defineKeyedStore.js +42 -0
  469. package/dist/store/defineStore.d.ts +33 -0
  470. package/dist/store/defineStore.js +35 -0
  471. package/dist/store/observableKeyedStore.d.ts +5 -0
  472. package/dist/store/observableKeyedStore.js +34 -2
  473. package/dist/survival/decayMeter.d.ts +55 -0
  474. package/dist/survival/decayMeter.js +130 -55
  475. package/dist/survival/moodle.d.ts +2 -0
  476. package/dist/survival/regionHealth.d.ts +6 -0
  477. package/dist/survival/regionHealth.js +5 -0
  478. package/dist/tactics/fallingGrid.d.ts +4 -2
  479. package/dist/tactics/fallingGrid.js +4 -2
  480. package/dist/tactics/predictiveQuery.d.ts +3 -0
  481. package/dist/tactics/predictiveQuery.js +3 -0
  482. package/dist/tactics/snapshot.d.ts +2 -0
  483. package/dist/tactics/snapshot.js +2 -0
  484. package/dist/tactics/surface.d.ts +1 -0
  485. package/dist/tactics/surface.js +1 -0
  486. package/dist/tactics/tacticalGrid.d.ts +1 -0
  487. package/dist/tactics/tacticalGrid.js +1 -0
  488. package/dist/time/beatClock.d.ts +14 -4
  489. package/dist/time/beatClock.js +14 -4
  490. package/dist/time/calendarClock.d.ts +3 -0
  491. package/dist/time/calendarClock.js +3 -0
  492. package/dist/time/idleProgress.d.ts +4 -0
  493. package/dist/time/idleProgress.js +4 -0
  494. package/dist/time/simClock.d.ts +2 -0
  495. package/dist/time/simClock.js +20 -5
  496. package/dist/ui/actionModel.d.ts +110 -0
  497. package/dist/ui/actionModel.js +159 -0
  498. package/dist/ui/gameLayout.d.ts +30 -11
  499. package/dist/ui/gameLayout.js +30 -11
  500. package/dist/ui/hudDocument.d.ts +114 -0
  501. package/dist/ui/hudDocument.js +220 -0
  502. package/dist/ui/hudLayout.d.ts +33 -1
  503. package/dist/ui/hudLayout.js +204 -17
  504. package/dist/ui/selectionModel.d.ts +92 -0
  505. package/dist/ui/selectionModel.js +88 -0
  506. package/dist/ui/tooltipModel.d.ts +63 -0
  507. package/dist/ui/tooltipModel.js +82 -0
  508. package/dist/ui.d.ts +15 -0
  509. package/dist/ui.js +15 -0
  510. package/dist/visibility/bounds.d.ts +8 -1
  511. package/dist/visibility/bounds.js +8 -1
  512. package/dist/visibility/frustum.d.ts +12 -3
  513. package/dist/visibility/frustum.js +12 -3
  514. package/dist/work/jobQueue.d.ts +201 -0
  515. package/dist/work/jobQueue.js +253 -0
  516. package/dist/work/unitTraining.d.ts +58 -0
  517. package/dist/work/unitTraining.js +52 -0
  518. package/dist/world/authoredObjects.d.ts +58 -0
  519. package/dist/world/authoredObjects.js +69 -0
  520. package/dist/world/buildingGenerator.d.ts +18 -0
  521. package/dist/world/buildingGenerator.js +62 -0
  522. package/dist/world/buildings.d.ts +5 -0
  523. package/dist/world/buildings.js +5 -0
  524. package/dist/world/catenary.d.ts +22 -0
  525. package/dist/world/catenary.js +69 -0
  526. package/dist/world/features.d.ts +115 -7
  527. package/dist/world/features.js +56 -5
  528. package/dist/world/footprintGrid.d.ts +59 -0
  529. package/dist/world/footprintGrid.js +141 -0
  530. package/dist/world/geometry.d.ts +64 -0
  531. package/dist/world/geometry.js +94 -0
  532. package/dist/world/grassKind.d.ts +51 -0
  533. package/dist/world/grassKind.js +101 -0
  534. package/dist/world/pathInstances.d.ts +27 -0
  535. package/dist/world/pathInstances.js +27 -0
  536. package/dist/world/pathTerrain.d.ts +80 -0
  537. package/dist/world/pathTerrain.js +142 -0
  538. package/dist/world/placeAsset.d.ts +81 -0
  539. package/dist/world/placeAsset.js +77 -0
  540. package/dist/world/placement.d.ts +4 -0
  541. package/dist/world/placement.js +4 -0
  542. package/dist/world/placementController.d.ts +6 -0
  543. package/dist/world/placementController.js +6 -0
  544. package/dist/world/polyline.d.ts +34 -0
  545. package/dist/world/polyline.js +81 -0
  546. package/dist/world/roads.d.ts +8 -0
  547. package/dist/world/roads.js +38 -0
  548. package/dist/world/scatterRegion.d.ts +164 -0
  549. package/dist/world/scatterRegion.js +409 -0
  550. package/dist/world/sceneShapes.d.ts +43 -0
  551. package/dist/world/sceneShapes.js +1 -0
  552. package/dist/world/segment.d.ts +27 -0
  553. package/dist/world/segment.js +43 -0
  554. package/dist/world/soilKind.d.ts +48 -0
  555. package/dist/world/soilKind.js +92 -0
  556. package/dist/world/spatialSample.d.ts +241 -0
  557. package/dist/world/spatialSample.js +465 -0
  558. package/dist/world/terraform.d.ts +213 -1
  559. package/dist/world/terraform.js +655 -20
  560. package/dist/world/terrain.d.ts +119 -20
  561. package/dist/world/terrain.js +247 -41
  562. package/dist/world/terrainGuides.d.ts +182 -0
  563. package/dist/world/terrainGuides.js +343 -0
  564. package/dist/world/vec2.d.ts +81 -0
  565. package/dist/world/vec2.js +128 -0
  566. package/dist/world/vec3.d.ts +49 -0
  567. package/dist/world/vec3.js +76 -0
  568. package/dist/world/vegetation.d.ts +71 -0
  569. package/dist/world/vegetation.js +151 -0
  570. package/dist/world/visibilityField.d.ts +154 -0
  571. package/dist/world/visibilityField.js +271 -0
  572. package/dist/world/volumetricClouds.d.ts +52 -0
  573. package/dist/world/volumetricClouds.js +43 -0
  574. package/dist/world/walls.d.ts +9 -0
  575. package/dist/world/walls.js +9 -0
  576. package/dist/world/waterKind.d.ts +55 -0
  577. package/dist/world/waterKind.js +99 -0
  578. package/dist/world.d.ts +132 -0
  579. package/dist/world.js +132 -0
  580. package/package.json +32 -8
  581. package/skills/jgengine/SKILL.md +51 -0
  582. package/skills/jgengine/api.md +434 -0
  583. package/skills/jgengine/capabilities.md +29 -0
  584. package/skills/jgengine/reference-cartridge.md +72 -0
  585. package/skills/jgengine-combat/SKILL.md +34 -0
  586. package/skills/jgengine-combat/api.md +549 -0
  587. package/skills/jgengine-combat/capabilities.md +169 -0
  588. package/skills/jgengine-combat/reference.md +98 -0
  589. package/skills/jgengine-gameplay/SKILL.md +39 -0
  590. package/skills/jgengine-gameplay/api.md +1794 -0
  591. package/skills/jgengine-gameplay/capabilities.md +378 -0
  592. package/skills/jgengine-gameplay/reference-systems.md +60 -0
  593. package/skills/jgengine-world/SKILL.md +38 -0
  594. package/skills/jgengine-world/api.md +2652 -0
  595. package/skills/jgengine-world/capabilities.md +370 -0
  596. package/skills/jgengine-world/reference.md +222 -0
  597. package/dist/cartridge/runtime.d.ts +0 -15
  598. package/dist/cartridge/runtime.js +0 -556
  599. package/dist/cartridge/spec.d.ts +0 -188
  600. package/dist/cartridge/spec.js +0 -19
  601. package/dist/cartridge/validate.d.ts +0 -2
  602. package/dist/cartridge/validate.js +0 -78
  603. package/dist/store/engineStore.d.ts +0 -22
  604. package/dist/store/engineStore.js +0 -50
  605. package/dist/store/features.d.ts +0 -10
  606. package/dist/store/features.js +0 -23
  607. package/llms.txt +0 -5389
@@ -19,11 +19,22 @@ export type TechCheck = {
19
19
  } | ({
20
20
  ok: false;
21
21
  } & TechRejection);
22
+ /** @internal */
22
23
  export declare function techPrerequisitesMet(state: TechState, node: TechNodeDef): boolean;
24
+ /** @internal */
23
25
  export declare function missingPrerequisites(state: TechState, node: TechNodeDef): string[];
26
+ /** @internal */
24
27
  export declare function canUnlockTech(defs: readonly TechNodeDef[], state: TechState, id: string): TechCheck;
28
+ /** @internal */
25
29
  export declare function grantTech(state: TechState, node: TechNodeDef): string[];
30
+ /**
31
+ * Research/tech nodes gated by prerequisites that unlock recipes and capabilities as they are granted.
32
+ *
33
+ * @capability tech-tree research nodes with prerequisites that unlock recipes
34
+ * @internal
35
+ */
26
36
  export declare function availableTech(defs: readonly TechNodeDef[], state: TechState): TechNodeDef[];
37
+ /** @internal */
27
38
  export declare function unlockedRecipes(defs: readonly TechNodeDef[], state: TechState): string[];
28
39
  export interface TechTree {
29
40
  has(userId: string, id: string): boolean;
@@ -37,4 +48,5 @@ export interface TechTree {
37
48
  snapshot(userId: string): string[];
38
49
  hydrate(userId: string, ids: string[]): void;
39
50
  }
51
+ /** @internal */
40
52
  export declare function createTechTree(defs?: readonly TechNodeDef[]): TechTree;
@@ -1,11 +1,14 @@
1
1
  import { createUnlocks, grantUnlock, hasUnlock, unlockTree } from "../game/unlocks.js";
2
+ /** @internal */
2
3
  export function techPrerequisitesMet(state, node) {
3
4
  const requires = node.requires ?? [];
4
5
  return requires.every((id) => hasUnlock(state, id));
5
6
  }
7
+ /** @internal */
6
8
  export function missingPrerequisites(state, node) {
7
9
  return (node.requires ?? []).filter((id) => !hasUnlock(state, id));
8
10
  }
11
+ /** @internal */
9
12
  export function canUnlockTech(defs, state, id) {
10
13
  const node = defs.find((n) => n.id === id);
11
14
  if (node === undefined)
@@ -17,15 +20,23 @@ export function canUnlockTech(defs, state, id) {
17
20
  return { ok: false, reason: "missing-prerequisites", missing };
18
21
  return { ok: true };
19
22
  }
23
+ /** @internal */
20
24
  export function grantTech(state, node) {
21
25
  let next = grantUnlock(state, node.id);
22
26
  for (const extra of node.grants ?? [])
23
27
  next = grantUnlock(next, extra);
24
28
  return next;
25
29
  }
30
+ /**
31
+ * Research/tech nodes gated by prerequisites that unlock recipes and capabilities as they are granted.
32
+ *
33
+ * @capability tech-tree research nodes with prerequisites that unlock recipes
34
+ * @internal
35
+ */
26
36
  export function availableTech(defs, state) {
27
37
  return defs.filter((node) => !hasUnlock(state, node.id) && techPrerequisitesMet(state, node));
28
38
  }
39
+ /** @internal */
29
40
  export function unlockedRecipes(defs, state) {
30
41
  const recipes = [];
31
42
  for (const node of defs) {
@@ -34,6 +45,7 @@ export function unlockedRecipes(defs, state) {
34
45
  }
35
46
  return recipes;
36
47
  }
48
+ /** @internal */
37
49
  export function createTechTree(defs = []) {
38
50
  const nodes = new Map();
39
51
  for (const def of defs)
@@ -8,9 +8,33 @@ export type ChargeResult = {
8
8
  status: "rejected";
9
9
  reason: "insufficient-funds";
10
10
  };
11
+ /**
12
+ * Opt-in debt affordance for {@link charge}/{@link chargeAll}: `true` allows the balance to go
13
+ * arbitrarily negative, a number caps how far into the red it may go (the charge is rejected once
14
+ * `balance - amount` would fall below `-max`). Omitted (the default) keeps the strict no-debt rule.
15
+ */
16
+ export type Overdraft = boolean | {
17
+ max: number;
18
+ };
19
+ /** Options for {@link charge}/{@link chargeAll}: opt one call into overdraft debt via `overdraft`. */
20
+ export interface ChargeOptions {
21
+ overdraft?: Overdraft;
22
+ }
23
+ /**
24
+ * Hold per-currency balances with affordability checks and charge/grant operations.
25
+ *
26
+ * @capability wallet hold currency balances with charge and affordability checks
27
+ */
11
28
  export declare function createEmptyWallet(): WalletState;
12
29
  export declare function balance(state: WalletState, currency: string): number;
13
30
  export declare function grant(state: WalletState, currency: string, amount: number): WalletState;
14
- export declare function charge(state: WalletState, currency: string, amount: number): ChargeResult;
31
+ /**
32
+ * Deduct `amount`, rejecting when it would leave the balance negative unless `options.overdraft`
33
+ * opts into carrying debt (`true` unlimited, `{ max }` capped) — the strict same-tick affordability
34
+ * check stays the default with `options` omitted.
35
+ */
36
+ export declare function charge(state: WalletState, currency: string, amount: number, options?: ChargeOptions): ChargeResult;
37
+ /** True once `balance(state, currency)` has gone negative under an overdraft-enabled charge. */
38
+ export declare function isOverdrawn(state: WalletState, currency: string): boolean;
15
39
  export declare function canAfford(state: WalletState, costs: Readonly<Record<string, number>>): boolean;
16
- export declare function chargeAll(state: WalletState, costs: Readonly<Record<string, number>>): ChargeResult;
40
+ export declare function chargeAll(state: WalletState, costs: Readonly<Record<string, number>>, options?: ChargeOptions): ChargeResult;
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Hold per-currency balances with affordability checks and charge/grant operations.
3
+ *
4
+ * @capability wallet hold currency balances with charge and affordability checks
5
+ */
1
6
  export function createEmptyWallet() {
2
7
  return { balances: {} };
3
8
  }
@@ -18,10 +23,25 @@ export function grant(state, currency, amount) {
18
23
  },
19
24
  };
20
25
  }
21
- export function charge(state, currency, amount) {
26
+ function withinOverdraft(nextBalance, overdraft) {
27
+ if (nextBalance >= 0)
28
+ return true;
29
+ if (overdraft === undefined || overdraft === false)
30
+ return false;
31
+ if (overdraft === true)
32
+ return true;
33
+ return nextBalance >= -overdraft.max;
34
+ }
35
+ /**
36
+ * Deduct `amount`, rejecting when it would leave the balance negative unless `options.overdraft`
37
+ * opts into carrying debt (`true` unlimited, `{ max }` capped) — the strict same-tick affordability
38
+ * check stays the default with `options` omitted.
39
+ */
40
+ export function charge(state, currency, amount, options) {
22
41
  assertValidAmount(amount);
23
42
  const current = balance(state, currency);
24
- if (current < amount) {
43
+ const next = current - amount;
44
+ if (!withinOverdraft(next, options?.overdraft)) {
25
45
  return { status: "rejected", reason: "insufficient-funds" };
26
46
  }
27
47
  return {
@@ -29,21 +49,30 @@ export function charge(state, currency, amount) {
29
49
  state: {
30
50
  balances: {
31
51
  ...state.balances,
32
- [currency]: current - amount,
52
+ [currency]: next,
33
53
  },
34
54
  },
35
55
  };
36
56
  }
57
+ /** True once `balance(state, currency)` has gone negative under an overdraft-enabled charge. */
58
+ export function isOverdrawn(state, currency) {
59
+ return balance(state, currency) < 0;
60
+ }
37
61
  export function canAfford(state, costs) {
38
62
  return Object.entries(costs).every(([currency, amount]) => balance(state, currency) >= amount);
39
63
  }
40
- export function chargeAll(state, costs) {
41
- if (!canAfford(state, costs)) {
64
+ export function chargeAll(state, costs, options) {
65
+ const overdraft = options?.overdraft;
66
+ if (overdraft === undefined && !canAfford(state, costs)) {
42
67
  return { status: "rejected", reason: "insufficient-funds" };
43
68
  }
44
69
  const balances = { ...state.balances };
45
70
  for (const [currency, amount] of Object.entries(costs)) {
46
- balances[currency] = balance(state, currency) - amount;
71
+ const next = balance(state, currency) - amount;
72
+ if (!withinOverdraft(next, overdraft)) {
73
+ return { status: "rejected", reason: "insufficient-funds" };
74
+ }
75
+ balances[currency] = next;
47
76
  }
48
77
  return { status: "ok", state: { balances } };
49
78
  }
@@ -1,4 +1,7 @@
1
- import type { EditorDocument, EditorMarker, EditorVec3, EditorVolume } from "./types.js";
1
+ import { type SurfaceDelta, type TerraformDelta, type TerrainMaterialLayer, type WeightDelta } from "../world/terraform.js";
2
+ import { type EditorUiDocument, type EditorUiPanelLayout } from "../ui/hudDocument.js";
3
+ import { type EditorGridCellEdit, type EditorGridLayer } from "./grid.js";
4
+ import type { EditorDocument, EditorMarker, EditorNote, EditorPath, EditorTerrain, EditorVec3, EditorVolume } from "./types.js";
2
5
  /** A single editor mutation — select, move, add, remove, undo/redo — dispatched to a session. */
3
6
  export type EditorCommand = {
4
7
  type: "select";
@@ -10,19 +13,64 @@ export type EditorCommand = {
10
13
  id: string;
11
14
  position?: EditorVec3;
12
15
  rotationY?: number;
16
+ } | {
17
+ type: "translate";
18
+ ids: readonly string[];
19
+ delta: EditorVec3;
20
+ } | {
21
+ type: "setParent";
22
+ ids: readonly string[];
23
+ parentId: string | null;
13
24
  } | {
14
25
  type: "addMarker";
15
26
  marker: EditorMarker;
16
27
  } | {
17
- type: "remove";
28
+ type: "addVolume";
29
+ volume: EditorVolume;
30
+ } | {
31
+ type: "addPath";
32
+ path: EditorPath;
33
+ } | {
34
+ type: "addNote";
35
+ note: EditorNote;
36
+ } | {
37
+ type: "setMarker";
18
38
  id: string;
39
+ patch: Partial<Omit<EditorMarker, "id">>;
19
40
  } | {
20
41
  type: "setVolume";
21
42
  id: string;
22
43
  patch: Partial<Omit<EditorVolume, "id">>;
23
44
  } | {
24
- type: "addVolume";
25
- volume: EditorVolume;
45
+ type: "setPath";
46
+ id: string;
47
+ patch: Partial<Omit<EditorPath, "id">>;
48
+ } | {
49
+ type: "setNote";
50
+ id: string;
51
+ patch: Partial<Omit<EditorNote, "id">>;
52
+ } | {
53
+ type: "setCatalogEntry";
54
+ catalogId: string;
55
+ entryId: string;
56
+ patch: {
57
+ label?: string;
58
+ meta?: Record<string, unknown>;
59
+ };
60
+ } | {
61
+ type: "remove";
62
+ id: string;
63
+ } | {
64
+ type: "removeMany";
65
+ ids: readonly string[];
66
+ } | {
67
+ type: "duplicate";
68
+ ids: readonly string[];
69
+ offset?: EditorVec3;
70
+ } | {
71
+ type: "addFragment";
72
+ fragment: EditorDocument;
73
+ offset?: EditorVec3;
26
74
  } | {
27
75
  type: "importDocument";
28
76
  document: EditorDocument;
@@ -32,11 +80,142 @@ export type EditorCommand = {
32
80
  } | {
33
81
  type: "replaceDocument";
34
82
  document: EditorDocument;
83
+ } | {
84
+ type: "setTerrain";
85
+ terrain: EditorTerrain;
86
+ } | {
87
+ type: "sculptTerrain";
88
+ delta: TerraformDelta;
89
+ } | {
90
+ type: "paintTerrain";
91
+ delta: SurfaceDelta;
92
+ } | {
93
+ type: "setTerrainLayers";
94
+ layers: readonly TerrainMaterialLayer[];
95
+ } | {
96
+ type: "blendTerrain";
97
+ delta: WeightDelta;
98
+ } | {
99
+ type: "clearTerrain";
100
+ } | {
101
+ type: "convertScatterToObjects";
102
+ pathId: string;
103
+ markers: readonly EditorMarker[];
104
+ } | {
105
+ type: "createPrefab";
106
+ id: string;
107
+ name: string;
108
+ ids: readonly string[];
109
+ } | {
110
+ type: "insertPrefab";
111
+ prefabId: string;
112
+ at: EditorVec3;
113
+ instanceId?: string;
114
+ } | {
115
+ type: "detachPrefabInstance";
116
+ instanceId: string;
117
+ } | {
118
+ type: "deletePrefab";
119
+ prefabId: string;
120
+ } | {
121
+ type: "createCollection";
122
+ id: string;
123
+ name: string;
124
+ memberIds?: readonly string[];
125
+ } | {
126
+ type: "renameCollection";
127
+ id: string;
128
+ name: string;
129
+ } | {
130
+ type: "deleteCollection";
131
+ id: string;
132
+ } | {
133
+ type: "setCollectionMembers";
134
+ id: string;
135
+ memberIds: readonly string[];
136
+ } | {
137
+ type: "addToCollection";
138
+ id: string;
139
+ ids: readonly string[];
140
+ } | {
141
+ type: "removeFromCollection";
142
+ id: string;
143
+ ids: readonly string[];
144
+ } | {
145
+ type: "setCollectionFlags";
146
+ id: string;
147
+ patch: {
148
+ color?: string;
149
+ locked?: boolean;
150
+ visible?: boolean;
151
+ };
152
+ } | {
153
+ type: "selectCollection";
154
+ id: string;
155
+ } | {
156
+ type: "batchSetProperties";
157
+ ids: readonly string[];
158
+ patch: {
159
+ color?: string;
160
+ label?: string;
161
+ meta?: Record<string, unknown>;
162
+ };
163
+ } | {
164
+ type: "assignMaterial";
165
+ ids: readonly string[];
166
+ materialId: string;
167
+ } | {
168
+ type: "addGridLayer";
169
+ layer: EditorGridLayer;
170
+ } | {
171
+ type: "removeGridLayer";
172
+ id: string;
173
+ } | {
174
+ type: "setGridLayer";
175
+ id: string;
176
+ patch: Partial<Omit<EditorGridLayer, "id" | "cells">>;
177
+ } | {
178
+ type: "paintGridCells";
179
+ id: string;
180
+ cells: readonly EditorGridCellEdit[];
181
+ } | {
182
+ type: "fillGridRect";
183
+ id: string;
184
+ col0: number;
185
+ row0: number;
186
+ col1: number;
187
+ row1: number;
188
+ value: string;
189
+ } | {
190
+ type: "floodFillGrid";
191
+ id: string;
192
+ col: number;
193
+ row: number;
194
+ value: string;
195
+ } | {
196
+ type: "resizeGridLayer";
197
+ id: string;
198
+ cols: number;
199
+ rows: number;
200
+ } | {
201
+ type: "setUiPanel";
202
+ id: string;
203
+ patch: Partial<EditorUiPanelLayout>;
204
+ } | {
205
+ type: "removeUiPanel";
206
+ id: string;
207
+ } | {
208
+ type: "setUi";
209
+ ui: EditorUiDocument | undefined;
35
210
  } | {
36
211
  type: "undo";
37
212
  } | {
38
213
  type: "redo";
39
214
  };
215
+ /** Per-dispatch options; `coalesce` merges consecutive same-key edits into one undo step. */
216
+ export interface EditorDispatchOptions {
217
+ coalesce?: string;
218
+ }
40
219
  /** The document plus current selection at a point in editor history. */
41
220
  export interface EditorSessionState {
42
221
  document: EditorDocument;
@@ -46,14 +225,18 @@ export interface EditorSessionState {
46
225
  export interface EditorSession {
47
226
  getState(): EditorSessionState;
48
227
  subscribe(listener: (state: EditorSessionState) => void): () => void;
49
- dispatch(command: EditorCommand): EditorSessionState;
228
+ dispatch(command: EditorCommand, options?: EditorDispatchOptions): EditorSessionState;
50
229
  exportJson(pretty?: boolean): string;
51
230
  canUndo(): boolean;
52
231
  canRedo(): boolean;
53
232
  }
54
- /** Creates an editor session with undo/redo history seeded from an initial document. */
233
+ /** Creates an editor session with undo/redo history seeded from an initial document.
234
+ * @internal
235
+ */
55
236
  export declare function createEditorSession(initial: EditorDocument, historyLimit?: number): EditorSession;
56
- /** Compact snapshot of a session state — counts, selection, and the selected object. */
237
+ /** Compact snapshot of a session state — counts, selection, and the selected object.
238
+ * @internal
239
+ */
57
240
  export declare function summarizeEditorSession(state: EditorSessionState): {
58
241
  markers: number;
59
242
  volumes: number;