@archivist-gg/dnd5e 0.3.19 → 0.3.26

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 (441) hide show
  1. package/LICENSE +48 -21
  2. package/README.md +26 -48
  3. package/dist/armor/armor.codec.d.ts +0 -7
  4. package/dist/armor/armor.codec.js +1 -9
  5. package/dist/armor/armor.parser.js +1 -8
  6. package/dist/armor/armor.schema.js +1 -7
  7. package/dist/armor/armor.types.d.ts +0 -3
  8. package/dist/background/background.codec.d.ts +0 -6
  9. package/dist/background/background.codec.js +1 -12
  10. package/dist/background/background.parser.js +1 -11
  11. package/dist/background/background.schema.js +1 -12
  12. package/dist/background/background.types.d.ts +0 -5
  13. package/dist/chunk-2EOGK6R6.js +1 -0
  14. package/dist/chunk-2HRRH3WL.js +1 -0
  15. package/dist/chunk-2NUDWOFG.js +1 -0
  16. package/dist/chunk-3LWOVRLA.js +1 -0
  17. package/dist/chunk-3QQOATV3.js +1 -0
  18. package/dist/chunk-4E2GIWJE.js +1 -0
  19. package/dist/chunk-4GN3GYMP.js +1 -0
  20. package/dist/chunk-4IAMSRHD.js +1 -0
  21. package/dist/chunk-4JEF3CET.js +1 -0
  22. package/dist/chunk-4KVVAENP.js +1 -0
  23. package/dist/chunk-4SYAKWY4.js +1 -0
  24. package/dist/chunk-56JK6VCL.js +1 -0
  25. package/dist/chunk-5XDCM6YK.js +1 -0
  26. package/dist/chunk-63YJPWTM.js +1 -0
  27. package/dist/chunk-6R46KYGU.js +1 -0
  28. package/dist/chunk-6W253VHH.js +1 -0
  29. package/dist/chunk-72PRMZRD.js +1 -0
  30. package/dist/chunk-757KM22B.js +1 -0
  31. package/dist/chunk-7EL3GWWJ.js +1 -0
  32. package/dist/chunk-7FPQJDFD.js +1 -0
  33. package/dist/chunk-AINRPPLH.js +1 -0
  34. package/dist/chunk-BC52J4LA.js +1 -0
  35. package/dist/chunk-BCXGB4HP.js +1 -0
  36. package/dist/chunk-BREHZNTL.js +1 -0
  37. package/dist/chunk-BZ6BGGZS.js +1 -0
  38. package/dist/chunk-CAPYNIGK.js +1 -0
  39. package/dist/chunk-CCAVZANF.js +1 -0
  40. package/dist/chunk-CCFIINBA.js +1 -0
  41. package/dist/chunk-CEHL7PPC.js +1 -0
  42. package/dist/chunk-CMIEZQL4.js +1 -0
  43. package/dist/chunk-CNMHADNV.js +1 -0
  44. package/dist/chunk-CSTAQQGX.js +1 -0
  45. package/dist/chunk-DTB7YBMZ.js +1 -0
  46. package/dist/chunk-DVUXUIPV.js +1 -0
  47. package/dist/chunk-DZITM5AG.js +1 -0
  48. package/dist/chunk-E3MS4M3N.js +1 -0
  49. package/dist/chunk-E7KFJLDR.js +1 -0
  50. package/dist/chunk-EAARMPCW.js +1 -0
  51. package/dist/chunk-EPA24PVZ.js +1 -0
  52. package/dist/chunk-ETDMOGFO.js +1 -0
  53. package/dist/chunk-EVT7MGAC.js +1 -0
  54. package/dist/chunk-FOLHTMSC.js +1 -0
  55. package/dist/chunk-GCYUCIDN.js +1 -0
  56. package/dist/chunk-GD7WRCNH.js +1 -0
  57. package/dist/chunk-GGQDQSIF.js +1 -0
  58. package/dist/chunk-GIQLIBC7.js +1 -0
  59. package/dist/chunk-HX7WBOKR.js +1 -0
  60. package/dist/chunk-I26FHSI6.js +1 -0
  61. package/dist/chunk-IHPLT2ZT.js +1 -0
  62. package/dist/chunk-J3RP5C7L.js +1 -0
  63. package/dist/chunk-J5GL6FLP.js +1 -0
  64. package/dist/chunk-JXDX2DKF.js +1 -0
  65. package/dist/chunk-KEXSF3CH.js +1 -0
  66. package/dist/chunk-KM75CC6Q.js +1 -0
  67. package/dist/chunk-L2DXF7YS.js +1 -0
  68. package/dist/chunk-LHH5XSEA.js +1 -0
  69. package/dist/chunk-LJNT3PJP.js +1 -0
  70. package/dist/chunk-LR6UMA5V.js +1 -0
  71. package/dist/chunk-M6RPOLKS.js +1 -0
  72. package/dist/chunk-MGGKZGLG.js +1 -0
  73. package/dist/chunk-NEMX7QGG.js +1 -0
  74. package/dist/chunk-NIWLD33X.js +1 -0
  75. package/dist/chunk-NU2Z7MTS.js +1 -0
  76. package/dist/chunk-NYPH7RQN.js +1 -0
  77. package/dist/chunk-NYTR6NJS.js +1 -0
  78. package/dist/chunk-O2QZ73GA.js +1 -0
  79. package/dist/chunk-O776WL7O.js +1 -0
  80. package/dist/chunk-ONCXJMJM.js +1 -0
  81. package/dist/chunk-OTRH62HY.js +1 -0
  82. package/dist/chunk-PFQPP77Q.js +1 -0
  83. package/dist/chunk-PKIMOVQG.js +1 -0
  84. package/dist/chunk-PZ3ZZ5H5.js +1 -0
  85. package/dist/chunk-PZ4L2EEG.js +1 -0
  86. package/dist/chunk-QMEKQTUT.js +1 -0
  87. package/dist/chunk-QVWT67WA.js +1 -0
  88. package/dist/chunk-RE5Z5RNK.js +1 -0
  89. package/dist/chunk-RHIEOYDX.js +1 -0
  90. package/dist/chunk-RQZCGXUZ.js +1 -0
  91. package/dist/chunk-S5UCI27C.js +1 -0
  92. package/dist/chunk-SEOASDO4.js +1 -0
  93. package/dist/chunk-SFK57JAA.js +1 -0
  94. package/dist/chunk-SU4MEZ5P.js +1 -0
  95. package/dist/chunk-T55DELVL.js +1 -0
  96. package/dist/chunk-TKIEPC6F.js +1 -0
  97. package/dist/chunk-UBUKCRZ3.js +1 -0
  98. package/dist/chunk-VA3ZWV7C.js +1 -0
  99. package/dist/chunk-VIP3FH2O.js +1 -0
  100. package/dist/chunk-VTQ4RWEG.js +1 -0
  101. package/dist/chunk-VVJXZZ4Z.js +1 -0
  102. package/dist/chunk-WAUNLUFQ.js +1 -0
  103. package/dist/chunk-X22SISGM.js +1 -0
  104. package/dist/chunk-XKJXT2PN.js +1 -0
  105. package/dist/chunk-XPF53K54.js +1 -0
  106. package/dist/chunk-YGH7S5ZF.js +1 -0
  107. package/dist/chunk-ZE46ADXS.js +1 -0
  108. package/dist/chunk-ZI3FEUX3.js +1 -0
  109. package/dist/chunk-ZS5BMNXC.js +1 -0
  110. package/dist/chunk-ZVL5FXXO.js +1 -0
  111. package/dist/class/class.codec.d.ts +0 -7
  112. package/dist/class/class.codec.js +1 -18
  113. package/dist/class/class.parser.js +1 -17
  114. package/dist/class/class.schema.d.ts +4 -3
  115. package/dist/class/class.schema.js +1 -15
  116. package/dist/class/class.slug.d.ts +0 -11
  117. package/dist/class/class.slug.js +1 -8
  118. package/dist/class/class.standard-array.d.ts +0 -7
  119. package/dist/class/class.standard-array.js +1 -20
  120. package/dist/class/class.types.d.ts +0 -20
  121. package/dist/condition/condition.codec.d.ts +0 -6
  122. package/dist/condition/condition.parser.d.ts +0 -10
  123. package/dist/condition/condition.parser.js +1 -7
  124. package/dist/condition/condition.schema.d.ts +0 -16
  125. package/dist/condition/condition.types.d.ts +0 -3
  126. package/dist/data-srd/index.generated.js +1 -146
  127. package/dist/dnd/amount-text.d.ts +3 -30
  128. package/dist/dnd/amount-text.js +1 -15
  129. package/dist/dnd/constants.d.ts +0 -18
  130. package/dist/dnd/constants.js +1 -42
  131. package/dist/dnd/formula-tags.d.ts +0 -2
  132. package/dist/dnd/formula-tags.js +1 -119
  133. package/dist/dnd/math.d.ts +0 -26
  134. package/dist/dnd/math.js +1 -45
  135. package/dist/dnd/prose-tags.d.ts +1 -15
  136. package/dist/dnd/prose-tags.js +1 -18
  137. package/dist/dnd/resource-die.d.ts +0 -4
  138. package/dist/dnd/resource-die.js +1 -17
  139. package/dist/dnd/resource-formula.d.ts +0 -43
  140. package/dist/dnd/resource-formula.js +1 -14
  141. package/dist/dnd/resource-words.d.ts +0 -2
  142. package/dist/dnd/resource-words.js +1 -30
  143. package/dist/dnd/srd-tag-converter.d.ts +0 -21
  144. package/dist/dnd/srd-tag-converter.js +1 -12
  145. package/dist/dnd/tag-grammar.js +1 -12
  146. package/dist/dnd/warn-once.js +1 -8
  147. package/dist/encounter/encounter.ai-schema.js +1 -8
  148. package/dist/entities/base-item-resolver.d.ts +0 -26
  149. package/dist/entities/base-item-resolver.js +1 -11
  150. package/dist/entities/registry-revision.d.ts +0 -15
  151. package/dist/entities/registry-revision.js +1 -10
  152. package/dist/entities/slug.d.ts +1 -31
  153. package/dist/entities/slug.js +1 -12
  154. package/dist/entities/wikilink-display.d.ts +0 -2
  155. package/dist/entities/wikilink-display.js +1 -10
  156. package/dist/feat/feat.category-codes.d.ts +1 -26
  157. package/dist/feat/feat.category-codes.js +1 -14
  158. package/dist/feat/feat.codec.d.ts +0 -6
  159. package/dist/feat/feat.codec.js +1 -12
  160. package/dist/feat/feat.parser.js +1 -11
  161. package/dist/feat/feat.schema.d.ts +46 -4
  162. package/dist/feat/feat.schema.js +1 -10
  163. package/dist/feat/feat.types.d.ts +0 -6
  164. package/dist/index.js +45 -141495
  165. package/dist/inline-tag-parser.js +1 -6
  166. package/dist/item/item.actions-map.d.ts +4 -63
  167. package/dist/item/item.actions-map.js +1 -10
  168. package/dist/item/item.ai-schema.js +1 -6
  169. package/dist/item/item.attunement.d.ts +0 -14
  170. package/dist/item/item.attunement.js +1 -6
  171. package/dist/item/item.bonuses.js +1 -10
  172. package/dist/item/item.codec.js +1 -9
  173. package/dist/item/item.conditions.d.ts +0 -7
  174. package/dist/item/item.conditions.js +1 -11
  175. package/dist/item/item.conditions.types.d.ts +0 -2
  176. package/dist/item/item.cost.js +1 -29
  177. package/dist/item/item.enrichment.js +1 -9
  178. package/dist/item/item.icon.d.ts +0 -8
  179. package/dist/item/item.icon.js +1 -211
  180. package/dist/item/item.parser.js +1 -8
  181. package/dist/item/item.schema.d.ts +5 -0
  182. package/dist/item/item.schema.js +1 -11
  183. package/dist/item/item.types.d.ts +5 -28
  184. package/dist/monster/monster.ai-schema.js +1 -6
  185. package/dist/monster/monster.codec.d.ts +0 -10
  186. package/dist/monster/monster.enrichment.js +1 -19
  187. package/dist/monster/monster.format.d.ts +0 -69
  188. package/dist/monster/monster.format.js +1 -78
  189. package/dist/monster/monster.parser.d.ts +0 -4
  190. package/dist/monster/monster.parser.js +1 -15
  191. package/dist/monster/monster.resolve.d.ts +0 -4
  192. package/dist/monster/monster.schema.d.ts +0 -9
  193. package/dist/monster/monster.schema.js +1 -34
  194. package/dist/monster/monster.types.d.ts +0 -3
  195. package/dist/monster/monster.types.js +1 -1
  196. package/dist/optional-feature/optional-feature.codec.d.ts +0 -11
  197. package/dist/optional-feature/optional-feature.codec.js +1 -13
  198. package/dist/optional-feature/optional-feature.parser.js +1 -12
  199. package/dist/optional-feature/optional-feature.schema.d.ts +44 -3
  200. package/dist/optional-feature/optional-feature.schema.js +1 -15
  201. package/dist/pack.d.ts +0 -9
  202. package/dist/pc/conditions.constants.js +1 -6
  203. package/dist/pc/decision-recognizer.js +1 -8
  204. package/dist/pc/pc.additional-spells.d.ts +0 -24
  205. package/dist/pc/pc.additional-spells.js +1 -26
  206. package/dist/pc/pc.amount-bindings.d.ts +3 -28
  207. package/dist/pc/pc.amount-bindings.js +1 -28
  208. package/dist/pc/pc.asi-flatten.d.ts +0 -59
  209. package/dist/pc/pc.asi-flatten.js +1 -16
  210. package/dist/pc/pc.conditions.d.ts +1 -0
  211. package/dist/pc/pc.conditions.js +1 -6
  212. package/dist/pc/pc.containment.d.ts +0 -5
  213. package/dist/pc/pc.containment.js +1 -24
  214. package/dist/pc/pc.decision-engine.d.ts +6 -145
  215. package/dist/pc/pc.decision-engine.js +1 -55
  216. package/dist/pc/pc.defense-normalize.d.ts +0 -10
  217. package/dist/pc/pc.defense-normalize.js +1 -6
  218. package/dist/pc/pc.entry-overrides.d.ts +19 -58
  219. package/dist/pc/pc.entry-overrides.js +1 -41
  220. package/dist/pc/pc.equipment.d.ts +2 -22
  221. package/dist/pc/pc.equipment.js +1 -34
  222. package/dist/pc/pc.feature-effects.d.ts +27 -281
  223. package/dist/pc/pc.feature-effects.js +1 -39
  224. package/dist/pc/pc.formula-context.js +1 -11
  225. package/dist/pc/pc.infusions.d.ts +0 -65
  226. package/dist/pc/pc.infusions.js +1 -65
  227. package/dist/pc/pc.item-effects.d.ts +19 -0
  228. package/dist/pc/pc.item-effects.js +1 -0
  229. package/dist/pc/pc.member-choices.d.ts +3 -66
  230. package/dist/pc/pc.member-choices.js +1 -39
  231. package/dist/pc/pc.parser.js +1 -58
  232. package/dist/pc/pc.pools.d.ts +7 -10
  233. package/dist/pc/pc.pools.js +1 -27
  234. package/dist/pc/pc.proficiencies.d.ts +0 -40
  235. package/dist/pc/pc.proficiencies.js +1 -156
  236. package/dist/pc/pc.proficiency-grants.d.ts +3 -27
  237. package/dist/pc/pc.proficiency-normalize.d.ts +0 -35
  238. package/dist/pc/pc.proficiency-normalize.js +1 -18
  239. package/dist/pc/pc.proficiency-query.d.ts +0 -13
  240. package/dist/pc/pc.proficiency-query.js +1 -27
  241. package/dist/pc/pc.recalc.d.ts +8 -131
  242. package/dist/pc/pc.recalc.js +1 -1042
  243. package/dist/pc/pc.resolver.d.ts +9 -107
  244. package/dist/pc/pc.resolver.js +1 -60
  245. package/dist/pc/pc.resource-seed.d.ts +0 -8
  246. package/dist/pc/pc.resource-seed.js +1 -42
  247. package/dist/pc/pc.resources.d.ts +1 -59
  248. package/dist/pc/pc.resources.js +1 -23
  249. package/dist/pc/pc.rest.d.ts +1 -20
  250. package/dist/pc/pc.rest.js +1 -231
  251. package/dist/pc/pc.schema.d.ts +20 -2
  252. package/dist/pc/pc.schema.js +1 -9
  253. package/dist/pc/pc.slotting.d.ts +0 -29
  254. package/dist/pc/pc.slotting.js +1 -28
  255. package/dist/pc/pc.speeds.d.ts +36 -0
  256. package/dist/pc/pc.spell-scope.d.ts +0 -16
  257. package/dist/pc/pc.spellcasting.d.ts +0 -70
  258. package/dist/pc/pc.spellcasting.js +1 -28
  259. package/dist/pc/pc.table-column.d.ts +3 -22
  260. package/dist/pc/pc.table-column.js +1 -18
  261. package/dist/pc/pc.tool-picks.d.ts +0 -27
  262. package/dist/pc/pc.tool-picks.js +1 -18
  263. package/dist/pc/pc.types.d.ts +59 -374
  264. package/dist/pc/pc.weapon-grant.d.ts +0 -6
  265. package/dist/pc/pool-layout.d.ts +0 -39
  266. package/dist/pc/pool-layout.js +1 -18
  267. package/dist/pc/resource-equivalents.d.ts +2 -40
  268. package/dist/pc/roll-scope.js +1 -8
  269. package/dist/pc/roll-tag-labels.d.ts +0 -32
  270. package/dist/pc/roll-tag-labels.js +1 -17
  271. package/dist/pc/spell-source.d.ts +0 -11
  272. package/dist/pc/spell-source.js +1 -8
  273. package/dist/race/race.codec.d.ts +0 -6
  274. package/dist/race/race.codec.js +1 -15
  275. package/dist/race/race.parser.js +1 -14
  276. package/dist/race/race.schema.d.ts +0 -8
  277. package/dist/race/race.schema.js +1 -14
  278. package/dist/race/race.structural.d.ts +0 -6
  279. package/dist/race/race.structural.js +1 -6
  280. package/dist/race/race.types.d.ts +0 -8
  281. package/dist/schemas/attack-schema.d.ts +5 -0
  282. package/dist/schemas/caster-type-schema.d.ts +1 -6
  283. package/dist/schemas/caster-type-schema.js +1 -6
  284. package/dist/schemas/choice-schema.js +1 -7
  285. package/dist/schemas/duration-schema.d.ts +0 -2
  286. package/dist/schemas/duration-schema.js +1 -6
  287. package/dist/schemas/entity-extras-schema.d.ts +0 -30
  288. package/dist/schemas/entity-extras-schema.js +1 -10
  289. package/dist/schemas/equipment-grant-schema.d.ts +0 -2
  290. package/dist/schemas/equipment-grant-schema.js +1 -12
  291. package/dist/schemas/feature-alias.d.ts +0 -27
  292. package/dist/schemas/feature-effect-schema.d.ts +44 -3
  293. package/dist/schemas/feature-effect-schema.js +1 -6
  294. package/dist/schemas/feature-schema.d.ts +0 -6
  295. package/dist/schemas/feature-schema.js +1 -12
  296. package/dist/schemas/resource-schema.d.ts +1 -34
  297. package/dist/schemas/resource-schema.js +1 -12
  298. package/dist/schemas/selection-pool-schema.js +1 -10
  299. package/dist/spell/casting-time.d.ts +0 -15
  300. package/dist/spell/casting-time.js +1 -6
  301. package/dist/spell/spell.access.d.ts +0 -6
  302. package/dist/spell/spell.access.js +1 -45
  303. package/dist/spell/spell.ai-schema.js +1 -6
  304. package/dist/spell/spell.codec.js +1 -9
  305. package/dist/spell/spell.enrichment.js +1 -9
  306. package/dist/spell/spell.filter.d.ts +0 -5
  307. package/dist/spell/spell.filter.js +1 -75
  308. package/dist/spell/spell.parser.d.ts +0 -31
  309. package/dist/spell/spell.parser.js +1 -16
  310. package/dist/spell/spell.scaling.d.ts +0 -46
  311. package/dist/spell/spell.scaling.js +1 -79
  312. package/dist/spell/spell.schema.js +1 -7
  313. package/dist/spell/spell.types.d.ts +0 -7
  314. package/dist/srd/retired-items.d.ts +0 -4
  315. package/dist/srd/retired-items.js +1 -11
  316. package/dist/srd-store.d.ts +0 -33
  317. package/dist/subclass/subclass.codec.d.ts +0 -8
  318. package/dist/subclass/subclass.codec.js +1 -17
  319. package/dist/subclass/subclass.parser.js +1 -16
  320. package/dist/subclass/subclass.schema.d.ts +2 -1
  321. package/dist/subclass/subclass.schema.js +1 -14
  322. package/dist/subclass/subclass.types.d.ts +0 -3
  323. package/dist/types/attack.d.ts +2 -0
  324. package/dist/types/casting-option.d.ts +0 -4
  325. package/dist/types/choice.d.ts +1 -72
  326. package/dist/types/choice.js +1 -24
  327. package/dist/types/edition.d.ts +0 -3
  328. package/dist/types/equipment-grant.d.ts +1 -27
  329. package/dist/types/equipment-grant.js +1 -12
  330. package/dist/types/feature-effect.d.ts +11 -23
  331. package/dist/types/feature.d.ts +0 -22
  332. package/dist/types/optional-feature.types.d.ts +1 -31
  333. package/dist/types/resource.d.ts +1 -21
  334. package/dist/types/selection-pool.d.ts +0 -24
  335. package/dist/weapon/weapon-mastery.d.ts +0 -1
  336. package/dist/weapon/weapon.classify.d.ts +0 -11
  337. package/dist/weapon/weapon.classify.js +1 -7
  338. package/dist/weapon/weapon.codec.d.ts +0 -9
  339. package/dist/weapon/weapon.codec.js +1 -9
  340. package/dist/weapon/weapon.parser.js +1 -8
  341. package/dist/weapon/weapon.schema.js +1 -7
  342. package/dist/weapon/weapon.types.d.ts +0 -3
  343. package/package.json +3 -3
  344. package/src/data-srd/ATTRIBUTION.md +1 -1
  345. package/dist/chunk-2FRUSVZS.js +0 -489
  346. package/dist/chunk-2LULMQTF.js +0 -14
  347. package/dist/chunk-3LWMFYKS.js +0 -57
  348. package/dist/chunk-3SFGWFVQ.js +0 -19
  349. package/dist/chunk-3SIUAFDQ.js +0 -18
  350. package/dist/chunk-3TM34RSJ.js +0 -23
  351. package/dist/chunk-4J6DS3EJ.js +0 -30
  352. package/dist/chunk-4U55VNC7.js +0 -22
  353. package/dist/chunk-5GKJAUMX.js +0 -59
  354. package/dist/chunk-5JXFJ5AU.js +0 -26
  355. package/dist/chunk-64VNLMSG.js +0 -375
  356. package/dist/chunk-656QCX4U.js +0 -22
  357. package/dist/chunk-6GNXYAYP.js +0 -25
  358. package/dist/chunk-6PXTNCBP.js +0 -133
  359. package/dist/chunk-6X2NV665.js +0 -33
  360. package/dist/chunk-7Q2VPKCD.js +0 -181
  361. package/dist/chunk-7XJHI5H5.js +0 -709
  362. package/dist/chunk-A54HHCWW.js +0 -67
  363. package/dist/chunk-B2QHP6UF.js +0 -159
  364. package/dist/chunk-B3DP42OM.js +0 -55
  365. package/dist/chunk-BJGOSM76.js +0 -18
  366. package/dist/chunk-BJWSOQUC.js +0 -133
  367. package/dist/chunk-CJYCVNW2.js +0 -7
  368. package/dist/chunk-CM5CWO4K.js +0 -735
  369. package/dist/chunk-DEEHHLAP.js +0 -271
  370. package/dist/chunk-DPUJDOKV.js +0 -365
  371. package/dist/chunk-EJD47JHL.js +0 -1838
  372. package/dist/chunk-EJP263OP.js +0 -186
  373. package/dist/chunk-EVMUJYUD.js +0 -195
  374. package/dist/chunk-EYX4JMAU.js +0 -101
  375. package/dist/chunk-FC4IGH5Y.js +0 -18
  376. package/dist/chunk-FJYBLXV7.js +0 -89
  377. package/dist/chunk-FMUD3LDV.js +0 -19
  378. package/dist/chunk-FMYWORTP.js +0 -93
  379. package/dist/chunk-FVXLP7P3.js +0 -18
  380. package/dist/chunk-G6MHJDVT.js +0 -41
  381. package/dist/chunk-GVWEFECG.js +0 -18
  382. package/dist/chunk-HHBD4SQ6.js +0 -24
  383. package/dist/chunk-HS6FIOLP.js +0 -52
  384. package/dist/chunk-HY2SRSVM.js +0 -23
  385. package/dist/chunk-IHE6KVC3.js +0 -13
  386. package/dist/chunk-IN4M4X7P.js +0 -34
  387. package/dist/chunk-IUAAXXNO.js +0 -58
  388. package/dist/chunk-JXWNXIIZ.js +0 -219
  389. package/dist/chunk-K5NJBTE2.js +0 -18
  390. package/dist/chunk-KR6JF3BF.js +0 -14
  391. package/dist/chunk-KSTV7J2U.js +0 -112
  392. package/dist/chunk-KU3YLF6D.js +0 -106
  393. package/dist/chunk-LBEXLN6I.js +0 -91
  394. package/dist/chunk-LHZXYFBU.js +0 -94
  395. package/dist/chunk-LICYHPI3.js +0 -237
  396. package/dist/chunk-LNT64X7C.js +0 -81
  397. package/dist/chunk-LSLSG67V.js +0 -31
  398. package/dist/chunk-LVQLWRCU.js +0 -15
  399. package/dist/chunk-MYY2C5MB.js +0 -233
  400. package/dist/chunk-NKZMQV2C.js +0 -19
  401. package/dist/chunk-NTU2DXNG.js +0 -355
  402. package/dist/chunk-NXUY5XQN.js +0 -1062
  403. package/dist/chunk-NZO7M5GV.js +0 -18
  404. package/dist/chunk-OOL4KMG2.js +0 -71
  405. package/dist/chunk-OOSRUJBI.js +0 -19
  406. package/dist/chunk-PDJSUH24.js +0 -110
  407. package/dist/chunk-PTXBIDG7.js +0 -63
  408. package/dist/chunk-PVCEA4HZ.js +0 -6
  409. package/dist/chunk-QA3YCOML.js +0 -101
  410. package/dist/chunk-QFWQKS3M.js +0 -110
  411. package/dist/chunk-QS5L5YTJ.js +0 -24
  412. package/dist/chunk-QYZV2MQA.js +0 -97
  413. package/dist/chunk-RD2MID3M.js +0 -292
  414. package/dist/chunk-S3YUXDSC.js +0 -278
  415. package/dist/chunk-S7REMWW4.js +0 -21
  416. package/dist/chunk-TOM66P2P.js +0 -38
  417. package/dist/chunk-TRBGC4ZG.js +0 -112
  418. package/dist/chunk-UA5KS2PL.js +0 -26
  419. package/dist/chunk-UJCK5IW4.js +0 -187
  420. package/dist/chunk-UNYR5GLI.js +0 -23
  421. package/dist/chunk-UZXG6QSY.js +0 -58
  422. package/dist/chunk-VN5DLURA.js +0 -158
  423. package/dist/chunk-VP5TIXDK.js +0 -178
  424. package/dist/chunk-VPYBK2MG.js +0 -18
  425. package/dist/chunk-VTTA2ALZ.js +0 -16
  426. package/dist/chunk-W6GC6OKK.js +0 -16
  427. package/dist/chunk-WELIKLZF.js +0 -256
  428. package/dist/chunk-WOHX7YTH.js +0 -165
  429. package/dist/chunk-WSVMLNTO.js +0 -31
  430. package/dist/chunk-WYGD2UGN.js +0 -14
  431. package/dist/chunk-XCFC7LGF.js +0 -122
  432. package/dist/chunk-XJ2F2WO6.js +0 -8
  433. package/dist/chunk-XTEFPUSN.js +0 -23
  434. package/dist/chunk-YBLDE5CG.js +0 -42
  435. package/dist/chunk-YDGMBMYI.js +0 -25
  436. package/dist/chunk-YHYTW5QA.js +0 -20
  437. package/dist/chunk-ZCTUYGNV.js +0 -26
  438. package/dist/chunk-ZDAEGJH4.js +0 -102
  439. package/dist/chunk-ZJXSXVFP.js +0 -58
  440. package/dist/chunk-ZOWKWMD2.js +0 -18
  441. package/dist/chunk-ZUQW5VBZ.js +0 -89
