@archivist-gg/dnd5e 0.3.13 → 0.3.19

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 (122) hide show
  1. package/dist/background/background.codec.js +5 -5
  2. package/dist/background/background.parser.js +4 -4
  3. package/dist/background/background.schema.js +3 -3
  4. package/dist/chunk-3LWMFYKS.js +57 -0
  5. package/dist/{chunk-4SLOJXJ4.js → chunk-3SFGWFVQ.js} +1 -1
  6. package/dist/{chunk-Q6UOHCCT.js → chunk-3SIUAFDQ.js} +1 -1
  7. package/dist/chunk-4J6DS3EJ.js +30 -0
  8. package/dist/{chunk-RLGQ5PZZ.js → chunk-5JXFJ5AU.js} +11 -1
  9. package/dist/{chunk-4BZ47YJ4.js → chunk-64VNLMSG.js} +59 -16
  10. package/dist/{chunk-XY6X2APM.js → chunk-7Q2VPKCD.js} +17 -0
  11. package/dist/{chunk-Q5XTEYHD.js → chunk-7XJHI5H5.js} +16 -9
  12. package/dist/{chunk-FPGXFD2M.js → chunk-B2QHP6UF.js} +2 -2
  13. package/dist/{chunk-HJQNK3J5.js → chunk-B3DP42OM.js} +1 -4
  14. package/dist/{chunk-MC5YJ4PB.js → chunk-BJGOSM76.js} +1 -1
  15. package/dist/{chunk-VDPRBUU5.js → chunk-BJWSOQUC.js} +1 -1
  16. package/dist/{chunk-QEO7LYTG.js → chunk-EJD47JHL.js} +181 -93
  17. package/dist/{chunk-X7VZY4ON.js → chunk-FJYBLXV7.js} +2 -2
  18. package/dist/{chunk-QSBJ6NEM.js → chunk-FMUD3LDV.js} +1 -1
  19. package/dist/{chunk-LVX6TQ3R.js → chunk-FMYWORTP.js} +2 -2
  20. package/dist/{chunk-PX25R3DK.js → chunk-FVXLP7P3.js} +1 -1
  21. package/dist/{chunk-XJRNEQPD.js → chunk-GVWEFECG.js} +1 -1
  22. package/dist/{chunk-R2V5LN3I.js → chunk-HY2SRSVM.js} +1 -1
  23. package/dist/{chunk-ZMJQUZQH.js → chunk-JXWNXIIZ.js} +24 -0
  24. package/dist/chunk-KR6JF3BF.js +14 -0
  25. package/dist/{chunk-DPM6V7YX.js → chunk-LICYHPI3.js} +82 -6
  26. package/dist/{chunk-J53ERF6K.js → chunk-LNT64X7C.js} +1 -1
  27. package/dist/{chunk-RQNJXADQ.js → chunk-NKZMQV2C.js} +1 -1
  28. package/dist/{chunk-UE6LKRXQ.js → chunk-NTU2DXNG.js} +24 -1
  29. package/dist/{chunk-T5GZBKIQ.js → chunk-NXUY5XQN.js} +168 -33
  30. package/dist/{chunk-M2OWVAZG.js → chunk-NZO7M5GV.js} +1 -1
  31. package/dist/{chunk-BRGLDWUP.js → chunk-OOL4KMG2.js} +7 -3
  32. package/dist/{chunk-MWCCGPG3.js → chunk-OOSRUJBI.js} +3 -2
  33. package/dist/{chunk-H5PTKYXL.js → chunk-QA3YCOML.js} +1 -1
  34. package/dist/{chunk-MUIU7RZ3.js → chunk-QFWQKS3M.js} +1 -1
  35. package/dist/chunk-RD2MID3M.js +292 -0
  36. package/dist/chunk-TRBGC4ZG.js +112 -0
  37. package/dist/{chunk-PLOSP4XQ.js → chunk-UJCK5IW4.js} +11 -2
  38. package/dist/{chunk-5KGV6TF7.js → chunk-UNYR5GLI.js} +1 -1
  39. package/dist/{chunk-JNNNBEUH.js → chunk-VN5DLURA.js} +7 -2
  40. package/dist/{chunk-EL6QPF6I.js → chunk-VP5TIXDK.js} +1 -1
  41. package/dist/chunk-WOHX7YTH.js +165 -0
  42. package/dist/{chunk-G7ED5H2G.js → chunk-XTEFPUSN.js} +1 -1
  43. package/dist/{chunk-6ZY3U6BQ.js → chunk-ZOWKWMD2.js} +1 -1
  44. package/dist/class/class.codec.js +6 -6
  45. package/dist/class/class.parser.js +5 -5
  46. package/dist/class/class.schema.d.ts +8 -0
  47. package/dist/class/class.schema.js +4 -4
  48. package/dist/class/class.standard-array.d.ts +16 -0
  49. package/dist/class/class.standard-array.js +20 -0
  50. package/dist/class/class.types.d.ts +3 -0
  51. package/dist/dnd/amount-text.d.ts +42 -0
  52. package/dist/dnd/amount-text.js +15 -0
  53. package/dist/dnd/resource-words.d.ts +4 -0
  54. package/dist/dnd/resource-words.js +30 -0
  55. package/dist/entities/registry-revision.d.ts +25 -0
  56. package/dist/entities/registry-revision.js +10 -0
  57. package/dist/feat/feat.codec.js +5 -5
  58. package/dist/feat/feat.parser.js +4 -4
  59. package/dist/feat/feat.schema.d.ts +34 -0
  60. package/dist/feat/feat.schema.js +3 -3
  61. package/dist/index.js +4027 -383
  62. package/dist/monster/monster.parser.js +5 -5
  63. package/dist/monster/monster.schema.js +4 -4
  64. package/dist/optional-feature/optional-feature.codec.js +5 -4
  65. package/dist/optional-feature/optional-feature.parser.js +4 -3
  66. package/dist/optional-feature/optional-feature.schema.d.ts +35 -0
  67. package/dist/optional-feature/optional-feature.schema.js +3 -2
  68. package/dist/pc/pc.additional-spells.d.ts +16 -2
  69. package/dist/pc/pc.additional-spells.js +5 -2
  70. package/dist/pc/pc.amount-bindings.d.ts +41 -0
  71. package/dist/pc/pc.amount-bindings.js +28 -0
  72. package/dist/pc/pc.decision-engine.d.ts +11 -0
  73. package/dist/pc/pc.decision-engine.js +20 -16
  74. package/dist/pc/pc.entry-overrides.js +3 -2
  75. package/dist/pc/pc.equipment.js +7 -5
  76. package/dist/pc/pc.feature-effects.d.ts +21 -2
  77. package/dist/pc/pc.feature-effects.js +15 -2
  78. package/dist/pc/pc.infusions.d.ts +9 -1
  79. package/dist/pc/pc.infusions.js +3 -2
  80. package/dist/pc/pc.member-choices.d.ts +122 -0
  81. package/dist/pc/pc.member-choices.js +39 -0
  82. package/dist/pc/pc.parser.js +1 -1
  83. package/dist/pc/pc.pools.d.ts +7 -0
  84. package/dist/pc/pc.pools.js +5 -2
  85. package/dist/pc/pc.proficiencies.d.ts +14 -0
  86. package/dist/pc/pc.proficiencies.js +72 -22
  87. package/dist/pc/pc.proficiency-normalize.d.ts +14 -0
  88. package/dist/pc/pc.proficiency-normalize.js +9 -3
  89. package/dist/pc/pc.proficiency-query.js +7 -1
  90. package/dist/pc/pc.recalc.js +212 -99
  91. package/dist/pc/pc.resolver.d.ts +6 -2
  92. package/dist/pc/pc.resolver.js +16 -14
  93. package/dist/pc/pc.rest.js +4 -3
  94. package/dist/pc/pc.schema.d.ts +48 -2
  95. package/dist/pc/pc.schema.js +1 -1
  96. package/dist/pc/pc.spell-scope.d.ts +22 -0
  97. package/dist/pc/pc.tool-picks.js +2 -2
  98. package/dist/pc/pc.types.d.ts +110 -6
  99. package/dist/pc/pc.weapon-grant.d.ts +15 -0
  100. package/dist/pc/pool-layout.d.ts +3 -9
  101. package/dist/pc/pool-layout.js +1 -3
  102. package/dist/pc/resource-equivalents.d.ts +44 -0
  103. package/dist/pc/spell-source.js +4 -9
  104. package/dist/race/race.codec.js +6 -6
  105. package/dist/race/race.parser.js +5 -5
  106. package/dist/race/race.schema.js +4 -4
  107. package/dist/schemas/choice-schema.js +2 -2
  108. package/dist/schemas/feature-effect-schema.d.ts +34 -0
  109. package/dist/schemas/feature-effect-schema.js +1 -1
  110. package/dist/schemas/feature-schema.js +3 -3
  111. package/dist/spell/spell.codec.js +2 -2
  112. package/dist/spell/spell.parser.d.ts +6 -1
  113. package/dist/spell/spell.parser.js +5 -3
  114. package/dist/spell/spell.types.d.ts +10 -0
  115. package/dist/subclass/subclass.codec.js +6 -6
  116. package/dist/subclass/subclass.parser.js +5 -5
  117. package/dist/subclass/subclass.schema.js +4 -4
  118. package/dist/types/choice.d.ts +7 -2
  119. package/dist/types/feature-effect.d.ts +24 -0
  120. package/dist/types/optional-feature.types.d.ts +6 -1
  121. package/dist/types/selection-pool.d.ts +2 -2
  122. package/package.json +1 -1