@@ -1,41 +1,16 @@
1
- /**
2
- * D2b-A · the numbers an amount resolves against (design §1.2 A). The modifier and the save DC are those of the class
3
- * that OWNS the feature or grants the spell (multiclass: the granting class, user ruling 2026-09-27).
4
- */
5
1
  import type { Ability } from "@archivist-gg/dnd5e/types/choice";
6
2
  import type { Spell } from "@archivist-gg/dnd5e/spell/spell.types";
7
3
  import { type AmountBindings } from "@archivist-gg/dnd5e/dnd/amount-text";
8
4
  import type { DerivedStats, FeatureSource, ResolvedCharacter, ResolvedSpell, SpellDamageRider } from "./pc.types.js";
9
- /** The derived fields the bindings read (recalc builds them before its return; the sheet passes `ctx.derived`). */
10
5
  export type AmountDerived = Pick<DerivedStats, "proficiencyBonus" | "mods" | "spellcastingClasses"> & Partial<Pick<DerivedStats, "abilitySpellcasting">>;
11
- /** The class slug that owns `source`: a class by its slug, a subclass by the class that holds it, a feat through the
12
- * slot it was taken at (`via`), a pool member through its pool's class. Null for race, background and campaign. */
13
6
  export declare function ownerClassSlug(source: FeatureSource | undefined, resolved: Pick<ResolvedCharacter, "classes">): string | null;
14
- /** The bindings an amount owned by `owner` resolves against: `class_level` is the OWNING class's level (the total level
15
- * for a race, background or unowned source), `spell_mod` / `spell_dc` come from that class's spellcasting row, else
16
- * the first caster's, else they stay unbound (the amount prints its words or a label). */
17
7
  export declare function amountBindingsFor(owner: FeatureSource | undefined, resolved: Pick<ResolvedCharacter, "classes" | "totalLevel">, derived: AmountDerived): AmountBindings;
18
- /** How a spell is cast: its ability, save DC and attack bonus. A grant that carries its OWN ability (a feat's chosen
19
- * ability, a race grant, a class-less row) reads `abilitySpellcasting`; every other spell reads its class's row, else
20
- * the first caster's. The one lookup the Spells tab's DC, attack and effect cells share. */
21
- export declare function spellcastingFor(spell: Pick<ResolvedSpell, "source" | "classSlug" | "ability">, derived: AmountDerived): {
22
- ability: Ability;
8
+ export declare function spellcastingFor(spell: Pick<ResolvedSpell, "source" | "classSlug" | "ability" | "itemCasting">, derived: AmountDerived): {
9
+ ability: Ability | null;
23
10
  saveDC: number;
24
11
  attackBonus: number;
25
12
  } | null;
26
- /** The bindings a spell's effect resolves against: its caster's modifier and save DC (see {@link spellcastingFor}). */
27
- export declare function spellAmountBindings(spell: Pick<ResolvedSpell, "source" | "classSlug" | "ability">, resolved: Pick<ResolvedCharacter, "classes" | "totalLevel">, derived: AmountDerived): AmountBindings;
28
- /** What a spell adds to its base roll ONCE, in token form: `{spell_mod}` when its text reads "<the base roll> plus (or
29
- * +) your spellcasting (ability) modifier" (35 vault notes: Healing Word, Cure Wounds, Spiritual Weapon, ...), else
30
- * null. Read from the note's own words at read time; the roll must be the one the phrase follows, so a spell whose
31
- * modifier rides a different roll (a heal beside a damage roll) adds nothing. */
13
+ export declare function spellAmountBindings(spell: Pick<ResolvedSpell, "source" | "classSlug" | "ability" | "itemCasting">, resolved: Pick<ResolvedCharacter, "classes" | "totalLevel">, derived: AmountDerived): AmountBindings;
32
14
  export declare function spellRollBonus(spell: Pick<Spell, "damage_roll" | "description">): string | null;
33
- /** The spell's printed roll with every spell damage rider that reaches it added INSIDE the one roll (bonus damage prints
34
- * in the damage cell, user ruling): Agonizing Blast's Charisma on its cantrip reads "1d10+3" (found live 2026-09-28),
35
- * Potent Spellcasting's Wisdom on Sacred Flame "1d8+3". A conditional rider, or one of another canonical damage type
36
- * than the spell's own, is not added here: it is a line of its own (`spellDamageRiderLines`). */
37
15
  export declare function addSpellDamageRiders(roll: string, spell: Pick<ResolvedSpell, "slug" | "entity">, derived: Partial<Pick<DerivedStats, "spellDamageRiders">>): string;
38
- /** The spell damage riders that reach `spell` but do not fold into its roll, each its own line in the damage cell, the
39
- * way a conditional weapon rider is (Power Surge's "+ 5 force" once a surge is spent; Arcane Firearm's "+ 1d8" through
40
- * the firearm): a `condition`, or another canonical damage type. `spells` and `once` are the engine's, not the line's. */
41
16
  export declare function spellDamageRiderLines(spell: Pick<ResolvedSpell, "slug" | "entity">, derived: Partial<Pick<DerivedStats, "spellDamageRiders">>): Array<Pick<SpellDamageRider, "amount" | "damage_type" | "source" | "condition">>;
@@ -1,28 +1 @@
1
- import {
2
- addSpellDamageRiders,
3
- amountBindingsFor,
4
- ownerClassSlug,
5
- spellAmountBindings,
6
- spellDamageRiderLines,
7
- spellRollBonus,
8
- spellcastingFor
9
- } from "../chunk-TRBGC4ZG.js";
10
- import "../chunk-KR6JF3BF.js";
11
- import "../chunk-KSTV7J2U.js";
12
- import "../chunk-DPUJDOKV.js";
13
- import "../chunk-IUAAXXNO.js";
14
- import "../chunk-LVQLWRCU.js";
15
- import "../chunk-WOHX7YTH.js";
16
- import "../chunk-EVMUJYUD.js";
17
- import "../chunk-VTTA2ALZ.js";
18
- import "../chunk-PDJSUH24.js";
19
- import "../chunk-WELIKLZF.js";
20
- export {
21
- addSpellDamageRiders,
22
- amountBindingsFor,
23
- ownerClassSlug,
24
- spellAmountBindings,
25
- spellDamageRiderLines,
26
- spellRollBonus,
27
- spellcastingFor
28
- };
1
+ import{addSpellDamageRiders,amountBindingsFor,ownerClassSlug,spellAmountBindings,spellDamageRiderLines,spellRollBonus,spellcastingFor}from"../chunk-CCAVZANF.js";import"../chunk-PZ3ZZ5H5.js";import"../chunk-KEXSF3CH.js";import"../chunk-PFQPP77Q.js";import"../chunk-PKIMOVQG.js";import"../chunk-CMIEZQL4.js";import"../chunk-CSTAQQGX.js";import"../chunk-O776WL7O.js";import"../chunk-DVUXUIPV.js";import"../chunk-YGH7S5ZF.js";import"../chunk-4IAMSRHD.js";import"../chunk-DZITM5AG.js";import"../chunk-PZ4L2EEG.js";import"../chunk-QMEKQTUT.js";import"../chunk-VIP3FH2O.js";import"../chunk-EAARMPCW.js";import"../chunk-CAPYNIGK.js";import"../chunk-63YJPWTM.js";import"../chunk-BREHZNTL.js";import"../chunk-7FPQJDFD.js";import"../chunk-EVT7MGAC.js";export{addSpellDamageRiders,amountBindingsFor,ownerClassSlug,spellAmountBindings,spellDamageRiderLines,spellRollBonus,spellcastingFor};
@@ -1,54 +1,11 @@
1
1
  import type { RegisteredEntity } from "@archivist-gg/core";
2
2
  import type { Choice, Ability } from "../types/choice.js";
3
- /**
4
- * Normalizes the authored two-step "Ability Score Increase or Feat" decision
5
- * into the flat feat pick the product now uses.
6
- *
7
- * This is a PERMANENT compatibility layer, not a migration shim: hand-authored
8
- * homebrew (e.g. `Compendium/MCDM/Classes/Illrigger.md`, which no bundle copy
9
- * can ever overwrite) keeps emitting the two-step shape, and `choiceSchema`
10
- * deliberately keeps accepting it.
11
- *
12
- * The lifted choice is the AUTHORED inner one, returned verbatim, so a homebrew
13
- * variant carrying its own `where` / `count` / `label` survives. When the feat
14
- * branch carries more than one child choice the whole choice is returned
15
- * untouched, because lifting would silently drop the sibling.
16
- *
17
- * Pure: never mutates its input, never synthesizes a new object.
18
- */
19
3
  export declare function flattenAsiOrFeat(choice: Choice): Choice;
20
- /** The structural registry read `resolveLegacyAsiFeat` makes; the ledger's DecisionRegistry and core's EntityRegistry both
21
- * satisfy it. */
22
4
  type FeatSearch = {
23
5
  search(query: string, entityType: string, limit: number): RegisteredEntity[];
24
6
  };
25
- /**
26
- * The legacy ASI-branch allocation a class level SAVED, or null (H234 H4(2), spec §5.2 item 1): the SHEET's predicate,
27
- * which `collectClassAsiBranch` (pc.recalc.ts) folds per level, and the base of the Builder's {@link convertibleLegacyAsi}.
28
- *
29
- * Non-null exactly when `block` is an object whose `feat` is NOT a string and whose `asi` is a non-array object with at
30
- * least one numeric ability entry; returns a FRESH object of those entries. It ignores `asi-or-feat`, so an explicit
31
- * `"feat"` branch with no feat picked still folds on the sheet, as it always has.
32
- *
33
- * A string `feat` beside an `asi` is R4-P4 Decision B's orphan (the level took the feat branch and the picker never cleared
34
- * the abandoned branch's child keys): null. Do NOT loosen the test to `"feat" in block` or a `startsWith("feat")` prefix
35
- * test: the first strands a non-string `feat` (a legacy hand edit) with no fold at all, the second skips every
36
- * correctly-flattened block. The `typeof … === "string"` test MIRRORS `collectClassFeatAbilityPoints`' own gate, so the two
37
- * can never both decline on this predicate (they can both decline when the feat slug resolves to no entity: an
38
- * unresolvable pick grants nothing, by design).
39
- */
40
7
  export declare function legacyAsiBranch(block: unknown): Partial<Record<Ability, number>> | null;
41
- /** The BUILDER's predicate (spec §5.2 item 2, Gate 1 M-9): {@link legacyAsiBranch} when `asi-or-feat` is absent or
42
- * `"asi"`, else null. An explicit `"feat"` branch is a two-step pick in progress (a homebrew non-flattenable two-step keeps
43
- * `asi-or-feat` as its own row's key), so the Builder neither aliases nor converts it and today's orphan rule applies.
44
- * The ledger alias and {@link migrateLegacyAsiLevel} both use THIS predicate, so an aliased row never receives an inert
45
- * write. The sheet's fold keeps the value-agnostic {@link legacyAsiBranch}. */
46
8
  export declare function convertibleLegacyAsi(block: unknown): Partial<Record<Ability, number>> | null;
47
- /** The ASI feat a class answers a legacy level with, deterministically (spec §5.3, Gate 0 M-7). Candidates: the registered
48
- * feats whose bare slug is `ability-score-improvement` and which carry an `ability-points` choice with a string `id`.
49
- * Rank: (1) the class entity's slug prefix (the pool collapse's identity rule), (2) the class entity's edition, (3)
50
- * ascending slug in code-unit order. `childId` is that choice's own `id`, read from the data. Null with no candidate or no
51
- * class entity. A pure function of (registry, class entity), so the ledger alias and the write path always agree. */
52
9
  export declare function resolveLegacyAsiFeat(registry: FeatSearch, classEntity: {
53
10
  slug: string;
54
11
  edition?: string;
@@ -56,22 +13,6 @@ export declare function resolveLegacyAsiFeat(registry: FeatSearch, classEntity:
56
13
  slug: string;
57
14
  childId: string;
58
15
  } | null;
59
- /**
60
- * The level block to store BEFORE a Builder edit applies, or null for "no conversion" (spec §5.2 item 4, §5.5). The plugin's
61
- * `setChoice` calls it for EVERY write with the edit's key and value (Gate 1 M-8), so the `feat` vocabulary stays here.
62
- *
63
- * Null when the key is neither `feat` nor `feat:`-prefixed, when the block is not a convertible legacy level
64
- * ({@link convertibleLegacyAsi}), or when the class has no ASI feat ({@link resolveLegacyAsiFeat}). Else a NEW object:
65
- * every key of `block` except `asi-or-feat`, `asi` and `feat:<childId>`, plus `feat: <the ASI slug>`, plus
66
- * `feat:<childId>: <the legacy allocation>` UNLESS the edit is a SWITCH: `key === "feat"` with any value other than the
67
- * ASI slug, so a pick of another feat (Gate 1 I-1, ruled option (a)) and the chip removal (null / undefined; final
68
- * review, Review 3 m6, ruled) both count. A switch writes no `feat:<childId>` at all, so the legacy points and any
69
- * stale child are dropped and the level's pick stays open (the new feat's own, or the removed ASI's), which is what
70
- * today's orphan rule does for a switch; a chip removal is therefore not reversible, and re-picking the ASI feat after
71
- * it starts open. The stepper and a re-pick of the ASI feat keep the full conversion, where the legacy allocation
72
- * overwrites a stale child. Other keys at the level are kept untouched; the input is never mutated. An over-allocated
73
- * legacy level is copied verbatim and then clamped by the feat's own rules when the sheet folds it (Gate 1 M-10).
74
- */
75
16
  export declare function migrateLegacyAsiLevel(block: unknown, key: string, value: unknown, registry: FeatSearch, classEntity: {
76
17
  slug: string;
77
18
  edition?: string;
@@ -1,16 +1 @@
1
- import {
2
- convertibleLegacyAsi,
3
- flattenAsiOrFeat,
4
- legacyAsiBranch,
5
- migrateLegacyAsiLevel,
6
- resolveLegacyAsiFeat
7
- } from "../chunk-LBEXLN6I.js";
8
- import "../chunk-ZCTUYGNV.js";
9
- import "../chunk-WELIKLZF.js";
10
- export {
11
- convertibleLegacyAsi,
12
- flattenAsiOrFeat,
13
- legacyAsiBranch,
14
- migrateLegacyAsiLevel,
15
- resolveLegacyAsiFeat
16
- };
1
+ import{convertibleLegacyAsi,flattenAsiOrFeat,legacyAsiBranch,migrateLegacyAsiLevel,resolveLegacyAsiFeat}from"../chunk-QVWT67WA.js";import"../chunk-63YJPWTM.js";import"../chunk-EVT7MGAC.js";export{convertibleLegacyAsi,flattenAsiOrFeat,legacyAsiBranch,migrateLegacyAsiLevel,resolveLegacyAsiFeat};
@@ -1,3 +1,4 @@
1
1
  import type { CharacterState, Edition, ConditionEffects } from "./pc.types.js";
2
2
  import type { Ability } from "@archivist-gg/dnd5e";
3
3
  export declare function computeConditionEffects(state: CharacterState, edition: Edition, _scores: Record<Ability, number>): ConditionEffects;
4
+ export declare function speedConditionNames(state: CharacterState, edition: Edition): string[];
@@ -1,6 +1 @@
1
- import {
2
- computeConditionEffects
3
- } from "../chunk-MYY2C5MB.js";
4
- export {
5
- computeConditionEffects
6
- };
1
+ import{computeConditionEffects,speedConditionNames}from"../chunk-VA3ZWV7C.js";export{computeConditionEffects,speedConditionNames};
@@ -1,8 +1,5 @@
1
1
  import type { EntityRegistry } from "@archivist-gg/core";
2
2
  import type { EquipmentEntry } from "./pc.types.js";
3
- /** I2a · containment (spec 2026-09-24-inv-i2a-containment-data-design.md §4). The equipment array stays FLAT; an entry
4
- * sits inside another through `in: <id>`. What counts as a container is the item's `container` data
5
- * (isContainerItem), never a name list. */
6
3
  export type ContainmentBreak = "equipped" | "missing" | "self" | "unresolved" | "not-container" | "cycle";
7
4
  export interface ContainmentView {
8
5
  parentOf: ReadonlyArray<number | null>;
@@ -16,8 +13,6 @@ export interface ContainmentView {
16
13
  }>;
17
14
  }
18
15
  export declare function nonEmptyRef(v: unknown): string | null;
19
- /** `container.holds_items` decides when present; otherwise a weight or item capacity, or weightless contents, make a
20
- * container. A pack_contents-only block (a pack) and a volume-only block (a liquid holder) are not containers. */
21
16
  export declare function isContainerItem(entity: unknown): boolean;
22
17
  export declare function idOwners(equipment: readonly EquipmentEntry[]): {
23
18
  ownerOfId: Map<string, number>;
@@ -1,24 +1 @@
1
- import {
2
- canMoveInto,
3
- ensureEntryId,
4
- entityOfEntry,
5
- idOwners,
6
- isContainerItem,
7
- moveInto,
8
- nonEmptyRef,
9
- repairContainment,
10
- resolveContainment
11
- } from "../chunk-EJP263OP.js";
12
- import "../chunk-CM5CWO4K.js";
13
- import "../chunk-ZCTUYGNV.js";
14
- export {
15
- canMoveInto,
16
- ensureEntryId,
17
- entityOfEntry,
18
- idOwners,
19
- isContainerItem,
20
- moveInto,
21
- nonEmptyRef,
22
- repairContainment,
23
- resolveContainment
24
- };
1
+ import{canMoveInto,ensureEntryId,entityOfEntry,idOwners,isContainerItem,moveInto,nonEmptyRef,repairContainment,resolveContainment}from"../chunk-4E2GIWJE.js";import"../chunk-PZ4L2EEG.js";import"../chunk-63YJPWTM.js";export{canMoveInto,ensureEntryId,entityOfEntry,idOwners,isContainerItem,moveInto,nonEmptyRef,repairContainment,resolveContainment};
@@ -12,97 +12,28 @@ export interface ResolvedOption {
12
12
  value: string;
13
13
  label: string;
14
14
  entity?: RegisteredEntity;
15
- /** The option's own prose (a select-inline InlineOption may supply one — e.g. each
16
- * Combat Mastery describes what it does). Surfaced by the strip near the chips. */
17
15
  description?: string;
18
- /** True when a `from` slug has no entity behind it — render visible-but-inert. */
19
16
  missing?: boolean;
20
- /** True when this option is a STORED pick that no longer answers to the pool's collapsed candidate list
21
- * (R4-G5 §3.2.3): a genuine prerequisite-failing pick, since §9.2.3 already rewrote every collapsed twin to
22
- * its survivor. Stamped by the pool synth from `strandedPicks`, never by `enumerateOptions`, which stays pure
23
- * over `(choice, ctx, ownerBare)` and cannot see the character. Both builder arms dress such an option with
24
- * the unresolved (crimson req) marker and the sheet's "prerequisite unmet" wording; the picker modal still
25
- * lists it as an ordinary candidate. */
26
17
  stranded?: boolean;
27
18
  }
28
- /**
29
- * Status contract: over-selection (n > need) reports `resolved` — the engine
30
- * never reports an error for too many picks; the picker UI owns cap enforcement.
31
- * A pick that FOLDS into proficiencies never over-selects, though: {@link capAtCount}
32
- * keeps its first `count` stored values, in the ledger and the fold alike.
33
- * Likewise for ability-points `max_per`: the engine only sums total points
34
- * allocated, so per-ability caps are picker-enforced, not reflected here.
35
- */
36
19
  export type DecisionStatus = "resolved" | "partial" | "unresolved" | "informational";
37
20
  export interface DecisionItem {
38
21
  key: string;
39
22
  source: FeatureSource;
40
23
  level: number;
41
24
  featureName: string;
42
- /**
43
- * The source feature/trait's own description (race trait, background feature,
44
- * class feature) — threaded through from the walk that emits the item so the
45
- * decision strip can render it as a quiet markdown block at the top of the
46
- * row's nest (smoke r7). Top-level rows only; a child inherits NOTHING from
47
- * its parent — it carries the sub-choice option's own `description` (when the
48
- * authored InlineOption supplies one) or none.
49
- */
50
25
  description?: string;
51
- /**
52
- * When `status === "informational"` this is a placeholder sentinel and MUST
53
- * NOT be rendered — informational items render from `featureName` only
54
- * (Task 16 contract). For every other status it is the real choice to render.
55
- */
56
26
  choice: Choice;
57
27
  options: ResolvedOption[];
58
28
  selected: ChoiceValue | undefined;
59
29
  status: DecisionStatus;
60
- /**
61
- * True when this choice has nothing left to grant: every proficiency it could
62
- * have offered is one the character ALREADY holds (on an `expertise` skill row,
63
- * already holds AT EXPERTISE), so the exclusion filter (spec §5, widened to
64
- * those rows by R4-G3b §7 F4) emptied its pool. Such a row is complete, not an
65
- * open obligation the user has no way to discharge.
66
- *
67
- * Deliberately NOT a bare `options.length === 0`. FOUR other shapes reach
68
- * zero options and are genuinely still open: a from-LESS `domain:"save"`
69
- * choice (no pool exists at all · the enumerator's `??` fallback has no save
70
- * branch, and a save choice that authors `from` does enumerate it), a
71
- * select-entity whose registry holds no candidates (an empty vault), an
72
- * authored `from: []`, and a `from_proficient` skill row the R4-G3b §7 F1
73
- * INCLUSION empties (a fresh L1 Rogue holds no skills yet). Emptied-BY-
74
- * EXCLUSION is the only one where the character is already whole, so the flag
75
- * is scoped to select-proficiency in the language and tool domains PLUS
76
- * `expertise` skill rows (R4-G3b §7 F4; a plain skill row is never excluded
77
- * and so never satisfied · §14, and saves have no set at all) AND requires the
78
- * pool to have been non-empty AFTER the F1 INCLUSION ran, not before it ·
79
- * that fourth shape is the one this clause keeps open, and the next render
80
- * repopulates it.
81
- *
82
- * `false` for every other item, informational ones included.
83
- */
84
30
  satisfied: boolean;
85
- /** Present ONLY on a synthesized selection-pool item (R4-G5 §3.2.3): that pool's id and anchor level. It is
86
- * the TYPED marker every writer keys the pool write canon on (the chips arm, the selection table,
87
- * `renderLongListBrowse` and `DecisionPickModal`): a pool item persists an ARRAY even at count 1, the shape
88
- * `PoolTab` writes, while a `feat` or any other pick keeps its string shape. Absent on every other item, so
89
- * a truthiness test on it IS the discriminator. */
90
31
  pool?: {
91
32
  id: string;
92
33
  anchorLevel: number;
93
34
  };
94
- /** ART-a (spec §5.1, R20): present ONLY on a synthesized pool item whose pool offers a repeatable member: one entry per
95
- * such member, with its option rows resolved for the per-copy picker (visible candidates only, U-A). */
96
35
  repeatable?: RepeatableMember[];
97
- /**
98
- * Populated only for the selected branch of a select-inline (the
99
- * revealed-on-selection rule): a child decision becomes visible once its
100
- * parent option is chosen. An unresolved child downgrades the parent's
101
- * status to "partial".
102
- */
103
36
  children?: DecisionItem[];
104
- /** D2b-A (design §2.2 step 7): on a child of a pool item, the name of the member the choice belongs to ("Lessons of the
105
- * First Ones"), so the strip reads "Lessons of the First Ones · Origin feat". Absent everywhere else. */
106
37
  parentLabel?: string;
107
38
  }
108
39
  export interface DecisionLedger {
@@ -117,48 +48,13 @@ export interface DecisionLedger {
117
48
  }
118
49
  export interface DecisionContext {
119
50
  registry: DecisionRegistry;
120
- /** OPTIONAL visibility predicate. When supplied, ambiguous bare-slug lookups
121
- * seed VISIBLE entities first, so a hidden compendium can never shadow a
122
- * visible one that shares a bare slug. Absent (the engine's own tests, any
123
- * caller that has no notion of hidden compendiums) means deterministic order
124
- * only — never a behaviour change, because the seeding is total-ordered
125
- * either way. Threaded plugin-side by the four builder ctx constructors. */
126
51
  isEntityVisible?(e: RegisteredEntity): boolean;
127
52
  }
128
- /** `wikilinkTailSlug` MOVED to `entities/slug.ts` in R4-G5 T1, beside `bareEntitySlug`, so `pc.pools.ts` can
129
- * import it without importing this module (this module imports `pc.pools` for `strandedPicks`; the old
130
- * direction would be a cycle). The re-export is KEPT because `@archivist-gg/dnd5e/pc/pc.decision-engine` is
131
- * a published subpath with a plugin importer OF THIS SYMBOL (`components/builder/class-step.ts`, under
132
- * `packages/obsidian/src/modules/pc/`; the two background surfaces moved to the plugin's `refLabel`, which reads
133
- * `entities/slug` directly, on 2026-09-25) plus this repo's `pc.resolver.ts` and
134
- * `tests/wikilink-tail-slug.test.ts`: a public
135
- * surface, not a migration shim, so the standing "retire every shim" rule does not reach it (spec §17 names the
136
- * re-export explicitly). */
137
53
  export { wikilinkTailSlug };
138
54
  declare function matchesFilter(e: RegisteredEntity, where: EntityFilter, ownerBare: string): boolean;
139
- /** Test-only export of {@link matchesFilter} (Task B2). */
140
55
  export declare const __matchesFilterForTest: typeof matchesFilter;
141
- /** Map a starting-equipment category grant to a nested select-entity child (vocabulary on
142
- * {@link parseEquipmentCategory}). Weapons filter by weapon_category; armor by armor_category; `shield` is an armor
143
- * entity in the shield class; a tool category is a MUNDANE item of the category's `type` (magic instruments carry
144
- * `type: instrument` too).
145
- *
146
- * An UNKNOWN category is never guessed. It used to fall through to `weapon_category: "simple"`, which is how the
147
- * PHB 2024 Bard's "Choose a musical instrument" listed Club, Dagger and Dart. It now yields `from: []`, the
148
- * engine's existing zero-option shape (an authored empty pool: the row stays open and the strip prints its
149
- * "No options available" line), and warns ONCE per distinct category. */
150
56
  declare function categoryToEntitySelect(category: string, id: string): Choice;
151
- /** Test-only export of {@link categoryToEntitySelect}. */
152
57
  export declare const __categoryToEntitySelectForTest: typeof categoryToEntitySelect;
153
- /** Walk every decision definition + persisted selection and collect chosen
154
- * proficiencies. Pure; called by recalc.
155
- *
156
- * On the `select-proficiency` arms, values are validated against the decision's
157
- * option pool via filterToPool: slugs outside `from` are ignored, and a pick
158
- * matching under canon is kept in the POOL's spelling. The `weapons` arm is the
159
- * one exception · a `select-entity` pick carries ENTITY slugs, not proficiency
160
- * slugs, and its `from` is a list of entity slugs, so those values are
161
- * bare-slugged rather than pool-filtered (R4-G3b §7 F5). */
162
58
  export declare function collectChosenProficiencies(resolved: ResolvedCharacter): {
163
59
  skills: string[];
164
60
  expertise: string[];
@@ -167,46 +63,16 @@ export declare function collectChosenProficiencies(resolved: ResolvedCharacter):
167
63
  weapons: string[];
168
64
  saves: Ability[];
169
65
  };
170
- /** The single primitive for "what languages/tools does this character actually
171
- * have": grants + picks + manual adds, MINUS suppressions (spec §4.1).
172
- *
173
- * Suppressions are applied INSIDE this function precisely so that no reader can
174
- * forget them · the sheet panel's display, the builder picker's option
175
- * exclusion and the "already satisfied" test all read this one function and
176
- * therefore agree by construction.
177
- *
178
- * Built on the grant walk, NEVER on computeProficiencies (spec §4.2): recalc's
179
- * proficiency fold is missing the race and background grants.
180
- *
181
- * ONE argument. `Character.overrides` is non-optional with a schema default, so
182
- * a second parameter would be redundant and would force an optionality decision
183
- * at seventeen existing aggregateProficiencies call sites (spec §4.1).
184
- *
185
- * SEVENTEEN is a PRE-R4-P3c SNAPSHOT (dnd5e 433cc72 · plugin 90394e9, which this
186
- * phase never touches), and that is what "existing" means above: the sites that
187
- * existed when the one-argument decision was taken. It is NOT today's count. Do
188
- * not re-"correct" it to today's · that number moves on every new test that
189
- * calls the function, while the cost this sentence is weighing does not.
190
- *
191
- * Reproduce the snapshot with `git grep -c "aggregateProficiencies(" <rev>` over
192
- * *.ts/*.tsx, node_modules and dist excluded: 15 raw lines in dnd5e + 3 in the
193
- * plugin = 18, minus the DECLARATION in pc.proficiencies.ts = 17 · namely 2
194
- * production (the plugin's proficiencies-panel and proficiency-edit-modal) + 15
195
- * in tests (14 in dnd5e, 1 in the plugin's pc-proficiency-edit-modal counting
196
- * passthrough). Two traps in that census. The plugin's two mock bindings are NOT
197
- * a subtraction: `aggregateProficiencies:` has no paren, so the pattern never
198
- * matched them. THIS DOCBLOCK's own backticked mention above IS one, and only
199
- * from R4-P3c onward · immediately after that phase the same grep returns 20
200
- * raw, which is 18 call sites once the declaration AND this docblock come off,
201
- * not the 19 you get by subtracting the declaration alone. */
66
+ export interface RuleProficiencySources {
67
+ skills: Record<string, string[]>;
68
+ expertise: Record<string, string[]>;
69
+ saves: Partial<Record<Ability, string[]>>;
70
+ }
71
+ export declare function collectRuleProficiencySources(resolved: ResolvedCharacter): RuleProficiencySources;
202
72
  export declare function computeEffectiveProficiencies(resolved: ResolvedCharacter): {
203
73
  languages: ProficiencyEntry[];
204
74
  tools: ProficiencyEntry[];
205
75
  };
206
- /** D4 A: the complement of {@link computeEffectiveProficiencies}: every language and tool the character's grants, picks
207
- * or adds would hold but `overrides.<domain>.remove` (or a `none` tools tri) suppresses, each entry keeping its
208
- * `sources` and `origin`. The proficiency picker draws these struck through ("Dwarf · removed"). Both functions read
209
- * ONE composer, so a row is kept or suppressed, never both and never neither. */
210
76
  export declare function computeSuppressedProficiencies(resolved: ResolvedCharacter): {
211
77
  languages: ProficiencyEntry[];
212
78
  tools: ProficiencyEntry[];
@@ -215,10 +81,5 @@ export interface OriginAbilityPoints {
215
81
  race: Partial<Record<Ability, number>>;
216
82
  background: Partial<Record<Ability, number>>;
217
83
  }
218
- /** Pure: folds ORIGIN (race/background) `ability-points` decisions out of
219
- * origin_choices into per-namespace totals. Values are clamped picker-side
220
- * already, but clamp again defensively: per-ability max_per, then stop at the
221
- * points total walking ABILITY_KEYS order. Class-level ASI stays on the
222
- * legacy choices[lvl].asi path recalc already folds — do not double-count. */
223
84
  export declare function collectChosenAbilityPoints(resolved: ResolvedCharacter): OriginAbilityPoints;
224
85
  export declare function buildDecisionLedger(resolved: ResolvedCharacter, ctx: DecisionContext): DecisionLedger;
@@ -1,55 +1 @@
1
- import {
2
- __categoryToEntitySelectForTest,
3
- __matchesFilterForTest,
4
- buildDecisionLedger,
5
- collectChosenAbilityPoints,
6
- collectChosenProficiencies,
7
- computeEffectiveProficiencies,
8
- computeSuppressedProficiencies
9
- } from "../chunk-EJD47JHL.js";
10
- import "../chunk-2LULMQTF.js";
11
- import "../chunk-QA3YCOML.js";
12
- import "../chunk-64VNLMSG.js";
13
- import "../chunk-TOM66P2P.js";
14
- import "../chunk-KU3YLF6D.js";
15
- import "../chunk-5JXFJ5AU.js";
16
- import "../chunk-RD2MID3M.js";
17
- import "../chunk-LICYHPI3.js";
18
- import "../chunk-PVCEA4HZ.js";
19
- import "../chunk-KSTV7J2U.js";
20
- import "../chunk-DPUJDOKV.js";
21
- import "../chunk-LBEXLN6I.js";
22
- import "../chunk-NXUY5XQN.js";
23
- import "../chunk-W6GC6OKK.js";
24
- import "../chunk-B3DP42OM.js";
25
- import "../chunk-IUAAXXNO.js";
26
- import "../chunk-YHYTW5QA.js";
27
- import "../chunk-ZUQW5VBZ.js";
28
- import "../chunk-IHE6KVC3.js";
29
- import "../chunk-LHZXYFBU.js";
30
- import "../chunk-YBLDE5CG.js";
31
- import "../chunk-LVQLWRCU.js";
32
- import "../chunk-CM5CWO4K.js";
33
- import "../chunk-4J6DS3EJ.js";
34
- import "../chunk-EVMUJYUD.js";
35
- import "../chunk-VTTA2ALZ.js";
36
- import {
37
- wikilinkTailSlug
38
- } from "../chunk-ZCTUYGNV.js";
39
- import "../chunk-7Q2VPKCD.js";
40
- import "../chunk-ZDAEGJH4.js";
41
- import "../chunk-3TM34RSJ.js";
42
- import "../chunk-PDJSUH24.js";
43
- import "../chunk-WELIKLZF.js";
44
- import "../chunk-4U55VNC7.js";
45
- import "../chunk-UA5KS2PL.js";
46
- export {
47
- __categoryToEntitySelectForTest,
48
- __matchesFilterForTest,
49
- buildDecisionLedger,
50
- collectChosenAbilityPoints,
51
- collectChosenProficiencies,
52
- computeEffectiveProficiencies,
53
- computeSuppressedProficiencies,
54
- wikilinkTailSlug
55
- };
1
+ import{__categoryToEntitySelectForTest,__matchesFilterForTest,buildDecisionLedger,collectChosenAbilityPoints,collectChosenProficiencies,collectRuleProficiencySources,computeEffectiveProficiencies,computeSuppressedProficiencies}from"../chunk-J5GL6FLP.js";import"../chunk-2EOGK6R6.js";import"../chunk-RQZCGXUZ.js";import"../chunk-GD7WRCNH.js";import"../chunk-FOLHTMSC.js";import"../chunk-4JEF3CET.js";import"../chunk-VTQ4RWEG.js";import"../chunk-J3RP5C7L.js";import"../chunk-WAUNLUFQ.js";import"../chunk-CEHL7PPC.js";import"../chunk-UBUKCRZ3.js";import"../chunk-KEXSF3CH.js";import"../chunk-PFQPP77Q.js";import"../chunk-QVWT67WA.js";import"../chunk-PKIMOVQG.js";import"../chunk-CMIEZQL4.js";import"../chunk-CSTAQQGX.js";import"../chunk-O776WL7O.js";import"../chunk-3LWOVRLA.js";import"../chunk-DVUXUIPV.js";import"../chunk-YGH7S5ZF.js";import"../chunk-4IAMSRHD.js";import"../chunk-3QQOATV3.js";import"../chunk-DZITM5AG.js";import"../chunk-PZ4L2EEG.js";import"../chunk-QMEKQTUT.js";import"../chunk-EAARMPCW.js";import"../chunk-CAPYNIGK.js";import{wikilinkTailSlug}from"../chunk-63YJPWTM.js";import"../chunk-4KVVAENP.js";import"../chunk-7EL3GWWJ.js";import"../chunk-BREHZNTL.js";import"../chunk-7FPQJDFD.js";import"../chunk-EVT7MGAC.js";import"../chunk-S5UCI27C.js";import"../chunk-ZVL5FXXO.js";import"../chunk-I26FHSI6.js";export{__categoryToEntitySelectForTest,__matchesFilterForTest,buildDecisionLedger,collectChosenAbilityPoints,collectChosenProficiencies,collectRuleProficiencySources,computeEffectiveProficiencies,computeSuppressedProficiencies,wikilinkTailSlug};
@@ -1,11 +1 @@
1
- /**
2
- * Canonical key for a defense value (damage type or condition).
3
- *
4
- * Deliberately SIMPLER than `toProfSlug` (pc.proficiency-normalize.ts): damage types and conditions carry
5
- * no apostrophes and no hyphens, so there is no U+2019 fold and no space-to-hyphen step. Do NOT reuse
6
- * `normKey` · it token-sorts and singularizes for weapon display names and is actively wrong here.
7
- *
8
- * The whole point of this function is that ONE normalizer serves every reader and writer on the defenses
9
- * path. Adding a second is the bug R4-P5 exists to remove.
10
- */
11
1
  export declare function toDefenseSlug(s: string): string;
@@ -1,6 +1 @@
1
- import {
2
- toDefenseSlug
3
- } from "../chunk-XJ2F2WO6.js";
4
- export {
5
- toDefenseSlug
6
- };
1
+ import{toDefenseSlug}from"../chunk-LR6UMA5V.js";export{toDefenseSlug};
@@ -3,75 +3,36 @@ import type { ActionCost } from "../types/resource.js";
3
3
  import type { EquipmentEntry, EquipmentEntryState } from "./pc.types.js";
4
4
  import { type EntryView } from "./pc.infusions.js";
5
5
  export type CustomizableKey = "name" | "charges" | "recovery" | "action" | "range" | "bonus" | "damage_bonus" | "extra_damage" | "ac_bonus" | "resist";
6
- /** The attack row's cost when the entry stores no `overrides.action` (pc.equipment.ts). */
7
6
  export declare const WEAPON_DEFAULT_ACTION_COST: ActionCost;
8
- /** A weapon, or an item whose `base_item` resolves to a weapon: it fills the main hand and owns an
9
- * attack row (pc.slotting.ts `defaultSlotForType`). With a view, its rule entity decides (an infused
10
- * weapon's wrapper routes through its `base_item`). */
11
7
  export declare function isWeaponLikeEntry(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): boolean;
12
- /** The override keys some consumer reads for this entry's type. The Customize card adds every key the
13
- * entry already STORES (so it can always be cleared); that union is the card's, not this rule's. */
14
8
  export declare function customizableOverrideKeys(entry: EquipmentEntry, registry: EntityRegistry | null): Set<CustomizableKey>;
15
- /** The action cost the sheet shows when no `overrides.action` is stored: the attack row's default for a
16
- * weapon-like entry; the items row's cost (a view's `action`, the curated cost, or the potion or scroll
17
- * default) otherwise; else null. With a view, its rule entity decides each read. */
18
9
  export declare function defaultActionCost(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): ActionCost | null;
19
- /** A spell scroll's spell's cost, the registry half of `resolveItemAction`'s scroll default (it has no registry; its
20
- * two callers do, and pass this as `opts.spellCost`: `defaultActionCost` here and the plugin's Actions collector).
21
- * The spell is the one the entry sets (`overrides.spell`: a `[[slug]]` wikilink or a bare slug), looked up as the
22
- * Spells tab looks it up (`collectItemGrantedSpells`); its `casting_time` is read by the ONE casting-time reader. An
23
- * action, bonus action or reaction is the cost; anything else (a minute or hour cast, no spell set, a spell not
24
- * installed, no registry) is undefined, so the scroll default falls back to Action. */
25
10
  export declare function scrollSpellCost(entry: EquipmentEntry, registry: EntityRegistry | null): ActionCost | undefined;
26
- /** A charges field's maximum (spec §5.6, U-7 A): an object's `max`, or a positive number (the two item-note shapes,
27
- * item.schema.ts); an infusion overlay's `charges` has the object shape. */
28
11
  export declare function itemChargesMax(entity: unknown): number | undefined;
29
- /** The recovery rule an item recharges by (spec §5.5, §5.6, U-7 A), in this order: none for an item consumed on use
30
- * ({@link isConsumedOnUse}: it has no charges to recharge, even over a rule stored before that ruling) or an orphan
31
- * created entry (its RULE entity is null, nothing folds); an INFUSED view's overlay `charges` (their `recharge`,
32
- * `dawn` refilling on a long rest); the stored rule; the item note's own `charges.recharge`; else the curated rule
33
- * for a wikilinked entry. A plain-text entry never picks up a curated rule the Actions row cannot show. */
34
12
  export declare function effectiveItemRecovery(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): NonNullable<EquipmentEntryState["recovery"]> | undefined;
35
- /** Consumed on use (T17 rider C fold, user ruling 2026-09-24): using one spends the entry's QUANTITY, never a charge
36
- * (a potion, Holy Water, an oil, Alchemist's Fire, Dust of Disappearance, a scroll), so the item has no charges and
37
- * no recovery anywhere and the sheet shows its quantity only. Data decides, in two places: the curated `consumed`
38
- * flag of `ITEM_ACTIONS` (no registry needed), else the entity's own data, a `potion` or `scroll` type (the type the
39
- * potion default of `resolveItemAction` already reads) or a `scroll_level` marker. A plain-text entry is never one:
40
- * it resolves to no entity, as in every other rule here. */
41
13
  export declare function isConsumedOnUse(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): boolean;
42
- /** The ONE "is a spell scroll" rule (T17 rider GH, carried from rider C's close), by the entity's own data: its `scroll`
43
- * type or its `scroll_level` marker. A scroll is consumed on use ({@link isConsumedOnUse}). Read value-based, with no
44
- * rarity gate: null, a non-object or an entity with neither field is no scroll. An entry reaches it through its resolved
45
- * entity, so with no registry, or for a plain-text entry, nothing is a scroll. */
46
14
  export declare function isScrollEntity(entity: unknown): boolean;
47
- /** A scroll the sheet can CAST: it carries the `scroll_level` marker, the level its spell is cast at (0 = cantrip). Its
48
- * use is that cast (the Spells tab spends it), so the Actions row offers it no Use of its own. A scroll typed `scroll`
49
- * with no marker (the 2014 SRD spell scrolls) names no level: it is not castable, and its Actions row keeps the plain
50
- * Use every other item consumed on use has (T17 rider GH). */
51
15
  export declare function isCastableScroll(entity: unknown): boolean;
52
- /** The charge pair an item shows, the twin of {@link effectiveItemRecovery}. Its sources, in this order (spec §5.5,
53
- * §5.6, U-7 A):
54
- * 1. none for an item consumed on use (its quantity is what it has, {@link isConsumedOnUse}, even over a pair stored
55
- * before that ruling), and none for an orphan created entry (its view's RULE entity is null: nothing folds);
56
- * 2. an INFUSED view whose overlay has `charges`: they live in the MARKER, `infusion.charges.current` (absent = full,
57
- * clamped to the overlay max), never in `state`;
58
- * 3. the stored pair as stored (a legacy `{0, 0}` included, so it can still be cleared);
59
- * 4. the item note's OWN `charges` (an object's `max`, or a number) as a FULL pair: every item reads its own data;
60
- * 5. the curated `max_charges` of a wikilinked entry as a FULL pair, the fallback for notes without data;
61
- * else none. An item with no stored charges is full, the rest plan's own reading. Every surface that shows or spends
62
- * an item's charges reads this (through `entryCharges` once it holds the view), and so does the rest plan, so a wand
63
- * is listed wherever its charges are and a potion nowhere. */
16
+ export declare function settableSpellLevel(entity: unknown): number | null;
17
+ export declare function storesSpell(entity: unknown): boolean;
18
+ export declare function storedSpellNumbers(entity: unknown): {
19
+ saveDC?: number;
20
+ attackBonus?: number;
21
+ } | null;
22
+ export type ItemSpellUse = {
23
+ kind: "consume";
24
+ } | {
25
+ kind: "charges";
26
+ cost: number;
27
+ charges: {
28
+ current: number;
29
+ max: number;
30
+ };
31
+ } | {
32
+ kind: "at-will";
33
+ };
34
+ export declare function itemSpellUse(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): ItemSpellUse | null;
64
35
  export declare function effectiveItemCharges(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): NonNullable<EquipmentEntryState["charges"]> | undefined;
65
- /** The Armor Class an armour or shield entry gives (T17 T-25), by the terms `computeAC` (pc.equipment.ts) adds for it:
66
- * the slot's own terms ({@link slotAcTerms}: the armour's AC, through `base_item` for a magic armour, `effectiveArmor`,
67
- * and the entry's `overrides.ac_bonus`), and the item's own unconditional `bonuses.ac` (a +2 armour's +2). A shield's `value` is what it
68
- * ADDS; an armour's is the AC it sets, plus Dex where `addDex` says so. What the item gives WORN: the engine applies
69
- * these only while it is equipped (the bonus only while attuned where attunement is required), and a conditional
70
- * `bonuses.ac` is left out, its conditions being the character's. Every surface that shows an entry's AC reads this, so
71
- * a magic armour never shows its base armour's AC; the consumer-agreement test holds it to the engine's own sum. Null
72
- * for an entry that is neither (a weapon, a ring, an unresolved link, plain text) and without a registry. With the
73
- * entry's view (ART-a, spec §5.3) the rule entity is read: an infused armor or shield gives its base's terms plus the
74
- * wrapper's scaled `bonuses.ac`, the ONE slot term `computeAC` merges for it. */
75
36
  export declare function effectiveItemArmorClass(entry: EquipmentEntry, registry: EntityRegistry | null, view?: EntryView | null): {
76
37
  value: number;
77
38
  shield: boolean;