@@ -1,9 +1,43 @@
1
+ import {
2
+ buildUnarmedRow,
3
+ computeAppliedBonuses,
4
+ computeSlotsAndAttacks,
5
+ emptyAppliedBonuses
6
+ } from "../chunk-7XJHI5H5.js";
7
+ import "../chunk-3LWMFYKS.js";
8
+ import "../chunk-YDGMBMYI.js";
9
+ import {
10
+ amountBindingsFor
11
+ } from "../chunk-TRBGC4ZG.js";
12
+ import "../chunk-KR6JF3BF.js";
13
+ import {
14
+ computeConditionEffects
15
+ } from "../chunk-MYY2C5MB.js";
16
+ import "../chunk-EJP263OP.js";
1
17
  import {
2
18
  collectChosenAbilityPoints,
3
19
  collectChosenProficiencies
4
- } from "../chunk-QEO7LYTG.js";
20
+ } from "../chunk-EJD47JHL.js";
5
21
  import "../chunk-2LULMQTF.js";
6
- import "../chunk-H5PTKYXL.js";
22
+ import "../chunk-QA3YCOML.js";
23
+ import {
24
+ assembleEffectFeatures,
25
+ computeFeatureEffects,
26
+ foldsNow,
27
+ selfEffectsOf
28
+ } from "../chunk-64VNLMSG.js";
29
+ import "../chunk-TOM66P2P.js";
30
+ import "../chunk-KU3YLF6D.js";
31
+ import {
32
+ proficiencyKey
33
+ } from "../chunk-5JXFJ5AU.js";
34
+ import {
35
+ featPickSites,
36
+ poolMemberSitesOf,
37
+ spellsReached
38
+ } from "../chunk-RD2MID3M.js";
39
+ import "../chunk-LICYHPI3.js";
40
+ import "../chunk-PVCEA4HZ.js";
7
41
  import {
8
42
  resourceLevelFor
9
43
  } from "../chunk-KSTV7J2U.js";
@@ -13,57 +47,39 @@ import {
13
47
  effectiveSpellcastingAbility,
14
48
  resolveSpellcasting
15
49
  } from "../chunk-DPUJDOKV.js";
50
+ import {
51
+ legacyAsiBranch
52
+ } from "../chunk-LBEXLN6I.js";
16
53
  import {
17
54
  toDefenseSlug
18
55
  } from "../chunk-XJ2F2WO6.js";
19
- import {
20
- buildUnarmedRow,
21
- computeAppliedBonuses,
22
- computeSlotsAndAttacks,
23
- emptyAppliedBonuses
24
- } from "../chunk-Q5XTEYHD.js";
25
- import "../chunk-YDGMBMYI.js";
26
- import {
27
- assembleEffectFeatures,
28
- computeFeatureEffects,
29
- foldsNow,
30
- selfEffectsOf
31
- } from "../chunk-4BZ47YJ4.js";
32
- import "../chunk-TOM66P2P.js";
33
- import "../chunk-KU3YLF6D.js";
34
- import "../chunk-RLGQ5PZZ.js";
35
- import "../chunk-T5GZBKIQ.js";
56
+ import "../chunk-NXUY5XQN.js";
36
57
  import "../chunk-W6GC6OKK.js";
37
- import "../chunk-HJQNK3J5.js";
58
+ import "../chunk-B3DP42OM.js";
38
59
  import {
39
60
  diceColumnAt,
40
61
  unarmedDieColumnFor
41
62
  } from "../chunk-IUAAXXNO.js";
42
63
  import "../chunk-YHYTW5QA.js";
43
- import "../chunk-DPM6V7YX.js";
44
- import "../chunk-PVCEA4HZ.js";
45
- import {
46
- legacyAsiBranch
47
- } from "../chunk-LBEXLN6I.js";
48
- import {
49
- computeConditionEffects
50
- } from "../chunk-MYY2C5MB.js";
51
- import "../chunk-EJP263OP.js";
52
64
  import "../chunk-ZUQW5VBZ.js";
53
65
  import "../chunk-IHE6KVC3.js";
54
66
  import "../chunk-HHBD4SQ6.js";
55
67
  import "../chunk-A54HHCWW.js";
56
68
  import "../chunk-LHZXYFBU.js";
69
+ import "../chunk-YBLDE5CG.js";
57
70
  import "../chunk-LVQLWRCU.js";
58
71
  import "../chunk-CM5CWO4K.js";
59
- import "../chunk-ZCTUYGNV.js";
60
- import "../chunk-YBLDE5CG.js";
72
+ import "../chunk-4J6DS3EJ.js";
61
73
  import {
62
- evaluateMaxFormula,
63
- isValidMaxFormula
64
- } from "../chunk-EVMUJYUD.js";
74
+ resolveAmountText
75
+ } from "../chunk-WOHX7YTH.js";
76
+ import "../chunk-EVMUJYUD.js";
65
77
  import "../chunk-VTTA2ALZ.js";
66
- import "../chunk-XY6X2APM.js";
78
+ import {
79
+ bareEntitySlug,
80
+ slugify
81
+ } from "../chunk-ZCTUYGNV.js";
82
+ import "../chunk-7Q2VPKCD.js";
67
83
  import "../chunk-ZDAEGJH4.js";
68
84
  import "../chunk-3TM34RSJ.js";
69
85
  import {
@@ -84,6 +100,60 @@ import {
84
100
  import "../chunk-4U55VNC7.js";
85
101
  import "../chunk-UA5KS2PL.js";
86
102
 
103
+ // src/pc/pc.spell-scope.ts
104
+ var lower = (s) => (s != null ? s : "").trim().toLowerCase();
105
+ function namedSpellSlug(ref) {
106
+ var _a;
107
+ const inner = ref.replace(/^\[\[/, "").replace(/\]\]$/, "").split("|")[0];
108
+ return slugify((_a = inner.split("/").pop()) != null ? _a : inner);
109
+ }
110
+ function dealsDamage(spell) {
111
+ var _a, _b;
112
+ return ((_b = (_a = spell.damage) == null ? void 0 : _a.types) != null ? _b : []).some((t) => t.trim() !== "");
113
+ }
114
+ function spellsInScope(scope, spells, pickedTypes) {
115
+ var _a, _b;
116
+ if (!scope) return [];
117
+ const picked = scope.damage_type_pick !== void 0 ? pickedTypes(scope.damage_type_pick).map(lower) : null;
118
+ const types = (_a = scope.damage_types) == null ? void 0 : _a.map(lower);
119
+ const named = (_b = scope.spells) == null ? void 0 : _b.map(namedSpellSlug);
120
+ const hit = spells.filter(({ slug, entity: e }) => {
121
+ var _a2, _b2, _c, _d, _e;
122
+ if (!dealsDamage(e)) return false;
123
+ const own = ((_b2 = (_a2 = e.damage) == null ? void 0 : _a2.types) != null ? _b2 : []).map(lower);
124
+ if (scope.list !== void 0 && !((_c = e.classes) != null ? _c : []).map(lower).includes(lower(scope.list))) return false;
125
+ if (scope.level !== void 0 && ((_d = e.level) != null ? _d : 0) !== scope.level) return false;
126
+ if (scope.school !== void 0 && lower(e.school) !== lower(scope.school)) return false;
127
+ if (types && !own.some((t) => types.includes(t))) return false;
128
+ if (picked && !own.some((t) => picked.includes(t))) return false;
129
+ if (named && !named.includes(bareEntitySlug(slug)) && !named.includes(slugify((_e = e.name) != null ? _e : ""))) return false;
130
+ return true;
131
+ });
132
+ return [...new Set(hit.map((s) => s.slug))];
133
+ }
134
+ function pickedDamageTypes(resolved, choiceId) {
135
+ var _a, _b, _c, _d, _e, _f;
136
+ const out = /* @__PURE__ */ new Set();
137
+ for (const c of (_a = resolved.classes) != null ? _a : []) {
138
+ for (const owner of [c.entity, c.subclass]) {
139
+ for (const [lvl, feats] of Object.entries((_b = owner == null ? void 0 : owner.features_by_level) != null ? _b : {})) {
140
+ for (const feat of feats != null ? feats : []) {
141
+ for (const ch of (_c = feat.choices) != null ? _c : []) {
142
+ if (ch.kind !== "select-inline" || ch.id !== choiceId) continue;
143
+ const sel = ((_e = (_d = c.choices) == null ? void 0 : _d[Number(lvl)]) != null ? _e : {})[ch.id];
144
+ if (typeof sel !== "string") continue;
145
+ const opt = ch.options.find((o) => o.value === sel);
146
+ for (const word of `${sel} ${(_f = opt == null ? void 0 : opt.label) != null ? _f : ""}`.split(/[^A-Za-z]+/)) {
147
+ if (word && isCanonicalDamageType(word)) out.add(word.toLowerCase());
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ return [...out];
155
+ }
156
+
87
157
  // src/pc/pc.recalc.ts
88
158
  var WEAPON_CATEGORY_WORDS = /* @__PURE__ */ new Set([
89
159
  "simple",
@@ -198,14 +268,9 @@ function hpLevelCount(classes) {
198
268
  function multiclassMaxHP(classes, conMod) {
199
269
  return Math.max(1, hitDiceAverageSum(classes) + conMod * hpLevelCount(classes));
200
270
  }
201
- function resolveRiderAmount(amount, bindings) {
202
- if (!amount.includes("{")) return amount;
203
- const formula = amount.replace(/\{prof_bonus\}/g, "{prof}");
204
- if (!isValidMaxFormula(formula)) return amount;
205
- return String(evaluateMaxFormula(formula, bindings));
206
- }
207
271
  function resolveDamageRider(rider, rowDamageType, bindings) {
208
- const out = { ...rider, amount: resolveRiderAmount(rider.amount, bindings) };
272
+ const { owner, ...rest } = rider;
273
+ const out = { ...rest, amount: resolveAmountText(rider.amount, bindings(owner)) };
209
274
  if (rider.damage_type !== void 0 && !isChosenDamageType(rider.damage_type)) {
210
275
  const resolved = isCanonicalDamageType(rider.damage_type) ? rider.damage_type : rowDamageType;
211
276
  if (resolved) out.damage_type = resolved;
@@ -359,17 +424,17 @@ function collectClassFeatAbilityPoints(resolved) {
359
424
  const stripRef = (ref) => ref.replace(/^\[\[/, "").replace(/\]\]$/, "");
360
425
  const featBySlug = /* @__PURE__ */ new Map();
361
426
  for (const f of resolved.feats) featBySlug.set(f.slug, f);
362
- for (const c of resolved.classes) {
363
- for (const atLevel of Object.values(c.choices)) {
364
- const block = atLevel;
365
- if (!block) continue;
366
- const featRef = block.feat;
367
- if (typeof featRef !== "string") continue;
368
- const feat = featBySlug.get(stripRef(featRef));
427
+ const sites = featPickSites(resolved.classes, poolMemberSitesOf(resolved), (ci) => {
428
+ var _a2, _b2, _c, _d;
429
+ return (_d = (_c = (_b2 = (_a2 = resolved.classes) == null ? void 0 : _a2[ci]) == null ? void 0 : _b2.entity) == null ? void 0 : _c.slug) != null ? _d : null;
430
+ });
431
+ for (const site of sites) {
432
+ {
433
+ const feat = featBySlug.get(stripRef(site.slug));
369
434
  if (!feat) continue;
370
435
  for (const ch of (_a = feat.choices) != null ? _a : []) {
371
436
  if (ch.kind !== "ability-points") continue;
372
- const raw = block[`feat:${ch.id}`];
437
+ const raw = site.read(ch.id);
373
438
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) continue;
374
439
  let left = ch.points;
375
440
  for (const ab of ABILITY_KEYS) {
@@ -449,6 +514,25 @@ function mergeInto(target, source) {
449
514
  for (const c of source.categories) if (!target.categories.includes(c)) target.categories.push(c);
450
515
  for (const s of source.specific) if (!target.specific.includes(s)) target.specific.push(s);
451
516
  }
517
+ function applyArmorWeaponOverrides(profs, overrides) {
518
+ var _a, _b;
519
+ for (const kind of ["armor", "weapons"]) {
520
+ const ov = overrides == null ? void 0 : overrides[kind];
521
+ if (!ov) continue;
522
+ const set = profs[kind];
523
+ const key = (v) => proficiencyKey(kind, v);
524
+ const removes = new Set(((_a = ov.remove) != null ? _a : []).map(key));
525
+ for (const v of (_b = ov.add) != null ? _b : []) {
526
+ const k = key(v);
527
+ if (removes.has(k)) continue;
528
+ const category = kind === "armor" || k === "simple" || k === "martial";
529
+ const target = category ? set.categories : set.specific;
530
+ if (!target.some((e) => key(e) === k)) target.push(category ? k : v);
531
+ }
532
+ set.categories = set.categories.filter((e) => !removes.has(key(e)));
533
+ set.specific = set.specific.filter((e) => !removes.has(key(e)));
534
+ }
535
+ }
452
536
  var ORIGIN_RANK = { manual: 0, equipment: 1, grant: 2 };
453
537
  function composeDefenseEntries(manual, equipment, grants) {
454
538
  var _a;
@@ -540,12 +624,23 @@ function computeProficiencies(resolved) {
540
624
  };
541
625
  }
542
626
  function recalc(resolved, registry) {
543
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z;
627
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$;
544
628
  const warnings = [];
545
629
  const overrides = (_a = resolved.definition.overrides) != null ? _a : {};
546
630
  const chosenProfs = collectChosenProficiencies(resolved);
547
631
  const { features: effectFeatures, activeBuffs } = assembleEffectFeatures(resolved);
548
- const featureEffects = computeFeatureEffects(effectFeatures, { activeBuffs, levelFor: (src) => resourceLevelFor(src, resolved) });
632
+ const tableDiceFor = (src, column, level) => {
633
+ var _a2;
634
+ const cls = src.kind === "class" ? resolved.classes.find((c) => {
635
+ var _a3;
636
+ return ((_a3 = c.entity) == null ? void 0 : _a3.slug) === src.slug;
637
+ }) : src.kind === "subclass" ? resolved.classes.find((c) => {
638
+ var _a3;
639
+ return ((_a3 = c.subclass) == null ? void 0 : _a3.slug) === src.slug;
640
+ }) : void 0;
641
+ return cls ? diceColumnAt((_a2 = cls.entity) == null ? void 0 : _a2.table, level, column) : null;
642
+ };
643
+ const featureEffects = computeFeatureEffects(effectFeatures, { activeBuffs, levelFor: (src) => resourceLevelFor(src, resolved), tableDiceFor });
549
644
  const profsForApply = computeProficiencies(resolved);
550
645
  for (const t of chosenProfs.tools) {
551
646
  if (!profsForApply.tools.specific.includes(t)) profsForApply.tools.specific.push(t);
@@ -572,6 +667,7 @@ function recalc(resolved, registry) {
572
667
  }
573
668
  }
574
669
  profsForApply.languages.sort();
670
+ applyArmorWeaponOverrides(profsForApply, (_b = resolved.definition) == null ? void 0 : _b.overrides);
575
671
  const applied = registry ? computeAppliedBonuses(resolved, profsForApply, registry, warnings) : emptyAppliedBonuses();
576
672
  const savesInformational = applied.informational.filter(
577
673
  (i) => i.field === "saving_throws"
@@ -586,7 +682,7 @@ function recalc(resolved, registry) {
586
682
  const scores = { ...baseScores };
587
683
  for (const ab of ABILITY_KEYS) {
588
684
  const bonus = applied.ability_bonuses[ab];
589
- scores[ab] += (typeof bonus === "number" ? bonus : 0) + ((_b = featureEffects.ability_bonus[ab]) != null ? _b : 0);
685
+ scores[ab] += (typeof bonus === "number" ? bonus : 0) + ((_c = featureEffects.ability_bonus[ab]) != null ? _c : 0);
590
686
  }
591
687
  for (const ab of ABILITY_KEYS) {
592
688
  const stat = applied.ability_statics[ab];
@@ -613,28 +709,41 @@ function recalc(resolved, registry) {
613
709
  resolved.definition.edition,
614
710
  scores
615
711
  );
616
- const firstClass = (_d = (_c = resolved.classes[0]) == null ? void 0 : _c.entity) != null ? _d : null;
617
- const saveProfs = new Set((_e = firstClass == null ? void 0 : firstClass.saving_throws) != null ? _e : []);
712
+ const firstClass = (_e = (_d = resolved.classes[0]) == null ? void 0 : _d.entity) != null ? _e : null;
713
+ const saveProfs = new Set((_f = firstClass == null ? void 0 : firstClass.saving_throws) != null ? _f : []);
618
714
  for (const ab of featureEffects.proficiencies.saves) saveProfs.add(ab);
619
715
  for (const ab of chosenProfs.saves) saveProfs.add(ab);
620
716
  const saves = {};
621
717
  const saveBreakdowns = {};
718
+ const activeSaveBonusTerms = featureEffects.save_bonus_terms.filter((t) => {
719
+ var _a2;
720
+ return t.inactiveWhile === "incapacitated" ? !conditionEffects.actions_disabled : t.inactiveWhile === "unconscious" ? !((_a2 = resolved.state.conditions) != null ? _a2 : []).includes("unconscious") : true;
721
+ });
622
722
  for (const ab of ABILITY_KEYS) {
623
- const override = (_f = overrides.saves) == null ? void 0 : _f[ab];
624
- const prof = (_g = override == null ? void 0 : override.proficient) != null ? _g : saveProfs.has(ab);
625
- const derivedBonus = savingThrow(scores[ab], prof, proficiencyBonus) + applied.save_bonus + conditionEffects.d20_test_penalty;
626
- const bonus = (_h = override == null ? void 0 : override.bonus) != null ? _h : derivedBonus;
723
+ const override = (_g = overrides.saves) == null ? void 0 : _g[ab];
724
+ const prof = (_h = override == null ? void 0 : override.proficient) != null ? _h : saveProfs.has(ab);
725
+ const featureTerms = [];
726
+ for (const t of activeSaveBonusTerms) {
727
+ if (t.saves.length > 0 && !t.saves.includes(ab)) continue;
728
+ const amount = Math.max(t.minimum, mods[t.ability]);
729
+ const prior = featureTerms.find((x) => x.source === t.label);
730
+ if (prior === void 0) featureTerms.push({ source: t.label, amount });
731
+ else if (amount > prior.amount) prior.amount = amount;
732
+ }
733
+ const derivedBonus = savingThrow(scores[ab], prof, proficiencyBonus) + applied.save_bonus + featureTerms.reduce((sum, t) => sum + t.amount, 0) + conditionEffects.d20_test_penalty;
734
+ const bonus = (_i = override == null ? void 0 : override.bonus) != null ? _i : derivedBonus;
627
735
  saves[ab] = { bonus, proficient: prof };
628
736
  saveBreakdowns[ab] = [
629
737
  { source: ab.toUpperCase(), amount: mods[ab] },
630
738
  ...prof ? [{ source: "Proficiency", amount: proficiencyBonus }] : [],
631
- ...applied.save_bonus ? [{ source: "Equipment", amount: applied.save_bonus }] : [],
632
- ...conditionEffects.d20_test_penalty ? [{ source: "Conditions", amount: conditionEffects.d20_test_penalty }] : []
739
+ ...applied.save_terms.map((t) => ({ ...t })),
740
+ ...featureTerms,
741
+ ...conditionEffects.d20_test_penalty ? [{ source: `Exhaustion ${conditionEffects.exhaustion_level}`, amount: conditionEffects.d20_test_penalty }] : []
633
742
  ];
634
743
  }
635
744
  const profSet = /* @__PURE__ */ new Set([
636
745
  ...resolved.definition.skills.proficient,
637
- ...(_j = (_i = resolved.background) == null ? void 0 : _i.skill_proficiencies) != null ? _j : [],
746
+ ...(_k = (_j = resolved.background) == null ? void 0 : _j.skill_proficiencies) != null ? _k : [],
638
747
  ...chosenProfs.skills,
639
748
  ...featureEffects.proficiencies.skills
640
749
  ]);
@@ -644,12 +753,12 @@ function recalc(resolved, registry) {
644
753
  for (const skill of ALL_SKILLS) {
645
754
  const skillKey = skillSlugFromDisplay(skill);
646
755
  const ab = SKILL_ABILITY[skillSlugToAbilityLookup(skillKey)];
647
- const override = (_k = overrides.skills) == null ? void 0 : _k[skillKey];
648
- const tri = (_l = override == null ? void 0 : override.proficiency) != null ? _l : expSet.has(skillKey) ? "expertise" : profSet.has(skillKey) ? "proficient" : "none";
756
+ const override = (_l = overrides.skills) == null ? void 0 : _l[skillKey];
757
+ const tri = (_m = override == null ? void 0 : override.proficiency) != null ? _m : expSet.has(skillKey) ? "expertise" : profSet.has(skillKey) ? "proficient" : "none";
649
758
  const skillTerms = featureEffects.skill_bonus_terms.filter((t) => t.skills.includes(skillKey)).map((t) => ({ source: t.label, amount: Math.max(t.minimum, mods[t.ability]) }));
650
759
  const halfProfTerms = tri !== "none" ? [] : featureEffects.half_proficiency_terms.filter((t) => t.skills.length === 0 || t.skills.includes(skillKey)).map((t) => ({ source: t.label, amount: t.round === "up" ? Math.ceil(proficiencyBonus / 2) : Math.floor(proficiencyBonus / 2) }));
651
760
  const halfProfBest = halfProfTerms.length ? halfProfTerms.reduce((best, t) => t.amount > best.amount ? t : best) : null;
652
- const bonus = (_n = override == null ? void 0 : override.bonus) != null ? _n : skillBonus(scores[ab], tri, proficiencyBonus) + skillTerms.reduce((sum, t) => sum + t.amount, 0) + ((_m = halfProfBest == null ? void 0 : halfProfBest.amount) != null ? _m : 0) + conditionEffects.d20_test_penalty;
761
+ const bonus = (_o = override == null ? void 0 : override.bonus) != null ? _o : skillBonus(scores[ab], tri, proficiencyBonus) + skillTerms.reduce((sum, t) => sum + t.amount, 0) + ((_n = halfProfBest == null ? void 0 : halfProfBest.amount) != null ? _n : 0) + conditionEffects.d20_test_penalty;
653
762
  skillBreakdowns[skillKey] = [
654
763
  { source: ab.toUpperCase(), amount: mods[ab] },
655
764
  ...tri !== "none" ? [{ source: tri === "expertise" ? "Expertise" : "Proficiency", amount: proficiencyBonus * (tri === "expertise" ? 2 : 1) }] : [],
@@ -665,12 +774,12 @@ function recalc(resolved, registry) {
665
774
  };
666
775
  }
667
776
  const passives = {
668
- perception: (_p = (_o = overrides.passives) == null ? void 0 : _o.perception) != null ? _p : 10 + skills.perception.bonus,
669
- investigation: (_r = (_q = overrides.passives) == null ? void 0 : _q.investigation) != null ? _r : 10 + skills.investigation.bonus,
670
- insight: (_t = (_s = overrides.passives) == null ? void 0 : _s.insight) != null ? _t : 10 + skills.insight.bonus
777
+ perception: (_q = (_p = overrides.passives) == null ? void 0 : _p.perception) != null ? _q : 10 + skills.perception.bonus,
778
+ investigation: (_s = (_r = overrides.passives) == null ? void 0 : _r.investigation) != null ? _s : 10 + skills.investigation.bonus,
779
+ insight: (_u = (_t = overrides.passives) == null ? void 0 : _t.insight) != null ? _u : 10 + skills.insight.bonus
671
780
  };
672
- const hpRolled = (_v = (_u = overrides.hp) == null ? void 0 : _u.rolled) != null ? _v : null;
673
- const hpModifier = (_x = (_w = overrides.hp) == null ? void 0 : _w.modifier) != null ? _x : null;
781
+ const hpRolled = (_w = (_v = overrides.hp) == null ? void 0 : _v.rolled) != null ? _w : null;
782
+ const hpModifier = (_y = (_x = overrides.hp) == null ? void 0 : _x.modifier) != null ? _y : null;
674
783
  const averageDiceSum = hitDiceAverageSum(resolved.classes);
675
784
  const conLevels = hpLevelCount(resolved.classes);
676
785
  const diceSum = hpRolled != null ? hpRolled : averageDiceSum;
@@ -678,7 +787,7 @@ function recalc(resolved, registry) {
678
787
  const diceConClamped = Math.max(1, diceConRaw);
679
788
  const hpMaxDerived = diceConClamped + featureEffects.hp_per_level_bonus * totalLevel + (hpModifier != null ? hpModifier : 0);
680
789
  const hpMaxAfterConditions = Math.max(0, Math.floor(hpMaxDerived * conditionEffects.hp_max_multiplier));
681
- const hpMax = (_z = (_y = overrides.hp) == null ? void 0 : _y.max) != null ? _z : hpMaxAfterConditions;
790
+ const hpMax = (_A = (_z = overrides.hp) == null ? void 0 : _z.max) != null ? _A : hpMaxAfterConditions;
682
791
  const hpBreakdown = {
683
792
  diceSum,
684
793
  diceSource: hpRolled != null ? "rolled" : "average",
@@ -696,7 +805,7 @@ function recalc(resolved, registry) {
696
805
  exhaustionMultiplier: conditionEffects.hp_max_multiplier,
697
806
  exhaustionLevel: conditionEffects.exhaustion_level,
698
807
  derivedMax: hpMaxAfterConditions,
699
- override: (_B = (_A = overrides.hp) == null ? void 0 : _A.max) != null ? _B : null,
808
+ override: (_C = (_B = overrides.hp) == null ? void 0 : _B.max) != null ? _C : null,
700
809
  final: hpMax
701
810
  };
702
811
  const featureAcTermsFor = (hasArmor) => featureEffects.ac_terms.filter((t) => !t.requires_armor || hasArmor).map((t) => ({ source: t.label, amount: t.value, kind: "feature", condition: t.condition }));
@@ -720,7 +829,7 @@ function recalc(resolved, registry) {
720
829
  let acBreakdownDerived = [];
721
830
  let acInformationalDerived = [];
722
831
  if (registry) {
723
- derivedEquipment = computeSlotsAndAttacks(resolved, mods, profsForApply, registry, warnings, proficiencyBonus, weaponAbilities, (_C = resolved.weaponMasteries) != null ? _C : [], featureEffects.attunement_set);
832
+ derivedEquipment = computeSlotsAndAttacks(resolved, mods, profsForApply, registry, warnings, proficiencyBonus, weaponAbilities, (_D = resolved.weaponMasteries) != null ? _D : [], featureEffects.attunement_set);
724
833
  if (derivedEquipment.equippedSlots.armor) {
725
834
  const featTerms = featureAcTermsFor(true);
726
835
  acDerived = derivedEquipment.ac + sumTerms(featTerms);
@@ -744,13 +853,13 @@ function recalc(resolved, registry) {
744
853
  acDerived = total + sumTerms(featTerms);
745
854
  acBreakdownDerived = [...terms, ...featTerms];
746
855
  }
747
- const ac = (_D = overrides.ac) != null ? _D : acDerived;
856
+ const ac = (_E = overrides.ac) != null ? _E : acDerived;
748
857
  const additiveSpeed = speedFromRace(resolved) + applied.speed_bonuses.walk + featureEffects.speed_walk_bonus;
749
858
  const baseSpeed = Math.max(featureEffects.speed_walk_set, additiveSpeed);
750
859
  const adjustedSpeed = baseSpeed * conditionEffects.speed_multiplier - conditionEffects.speed_reduction_ft;
751
860
  const conditionSpeed = conditionEffects.speed_floor_zero ? 0 : Math.max(0, Math.floor(adjustedSpeed));
752
- const speed = (_E = overrides.speed) != null ? _E : conditionSpeed;
753
- const raceSpeed = (_H = (_G = (_F = resolved.race) == null ? void 0 : _F.speed) == null ? void 0 : _G.walk) != null ? _H : 30;
861
+ const speed = (_F = overrides.speed) != null ? _F : conditionSpeed;
862
+ const raceSpeed = (_I = (_H = (_G = resolved.race) == null ? void 0 : _G.speed) == null ? void 0 : _H.walk) != null ? _I : 30;
754
863
  const speedBreakdown = [
755
864
  { source: "Base speed", amount: raceSpeed },
756
865
  ...speedFromRace(resolved) !== raceSpeed ? [{ source: "Feats", amount: speedFromRace(resolved) - raceSpeed }] : [],
@@ -760,14 +869,14 @@ function recalc(resolved, registry) {
760
869
  ...conditionSpeed !== baseSpeed ? [{ source: "Conditions", amount: conditionSpeed - baseSpeed }] : []
761
870
  ];
762
871
  if (!resolved.race) warnings.push("No race resolved; speed defaulted to 30.");
763
- const init = (_I = overrides.initiative) != null ? _I : initiativeBonus(mods.dex, resolved.feats, resolved.definition.edition) + featureEffects.initiative_bonus;
872
+ const init = (_J = overrides.initiative) != null ? _J : initiativeBonus(mods.dex, resolved.feats, resolved.definition.edition) + featureEffects.initiative_bonus;
764
873
  const initiativeBreakdown = [
765
874
  { source: "DEX", amount: mods.dex },
766
875
  ...initiativeBonus(mods.dex, resolved.feats, resolved.definition.edition) !== mods.dex ? [{ source: "Feats", amount: initiativeBonus(mods.dex, resolved.feats, resolved.definition.edition) - mods.dex }] : [],
767
876
  ...featureEffects.initiative_terms.map((term) => ({ source: term.label, amount: term.value }))
768
877
  ];
769
878
  const senses = {
770
- darkvision: Math.max((_L = (_K = (_J = resolved.race) == null ? void 0 : _J.vision) == null ? void 0 : _K.darkvision) != null ? _L : 0, featureEffects.senses.darkvision, applied.senses.darkvision),
879
+ darkvision: Math.max((_M = (_L = (_K = resolved.race) == null ? void 0 : _K.vision) == null ? void 0 : _L.darkvision) != null ? _M : 0, featureEffects.senses.darkvision, applied.senses.darkvision),
771
880
  blindsight: Math.max(featureEffects.senses.blindsight, applied.senses.blindsight),
772
881
  tremorsense: Math.max(featureEffects.senses.tremorsense, applied.senses.tremorsense),
773
882
  truesight: Math.max(featureEffects.senses.truesight, applied.senses.truesight)
@@ -814,39 +923,42 @@ function recalc(resolved, registry) {
814
923
  const spellLimits = computeSpellLimits(limitInputs);
815
924
  const defenses = {
816
925
  resistances: suppress(resolved, "resistances", composeDefenseEntries(
817
- (_N = (_M = resolved.definition.defenses) == null ? void 0 : _M.resistances) != null ? _N : [],
926
+ (_O = (_N = resolved.definition.defenses) == null ? void 0 : _N.resistances) != null ? _O : [],
818
927
  applied.defenses.resistances,
819
928
  featureEffects.resistances
820
929
  )),
821
930
  immunities: suppress(resolved, "immunities", composeDefenseEntries(
822
- (_P = (_O = resolved.definition.defenses) == null ? void 0 : _O.immunities) != null ? _P : [],
931
+ (_Q = (_P = resolved.definition.defenses) == null ? void 0 : _P.immunities) != null ? _Q : [],
823
932
  applied.defenses.immunities,
824
933
  featureEffects.immunities
825
934
  )),
826
935
  vulnerabilities: suppress(resolved, "vulnerabilities", composeDefenseEntries(
827
- (_R = (_Q = resolved.definition.defenses) == null ? void 0 : _Q.vulnerabilities) != null ? _R : [],
936
+ (_S = (_R = resolved.definition.defenses) == null ? void 0 : _R.vulnerabilities) != null ? _S : [],
828
937
  applied.defenses.vulnerabilities,
829
938
  featureEffects.vulnerabilities
830
939
  )),
831
940
  condition_immunities: suppress(resolved, "condition_immunities", composeDefenseEntries(
832
- (_T = (_S = resolved.definition.defenses) == null ? void 0 : _S.condition_immunities) != null ? _T : [],
941
+ (_U = (_T = resolved.definition.defenses) == null ? void 0 : _T.condition_immunities) != null ? _U : [],
833
942
  applied.defenses.condition_immunities,
834
943
  featureEffects.condition_immunities
835
944
  ))
836
945
  };
837
- const attackRows = [...(_U = derivedEquipment == null ? void 0 : derivedEquipment.attacks) != null ? _U : [], buildUnarmedRow(mods, proficiencyBonus, resolveUnarmedStrike(resolved))];
838
- const riderBindings = {
839
- level: totalLevel,
840
- class_level: totalLevel,
841
- prof: proficiencyBonus,
842
- str_mod: mods.str,
843
- dex_mod: mods.dex,
844
- con_mod: mods.con,
845
- int_mod: mods.int,
846
- wis_mod: mods.wis,
847
- cha_mod: mods.cha,
848
- columns: {}
849
- };
946
+ const attackRows = [...(_V = derivedEquipment == null ? void 0 : derivedEquipment.attacks) != null ? _V : [], buildUnarmedRow(mods, proficiencyBonus, resolveUnarmedStrike(resolved))];
947
+ const riderBindings = (owner) => amountBindingsFor(owner, resolved, { proficiencyBonus, mods, spellcastingClasses });
948
+ const ownSpells = (_W = resolved.spells) != null ? _W : [];
949
+ const spellDamageRiders = featureEffects.spellDamageBonuses.flatMap((r) => {
950
+ const reached = /* @__PURE__ */ new Set([...spellsReached(r.targets, ownSpells), ...spellsInScope(r.scope, ownSpells, (id) => pickedDamageTypes(resolved, id))]);
951
+ const spells = [...new Set(ownSpells.map((s) => s.slug))].filter((slug) => reached.has(slug));
952
+ if (!spells.length) return [];
953
+ const { owner, targets: _targets, scope, damage_type, ...rest } = r;
954
+ return [{
955
+ ...rest,
956
+ amount: resolveAmountText(r.amount, riderBindings(owner)),
957
+ ...damage_type && isCanonicalDamageType(damage_type) ? { damage_type } : {},
958
+ ...(scope == null ? void 0 : scope.once) ? { once: true } : {},
959
+ spells
960
+ }];
961
+ });
850
962
  return {
851
963
  totalLevel,
852
964
  proficiencyBonus,
@@ -898,10 +1010,11 @@ function recalc(resolved, registry) {
898
1010
  ...riders.length ? { damageRiders: riders } : {}
899
1011
  };
900
1012
  }),
901
- equippedSlots: (_V = derivedEquipment == null ? void 0 : derivedEquipment.equippedSlots) != null ? _V : {},
902
- carriedWeight: (_W = derivedEquipment == null ? void 0 : derivedEquipment.carriedWeight) != null ? _W : 0,
903
- attunementUsed: (_X = derivedEquipment == null ? void 0 : derivedEquipment.attunementUsed) != null ? _X : 0,
904
- attunementLimit: (_Z = derivedEquipment == null ? void 0 : derivedEquipment.attunementLimit) != null ? _Z : (_Y = overrides.attunement_limit) != null ? _Y : Math.max(3, featureEffects.attunement_set),
1013
+ ...spellDamageRiders.length ? { spellDamageRiders } : {},
1014
+ equippedSlots: (_X = derivedEquipment == null ? void 0 : derivedEquipment.equippedSlots) != null ? _X : {},
1015
+ carriedWeight: (_Y = derivedEquipment == null ? void 0 : derivedEquipment.carriedWeight) != null ? _Y : 0,
1016
+ attunementUsed: (_Z = derivedEquipment == null ? void 0 : derivedEquipment.attunementUsed) != null ? _Z : 0,
1017
+ attunementLimit: (_$ = derivedEquipment == null ? void 0 : derivedEquipment.attunementLimit) != null ? _$ : (__ = overrides.attunement_limit) != null ? __ : Math.max(3, featureEffects.attunement_set),
905
1018
  conditionEffects,
906
1019
  rollModifiers: featureEffects.rollModifiers,
907
1020
  saveOutcomes: featureEffects.saveOutcomes
@@ -4,6 +4,7 @@ import type { BackgroundEntity } from "@archivist-gg/dnd5e/background/background
4
4
  import type { FeatEntity } from "@archivist-gg/dnd5e/feat/feat.types";
5
5
  import type { Ability } from "@archivist-gg/dnd5e";
6
6
  import type { Character, ChoiceValue, ResolvedCharacter, ResolvedClass, ResolvedFeature, ResolvedSpell, FeatVia } from "./pc.types.js";
7
+ import { type PoolMemberSite } from "./pc.member-choices.js";
7
8
  export interface ResolveResult {
8
9
  character: ResolvedCharacter;
9
10
  warnings: string[];
@@ -113,7 +114,10 @@ export declare function collectItemGrantedSpells(character: Character, ownAbilit
113
114
  * never lost. Item-source spells carry INSTANCE identity: they key by
114
115
  * `slug + "#" + entryIndex`, so two scrolls of one spell stay two rows and a scroll of
115
116
  * a class-known spell keeps its OWN item row, never collapsing into / being collapsed
116
- * by a class/feat copy. The class/feat slug-only merge is unchanged.
117
+ * by a class/feat copy. The class/feat slug-only merge is unchanged. An AT-WILL copy (a pool member's innate grant) keys
118
+ * by `slug + "#atwill"` (review D1, coordinator ruling 2026-09-28): it is a row of its own beside a copy the character
119
+ * already has (the slotted cast can upcast and target others), neither row's flags cross to the other, and two at-will
120
+ * copies of one spell are still one row.
117
121
  */
118
122
  export declare function dedupeResolvedSpells(spells: ResolvedSpell[]): ResolvedSpell[];
119
123
  /** Selected select-entity values (optional-features) and selected inline
@@ -126,7 +130,7 @@ export declare function collectChosenGrantedFeatures(character: Character, class
126
130
  getByTypeAndSlug(type: string, slug: string): {
127
131
  data: Record<string, unknown>;
128
132
  } | undefined;
129
- }, race?: RaceEntity | null, background?: BackgroundEntity | null): ResolvedFeature[];
133
+ }, race?: RaceEntity | null, background?: BackgroundEntity | null, memberSites?: PoolMemberSite[]): ResolvedFeature[];
130
134
  /**
131
135
  * `character.additional_features` → ResolvedFeatures (the DM-grant path).
132
136
  *
@@ -10,33 +10,35 @@ import {
10
10
  dedupeResolvedSpells,
11
11
  resolveOriginFeat,
12
12
  stripSlug
13
- } from "../chunk-QEO7LYTG.js";
13
+ } from "../chunk-EJD47JHL.js";
14
14
  import "../chunk-2LULMQTF.js";
15
- import "../chunk-H5PTKYXL.js";
16
- import "../chunk-KSTV7J2U.js";
17
- import "../chunk-DPUJDOKV.js";
18
- import "../chunk-4BZ47YJ4.js";
15
+ import "../chunk-QA3YCOML.js";
16
+ import "../chunk-64VNLMSG.js";
19
17
  import "../chunk-TOM66P2P.js";
20
18
  import "../chunk-KU3YLF6D.js";
21
- import "../chunk-RLGQ5PZZ.js";
22
- import "../chunk-T5GZBKIQ.js";
19
+ import "../chunk-5JXFJ5AU.js";
20
+ import "../chunk-RD2MID3M.js";
21
+ import "../chunk-LICYHPI3.js";
22
+ import "../chunk-PVCEA4HZ.js";
23
+ import "../chunk-KSTV7J2U.js";
24
+ import "../chunk-DPUJDOKV.js";
25
+ import "../chunk-LBEXLN6I.js";
26
+ import "../chunk-NXUY5XQN.js";
23
27
  import "../chunk-W6GC6OKK.js";
24
- import "../chunk-HJQNK3J5.js";
28
+ import "../chunk-B3DP42OM.js";
25
29
  import "../chunk-IUAAXXNO.js";
26
30
  import "../chunk-YHYTW5QA.js";
27
- import "../chunk-DPM6V7YX.js";
28
- import "../chunk-PVCEA4HZ.js";
29
- import "../chunk-LBEXLN6I.js";
30
31
  import "../chunk-ZUQW5VBZ.js";
31
32
  import "../chunk-IHE6KVC3.js";
32
33
  import "../chunk-LHZXYFBU.js";
34
+ import "../chunk-YBLDE5CG.js";
33
35
  import "../chunk-LVQLWRCU.js";
34
36
  import "../chunk-CM5CWO4K.js";
35
- import "../chunk-ZCTUYGNV.js";
36
- import "../chunk-YBLDE5CG.js";
37
+ import "../chunk-4J6DS3EJ.js";
37
38
  import "../chunk-EVMUJYUD.js";
38
39
  import "../chunk-VTTA2ALZ.js";
39
- import "../chunk-XY6X2APM.js";
40
+ import "../chunk-ZCTUYGNV.js";
41
+ import "../chunk-7Q2VPKCD.js";
40
42
  import "../chunk-ZDAEGJH4.js";
41
43
  import "../chunk-3TM34RSJ.js";
42
44
  import "../chunk-PDJSUH24.js";
@@ -5,18 +5,19 @@ import "../chunk-DPUJDOKV.js";
5
5
  import {
6
6
  effectiveItemCharges,
7
7
  effectiveItemRecovery
8
- } from "../chunk-T5GZBKIQ.js";
8
+ } from "../chunk-NXUY5XQN.js";
9
9
  import "../chunk-W6GC6OKK.js";
10
- import "../chunk-HJQNK3J5.js";
10
+ import "../chunk-B3DP42OM.js";
11
11
  import "../chunk-IUAAXXNO.js";
12
12
  import "../chunk-ZUQW5VBZ.js";
13
13
  import "../chunk-IHE6KVC3.js";
14
14
  import "../chunk-LHZXYFBU.js";
15
15
  import "../chunk-LVQLWRCU.js";
16
16
  import "../chunk-CM5CWO4K.js";
17
- import "../chunk-ZCTUYGNV.js";
17
+ import "../chunk-4J6DS3EJ.js";
18
18
  import "../chunk-EVMUJYUD.js";
19
19
  import "../chunk-VTTA2ALZ.js";
20
+ import "../chunk-ZCTUYGNV.js";
20
21
  import "../chunk-3TM34RSJ.js";
21
22
  import "../chunk-PDJSUH24.js";
22
23
  import "../chunk-WELIKLZF.js";