playlist-data-engine 1.5.0 → 1.5.1

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.
@@ -33,7 +33,7 @@ function _r(s, e) {
33
33
  `downbeatBeatIndex ${t.downbeatBeatIndex} exceeds total beats ${e}`
34
34
  );
35
35
  }
36
- function Lv(s, e) {
36
+ function Wv(s, e) {
37
37
  Sr(e), _r(e, s.beats.length);
38
38
  const t = fl(e.segments, s.beats.length), i = s.beats.map((n, a) => {
39
39
  const r = pl(e.segments, a), o = e.segments[r], { downbeatBeatIndex: c, timeSignature: l } = o, { beatsPerMeasure: u } = l, d = a - c, h = (d % u + u) % u, m = h === 0, p = Math.max(0, Math.floor(d / u)) + t[r];
@@ -163,7 +163,7 @@ const ii = {
163
163
  customThresholds: {},
164
164
  useInterpolatedBeats: !1,
165
165
  ignoreKeyRequirements: !1
166
- }, Wv = Tr;
166
+ }, Hv = Tr;
167
167
  function Cn(s) {
168
168
  switch (s) {
169
169
  case "easy":
@@ -190,7 +190,7 @@ const Sl = {
190
190
  minClusterBeats: 4,
191
191
  enableMultiTempo: !1
192
192
  };
193
- function Hv(s) {
193
+ function qv(s) {
194
194
  const e = [], t = ["perfect", "great", "good", "ok"];
195
195
  for (const n of t)
196
196
  if (n in s) {
@@ -282,7 +282,7 @@ function _l(s, e) {
282
282
  for (const [t] of s.beatSubdivisions)
283
283
  ;
284
284
  }
285
- function qv(s) {
285
+ function Gv(s) {
286
286
  const e = Ir(s);
287
287
  if (e > Ga)
288
288
  throw new Error(
@@ -325,7 +325,7 @@ function Al(s) {
325
325
  const n = t.maxHotness - t.minHotness, r = (s - t.minHotness) / n, o = t.windowMs - i.windowMs;
326
326
  return t.windowMs - o * r;
327
327
  }
328
- function Gv(s) {
328
+ function Uv(s) {
329
329
  return _t.find((t) => t.tier === s)?.minHotness ?? 0;
330
330
  }
331
331
  const kl = {
@@ -430,7 +430,7 @@ function Nl(s, e, t) {
430
430
  }
431
431
  return s + i;
432
432
  }
433
- function Uv(s) {
433
+ function Vv(s) {
434
434
  const e = {
435
435
  version: s.chartMetadata.seed ?? "1.0.0",
436
436
  algorithm: "procedural-generation",
@@ -461,7 +461,7 @@ function Uv(s) {
461
461
  downbeatConfig: s.downbeatConfig
462
462
  };
463
463
  }
464
- function Vv(s, e) {
464
+ function jv(s, e) {
465
465
  const t = [], i = s.trackId === e.id, n = s.title.trim().toLowerCase() === e.title.trim().toLowerCase(), a = s.artist.trim().toLowerCase() === e.artist.trim().toLowerCase();
466
466
  return i || n && a ? { matches: !0, mismatchDetails: [] } : (i || t.push(`Track ID: expected "${s.trackId}", got "${e.id}"`), n || t.push(`Title: expected "${s.title}", got "${e.title}"`), a || t.push(`Artist: expected "${s.artist}", got "${e.artist}"`), {
467
467
  matches: !1,
@@ -502,13 +502,13 @@ const Ol = {
502
502
  9: "IX",
503
503
  10: "X"
504
504
  }, ni = 10, zl = 10, Ll = 1e3, Va = 1.5;
505
- function jv(s) {
505
+ function Kv(s) {
506
506
  return typeof s == "number" && Number.isInteger(s) && s >= 0 && s <= 10;
507
507
  }
508
508
  function Wl(s) {
509
509
  return Math.max(0, Math.min(10, Math.floor(s)));
510
510
  }
511
- function Kv(s) {
511
+ function Yv(s) {
512
512
  return typeof s == "string" && ["normal", "aggressive"].includes(s);
513
513
  }
514
514
  const Vt = {
@@ -3077,13 +3077,13 @@ function Ul() {
3077
3077
  }
3078
3078
  var Vl = Ul();
3079
3079
  const jl = /* @__PURE__ */ xr(Vl);
3080
- function Yv(s, e, t) {
3080
+ function Zv(s, e, t) {
3081
3081
  return `${s}-${e}-${t}`;
3082
3082
  }
3083
3083
  function ht(s) {
3084
3084
  return jl(s, 0) / 4294967295;
3085
3085
  }
3086
- function Zv(s, e, t) {
3086
+ function Xv(s, e, t) {
3087
3087
  const i = ht(s);
3088
3088
  return Math.floor(i * (t - e)) + e;
3089
3089
  }
@@ -3220,7 +3220,7 @@ const Kl = {
3220
3220
  13: 1,
3221
3221
  14: 1,
3222
3222
  15: 1
3223
- }, Xv = {
3223
+ }, Jv = {
3224
3224
  /** Default tuning factor (no adjustment) */
3225
3225
  DEFAULT: 1,
3226
3226
  /** 10% easier encounters */
@@ -3254,13 +3254,13 @@ function Pr(s) {
3254
3254
  }
3255
3255
  return n;
3256
3256
  }
3257
- function Jv(s, e = 1) {
3257
+ function Qv(s, e = 1) {
3258
3258
  return Math.round(s * e);
3259
3259
  }
3260
3260
  function ki(s) {
3261
3261
  return s <= 0 ? 1 : s >= 15 ? Ya[15] : Ya[s] || 1;
3262
3262
  }
3263
- function Qv(s, e) {
3263
+ function eb(s, e) {
3264
3264
  const t = s.reduce((n, a) => n + Rr(a), 0), i = e !== void 0 ? e : ki(s.length);
3265
3265
  return Math.round(t * i);
3266
3266
  }
@@ -3269,7 +3269,7 @@ function Zl(s) {
3269
3269
  const e = s.reduce((t, i) => t + i, 0);
3270
3270
  return Math.floor(e / s.length);
3271
3271
  }
3272
- function eb(s) {
3272
+ function tb(s) {
3273
3273
  return typeof s == "string" && ["easy", "medium", "hard", "deadly"].includes(s);
3274
3274
  }
3275
3275
  class Xl {
@@ -6079,13 +6079,13 @@ const iu = [
6079
6079
  ...ru,
6080
6080
  ...ou
6081
6081
  ];
6082
- function tb(s) {
6082
+ function ib(s) {
6083
6083
  return jt.find((e) => e.id === s);
6084
6084
  }
6085
- function ib(s) {
6085
+ function nb(s) {
6086
6086
  return jt.filter((e) => e.category === s);
6087
6087
  }
6088
- function nb(s) {
6088
+ function ab(s) {
6089
6089
  return jt.filter((e) => e.archetype === s);
6090
6090
  }
6091
6091
  const Br = {
@@ -6121,13 +6121,13 @@ const Br = {
6121
6121
  function wt(s) {
6122
6122
  return Br[s];
6123
6123
  }
6124
- function ab(s) {
6124
+ function sb(s) {
6125
6125
  return `1d${Br[s].signatureDieSize}`;
6126
6126
  }
6127
6127
  function lu() {
6128
6128
  return ["common", "uncommon", "elite", "boss"];
6129
6129
  }
6130
- function sb(s) {
6130
+ function rb(s) {
6131
6131
  const e = lu(), t = e.indexOf(s);
6132
6132
  if (!(t === -1 || t === e.length - 1))
6133
6133
  return e[t + 1];
@@ -6502,16 +6502,16 @@ class It {
6502
6502
  return /^[a-z][a-z0-9_]*$/.test(e);
6503
6503
  }
6504
6504
  }
6505
- function rb(s, e) {
6505
+ function ob(s, e) {
6506
6506
  return It.validateClassFeature(s, e);
6507
6507
  }
6508
- function ob(s, e) {
6508
+ function cb(s, e) {
6509
6509
  return It.validateRacialTrait(s, e);
6510
6510
  }
6511
- function cb(s) {
6511
+ function lb(s) {
6512
6512
  return It.validateClassFeatures(s);
6513
6513
  }
6514
- function lb(s) {
6514
+ function ub(s) {
6515
6515
  return It.validateRacialTraits(s);
6516
6516
  }
6517
6517
  function pu(s) {
@@ -6754,22 +6754,22 @@ class Ge {
6754
6754
  return $r(e, t);
6755
6755
  }
6756
6756
  }
6757
- function ub(s) {
6757
+ function db(s) {
6758
6758
  return Ge.validateSkill(s);
6759
6759
  }
6760
- function db(s) {
6760
+ function hb(s) {
6761
6761
  return Ge.validateSkills(s);
6762
6762
  }
6763
- function hb(s) {
6763
+ function mb(s) {
6764
6764
  return Ge.validateSkillProficiency(s);
6765
6765
  }
6766
- function mb(s) {
6766
+ function fb(s) {
6767
6767
  return Ge.validateSkillProficiencies(s);
6768
6768
  }
6769
- function fb(s) {
6769
+ function pb(s) {
6770
6770
  return Ge.validateSkillListDefinition(s);
6771
6771
  }
6772
- function pb(s, e) {
6772
+ function gb(s, e) {
6773
6773
  return Ge.validateSkillPrerequisites(s, e);
6774
6774
  }
6775
6775
  const an = [
@@ -6889,16 +6889,16 @@ class rt {
6889
6889
  return sn.includes(e);
6890
6890
  }
6891
6891
  }
6892
- function gb(s) {
6892
+ function yb(s) {
6893
6893
  return rt.validateSpell(s);
6894
6894
  }
6895
- function yb(s) {
6895
+ function vb(s) {
6896
6896
  return rt.validateSpells(s);
6897
6897
  }
6898
- function vb(s) {
6898
+ function bb(s) {
6899
6899
  return rt.validatePrerequisites(s);
6900
6900
  }
6901
- function bb(s, e) {
6901
+ function wb(s, e) {
6902
6902
  return rt.validateSpellPrerequisites(s, e);
6903
6903
  }
6904
6904
  class Ne {
@@ -7087,7 +7087,7 @@ class Ne {
7087
7087
  return this.getAllSkills().filter((t) => t.prerequisites ? this.validatePrerequisites(t, e).valid : !0);
7088
7088
  }
7089
7089
  }
7090
- function wb() {
7090
+ function Sb() {
7091
7091
  return Ne.getInstance();
7092
7092
  }
7093
7093
  const Pt = ["STR", "DEX", "CON", "INT", "WIS", "CHA"], ss = ["weapon", "armor", "item", "box"], rs = ["common", "uncommon", "rare", "very_rare", "legendary"], os = [
@@ -8332,7 +8332,7 @@ const Ii = {
8332
8332
  "Triumphant",
8333
8333
  "Immortal"
8334
8334
  ]
8335
- }, Sb = {
8335
+ }, _b = {
8336
8336
  // STR-based
8337
8337
  athletics: "STR",
8338
8338
  // DEX-based
@@ -8386,7 +8386,7 @@ function Wr(s, e) {
8386
8386
  } catch {
8387
8387
  }
8388
8388
  }
8389
- const _b = 10, wu = 50;
8389
+ const Tb = 10, wu = 50;
8390
8390
  class it {
8391
8391
  constructor() {
8392
8392
  this.allSpellsCache = null, this.levelCache = null, this.schoolCache = null, this.manager = Y.getInstance();
@@ -8602,7 +8602,7 @@ class it {
8602
8602
  };
8603
8603
  }
8604
8604
  }
8605
- function Tb() {
8605
+ function Cb() {
8606
8606
  return it.getInstance();
8607
8607
  }
8608
8608
  class Y {
@@ -9465,12 +9465,12 @@ const Su = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9465
9465
  traits: ["Darkvision", "Hellish Resistance", "Infernal Legacy"],
9466
9466
  description: "Tieflings are humanoids with infernal blood, often bearing horns, tails, and other fiendish features. Their ancestry grants them resistance to fire and innate magical abilities. Though often feared and distrusted due to their appearance, tieflings are as varied in morality and ambition as any other race, with many becoming powerful warlocks, sorcerers, or charismatic leaders."
9467
9467
  }
9468
- }, Cb = Hr, _u = Object.entries(Hr).map(([s, e]) => ({
9468
+ }, Mb = Hr, _u = Object.entries(Hr).map(([s, e]) => ({
9469
9469
  race: s,
9470
9470
  ...e
9471
9471
  }));
9472
9472
  let rn = null, on = null;
9473
- async function Mb(s) {
9473
+ async function Ab(s) {
9474
9474
  try {
9475
9475
  rn || (on || (on = Promise.resolve().then(() => Su)), rn = (await on).ExtensionManager);
9476
9476
  const t = rn.getInstance().get("races.data");
@@ -9955,7 +9955,7 @@ class ke {
9955
9955
  return e;
9956
9956
  }
9957
9957
  }
9958
- function Ab() {
9958
+ function kb() {
9959
9959
  return ke.getInstance();
9960
9960
  }
9961
9961
  const Tu = {
@@ -13176,7 +13176,7 @@ const Vr = {
13176
13176
  hard: { min: 0.5, max: 0.6 },
13177
13177
  deadly: { min: 0.3, max: 0.4 }
13178
13178
  };
13179
- class kb {
13179
+ class Ib {
13180
13180
  /**
13181
13181
  * Validate an encounter by running simulations and analyzing results.
13182
13182
  *
@@ -13348,7 +13348,7 @@ class kb {
13348
13348
  return o;
13349
13349
  }
13350
13350
  }
13351
- class Ib {
13351
+ class Db {
13352
13352
  /**
13353
13353
  * Run a parameter sweep.
13354
13354
  *
@@ -13560,7 +13560,7 @@ class Ib {
13560
13560
  };
13561
13561
  }
13562
13562
  }
13563
- class Db {
13563
+ class Eb {
13564
13564
  /**
13565
13565
  * Compare two encounter configurations using identical-seed simulation.
13566
13566
  *
@@ -14031,7 +14031,7 @@ function Rn(s) {
14031
14031
  maxMultiplier: s.maxMultiplier ?? nt.maxMultiplier
14032
14032
  } : nt;
14033
14033
  }
14034
- function Eb(s, e = nt.combo.okBreaksCombo) {
14034
+ function xb(s, e = nt.combo.okBreaksCombo) {
14035
14035
  return s === "miss" || s === "wrongKey" ? !0 : s === "ok" ? e : !1;
14036
14036
  }
14037
14037
  function E(s, e, t) {
@@ -16912,7 +16912,7 @@ const bp = et.map((s) => s), wp = re({
16912
16912
  message: "AR chain tracks must have tx_id; other chains must have token_address and token_id",
16913
16913
  path: ["chain_name"]
16914
16914
  }
16915
- ), xb = re({
16915
+ ), Rb = re({
16916
16916
  name: G(),
16917
16917
  description: G().optional(),
16918
16918
  image: G().url(),
@@ -16920,7 +16920,7 @@ const bp = et.map((s) => s), wp = re({
16920
16920
  genre: G().optional(),
16921
16921
  tags: Te(G()).optional(),
16922
16922
  tracks: Te(wp)
16923
- }), Rb = re({
16923
+ }), Pb = re({
16924
16924
  bass_dominance: L().min(0).max(1),
16925
16925
  mid_dominance: L().min(0).max(1),
16926
16926
  treble_dominance: L().min(0).max(1),
@@ -16950,7 +16950,7 @@ const bp = et.map((s) => s), wp = re({
16950
16950
  INT: L().min(1).max(20),
16951
16951
  WIS: L().min(1).max(20),
16952
16952
  CHA: L().min(1).max(20)
16953
- }), Pb = re({
16953
+ }), Bb = re({
16954
16954
  name: G(),
16955
16955
  race: Mi(["Human", "Elf", "Dwarf", "Halfling", "Dragonborn", "Gnome", "Half-Elf", "Half-Orc", "Tiefling"]),
16956
16956
  class: Mi(bp),
@@ -17192,7 +17192,7 @@ class Se {
17192
17192
  return `${t}:${i}:${n}.${a}`;
17193
17193
  }
17194
17194
  }
17195
- function Bb(s) {
17195
+ function Nb(s) {
17196
17196
  return Se.for(s);
17197
17197
  }
17198
17198
  class ee {
@@ -17418,7 +17418,7 @@ function Mo(s) {
17418
17418
  }
17419
17419
  return null;
17420
17420
  }
17421
- function Nb(s) {
17421
+ function Fb(s) {
17422
17422
  const e = [];
17423
17423
  for (const t of s.tracks) {
17424
17424
  const i = ra(t);
@@ -17426,7 +17426,7 @@ function Nb(s) {
17426
17426
  }
17427
17427
  return e;
17428
17428
  }
17429
- function Fb(s) {
17429
+ function $b(s) {
17430
17430
  const e = [];
17431
17431
  for (const t of s.tracks) {
17432
17432
  const i = oa(t);
@@ -17434,7 +17434,7 @@ function Fb(s) {
17434
17434
  }
17435
17435
  return e;
17436
17436
  }
17437
- function $b(s) {
17437
+ function Ob(s) {
17438
17438
  const e = [];
17439
17439
  for (const t of s.tracks) {
17440
17440
  if ("title" in t && typeof t.title == "string") {
@@ -17451,7 +17451,7 @@ function $b(s) {
17451
17451
  }
17452
17452
  return e;
17453
17453
  }
17454
- function Ob(s) {
17454
+ function zb(s) {
17455
17455
  const e = [];
17456
17456
  for (const t of s.tracks) {
17457
17457
  if ("artist" in t && typeof t.artist == "string") {
@@ -17468,7 +17468,7 @@ function Ob(s) {
17468
17468
  }
17469
17469
  return e;
17470
17470
  }
17471
- function zb(s) {
17471
+ function Lb(s) {
17472
17472
  const e = /* @__PURE__ */ new Set();
17473
17473
  for (const t of s.tracks) {
17474
17474
  if ("genre" in t && typeof t.genre == "string" && t.genre) {
@@ -17482,7 +17482,7 @@ function zb(s) {
17482
17482
  }
17483
17483
  return Array.from(e).sort();
17484
17484
  }
17485
- function Lb(s) {
17485
+ function Wb(s) {
17486
17486
  const e = /* @__PURE__ */ new Set();
17487
17487
  for (const t of s.tracks) {
17488
17488
  if ("tags" in t && Array.isArray(t.tags)) {
@@ -17499,7 +17499,7 @@ function Lb(s) {
17499
17499
  }
17500
17500
  return Array.from(e).sort();
17501
17501
  }
17502
- function Wb(s) {
17502
+ function Hb(s) {
17503
17503
  let e = 0;
17504
17504
  for (const t of s.tracks) {
17505
17505
  if ("duration" in t && typeof t.duration == "number") {
@@ -17513,10 +17513,10 @@ function Wb(s) {
17513
17513
  }
17514
17514
  return e;
17515
17515
  }
17516
- function Hb(s) {
17516
+ function qb(s) {
17517
17517
  return s.tracks.length;
17518
17518
  }
17519
- function qb(s) {
17519
+ function Gb(s) {
17520
17520
  const e = [];
17521
17521
  for (const t of s.tracks) {
17522
17522
  const i = ra(t), n = oa(t), a = Co(t);
@@ -17539,7 +17539,7 @@ function qb(s) {
17539
17539
  }
17540
17540
  return e;
17541
17541
  }
17542
- function Gb(s) {
17542
+ function Ub(s) {
17543
17543
  const e = [];
17544
17544
  for (const t of s.tracks) {
17545
17545
  if ("audio_url" in t) {
@@ -17580,7 +17580,7 @@ function Gb(s) {
17580
17580
  }
17581
17581
  return e;
17582
17582
  }
17583
- function Ub(s) {
17583
+ function Vb(s) {
17584
17584
  const e = [];
17585
17585
  for (const t of s.tracks) {
17586
17586
  const i = Mo(t);
@@ -17588,7 +17588,7 @@ function Ub(s) {
17588
17588
  }
17589
17589
  return e;
17590
17590
  }
17591
- function Vb(s) {
17591
+ function jb(s) {
17592
17592
  const e = [];
17593
17593
  for (const t of s.tracks) {
17594
17594
  const i = Mo(t);
@@ -17675,7 +17675,7 @@ function Nt(s) {
17675
17675
  function je(s, e, t = "") {
17676
17676
  return `${e.protocol || "https"}://${e.host}/${s}${t}`;
17677
17677
  }
17678
- function jb(s, e = Ao, t = "") {
17678
+ function Kb(s, e = Ao, t = "") {
17679
17679
  return e.sort((i, n) => i.priority - n.priority).map((i) => je(s, i, t));
17680
17680
  }
17681
17681
  async function Cp() {
@@ -17692,15 +17692,15 @@ async function Mp() {
17692
17692
  return null;
17693
17693
  }
17694
17694
  }
17695
- const Ap = 5e3, kp = 864e5, hn = "arweave_active_gateway";
17696
- class Ip {
17695
+ const Ap = "https://solana-rpc.publicnode.com", kp = 5e3, Ip = 864e5, hn = "arweave_active_gateway";
17696
+ class Dp {
17697
17697
  constructor(e) {
17698
- this.cache = /* @__PURE__ */ new Map(), this.logger = Se.for("ArweaveGateway"), this.hitCount = 0, this.missCount = 0, this.healthData = /* @__PURE__ */ new Map(), this.originalPriorities = /* @__PURE__ */ new Map(), this.MAX_HEALTH_RECORDS = 50, this.inflightResolves = /* @__PURE__ */ new Map(), this.inflightControllers = /* @__PURE__ */ new Map(), this.wayfinder = null, this.activeGateway = null, this.lastFetchTiming = 0, this.consecutiveSlowResponses = 0, this.gateways = (e?.gateways ?? Ao).map((t) => ({ ...t })), this.timeout = e?.timeout ?? Ap, this.cacheTTL = e?.cacheTTL ?? kp, this.slowResponseThreshold = e?.slowResponseThreshold ?? 8e3, this.maxSlowResponses = e?.maxSlowResponses ?? 3, this.gateways.sort((t, i) => t.priority - i.priority), this.gateways.forEach((t) => {
17698
+ this.cache = /* @__PURE__ */ new Map(), this.logger = Se.for("ArweaveGateway"), this.hitCount = 0, this.missCount = 0, this.healthData = /* @__PURE__ */ new Map(), this.originalPriorities = /* @__PURE__ */ new Map(), this.MAX_HEALTH_RECORDS = 50, this.inflightResolves = /* @__PURE__ */ new Map(), this.inflightControllers = /* @__PURE__ */ new Map(), this.wayfinder = null, this.activeGateway = null, this.lastFetchTiming = 0, this.consecutiveSlowResponses = 0, this.gateways = (e?.gateways ?? Ao).map((t) => ({ ...t })), this.timeout = e?.timeout ?? kp, this.cacheTTL = e?.cacheTTL ?? Ip, this.slowResponseThreshold = e?.slowResponseThreshold ?? 8e3, this.maxSlowResponses = e?.maxSlowResponses ?? 3, this.solanaRpcUrl = e?.solanaRpcUrl ?? Ap, this.gateways.sort((t, i) => t.priority - i.priority), this.gateways.forEach((t) => {
17699
17699
  this.originalPriorities.set(t.host, t.priority);
17700
17700
  }), this.activeGateway = this.loadPersistedGateway(), Promise.all([Cp(), Mp(), import("./index.browser-CVv08iVS.js")]).then(([t, i, n]) => {
17701
17701
  if (t && i)
17702
17702
  try {
17703
- const { FastestPingRoutingStrategy: a, RandomRoutingStrategy: r, CompositeRoutingStrategy: o, NetworkGatewaysProvider: c } = t, l = i.ARIO, u = n.createSolanaRpc(i.MAINNET_RPC_URL ?? "https://api.mainnet-beta.solana.com"), d = l.init({ rpc: u }), h = new c({
17703
+ const { FastestPingRoutingStrategy: a, RandomRoutingStrategy: r, CompositeRoutingStrategy: o, NetworkGatewaysProvider: c } = t, l = i.ARIO, u = n.createSolanaRpc(this.solanaRpcUrl), d = l.init({ rpc: u }), h = new c({
17704
17704
  ario: d,
17705
17705
  sortBy: "operatorStake",
17706
17706
  limit: 10
@@ -18623,7 +18623,7 @@ class Ip {
18623
18623
  this.healthData.clear(), this.logger.info("Health data cleared");
18624
18624
  }
18625
18625
  }
18626
- const Ae = new Ip(), ca = [
18626
+ const Ae = new Dp(), ca = [
18627
18627
  "ipfs.io",
18628
18628
  "cloudflare-ipfs.com",
18629
18629
  "dweb.link",
@@ -18637,8 +18637,8 @@ const Ae = new Ip(), ca = [
18637
18637
  "spinamp.mypinata.cloud",
18638
18638
  "catalogworks.b-cdn.net",
18639
18639
  "www.heds.cloud"
18640
- ], Dp = "ipfs.io", $n = "/ipfs/";
18641
- function Ep(s) {
18640
+ ], Ep = "ipfs.io", $n = "/ipfs/";
18641
+ function xp(s) {
18642
18642
  if (!s || typeof s != "string") return null;
18643
18643
  if (s.startsWith("ipfs://ipfs/"))
18644
18644
  return s.slice(12);
@@ -18656,7 +18656,7 @@ function Ep(s) {
18656
18656
  }
18657
18657
  return null;
18658
18658
  }
18659
- function Kb(s) {
18659
+ function Yb(s) {
18660
18660
  if (!s || typeof s != "string") return !1;
18661
18661
  if (s.startsWith("ipfs://")) return !0;
18662
18662
  try {
@@ -18668,7 +18668,7 @@ function Kb(s) {
18668
18668
  }
18669
18669
  return !1;
18670
18670
  }
18671
- function xp(s) {
18671
+ function Rp(s) {
18672
18672
  if (!(!s || s.startsWith("ipfs://")))
18673
18673
  try {
18674
18674
  const { hostname: e } = new URL(s);
@@ -18679,12 +18679,12 @@ function xp(s) {
18679
18679
  return;
18680
18680
  }
18681
18681
  }
18682
- function Yb(s, e = {}) {
18682
+ function Zb(s, e = {}) {
18683
18683
  if (!s) return s;
18684
- const t = typeof e == "string" ? { gatewayHost: e } : e, { gatewayHost: i = Dp, preserveOriginalGateway: n = !1 } = t, a = Ep(s);
18684
+ const t = typeof e == "string" ? { gatewayHost: e } : e, { gatewayHost: i = Ep, preserveOriginalGateway: n = !1 } = t, a = xp(s);
18685
18685
  if (a) {
18686
18686
  if (n) {
18687
- const r = xp(s);
18687
+ const r = Rp(s);
18688
18688
  if (r)
18689
18689
  return `https://${r}/ipfs/${a}`;
18690
18690
  }
@@ -18697,7 +18697,7 @@ function bi(s) {
18697
18697
  }
18698
18698
  var mn = { exports: {} };
18699
18699
  var Vs;
18700
- function Rp() {
18700
+ function Pp() {
18701
18701
  return Vs || (Vs = 1, (function(s, e) {
18702
18702
  (function(t) {
18703
18703
  s.exports = t();
@@ -20134,16 +20134,16 @@ function Rp() {
20134
20134
  });
20135
20135
  })(mn)), mn.exports;
20136
20136
  }
20137
- var Pp = Rp();
20138
- const Bp = /* @__PURE__ */ xr(Pp);
20137
+ var Bp = Pp();
20138
+ const Np = /* @__PURE__ */ xr(Bp);
20139
20139
  function vt(s) {
20140
20140
  return `model:${s}`;
20141
20141
  }
20142
- function Np(s) {
20142
+ function Fp(s) {
20143
20143
  const e = s.lastIndexOf("/");
20144
20144
  return e >= 0 ? s.substring(0, e + 1) : "";
20145
20145
  }
20146
- async function Fp(s, e = 3, t = 1e3) {
20146
+ async function $p(s, e = 3, t = 1e3) {
20147
20147
  let i = null;
20148
20148
  for (let n = 0; n < e; n++)
20149
20149
  try {
@@ -20169,7 +20169,7 @@ async function js(s, e, t, i = 3, n = 1e3) {
20169
20169
  const c = await fetch(o);
20170
20170
  if (!c.ok)
20171
20171
  throw new Error(`HTTP ${c.status}: ${c.statusText}`);
20172
- const l = await c.text(), u = JSON.parse(l), d = Np(o), h = {}, m = [];
20172
+ const l = await c.text(), u = JSON.parse(l), d = Fp(o), h = {}, m = [];
20173
20173
  if (u.weightsManifest && Array.isArray(u.weightsManifest)) {
20174
20174
  for (const p of u.weightsManifest)
20175
20175
  if (p.paths && Array.isArray(p.paths))
@@ -20177,7 +20177,7 @@ async function js(s, e, t, i = 3, n = 1e3) {
20177
20177
  m.push(g);
20178
20178
  }
20179
20179
  const f = m.map(async (p) => {
20180
- const g = d + p, y = await Fp(g, i, n);
20180
+ const g = d + p, y = await $p(g, i, n);
20181
20181
  h[p] = await y.arrayBuffer();
20182
20182
  });
20183
20183
  return await Promise.all(f), {
@@ -20229,7 +20229,7 @@ function ko(s) {
20229
20229
  }
20230
20230
  const Io = /* @__PURE__ */ new Map();
20231
20231
  let Ks = !1;
20232
- function $p() {
20232
+ function Op() {
20233
20233
  Ks || (Ks = !0, import("@tensorflow/tfjs").then((s) => {
20234
20234
  s.io.registerLoadRouter(((e) => {
20235
20235
  if (typeof e == "string" && e.startsWith("cached://")) {
@@ -20248,10 +20248,10 @@ function $p() {
20248
20248
  }));
20249
20249
  }));
20250
20250
  }
20251
- $p();
20252
- class Op {
20251
+ Op();
20252
+ class zp {
20253
20253
  constructor(e = {}) {
20254
- this.store = Bp.createInstance({
20254
+ this.store = Np.createInstance({
20255
20255
  name: e.storeName ?? "playlist-data-engine-models",
20256
20256
  description: e.description ?? "Cached TF.js model artifacts for playlist-data-engine"
20257
20257
  });
@@ -20364,8 +20364,8 @@ class Op {
20364
20364
  }), e;
20365
20365
  }
20366
20366
  }
20367
- const Ht = new Op();
20368
- function Zb(s) {
20367
+ const Ht = new zp();
20368
+ function Xb(s) {
20369
20369
  if (!s || !s.metadata) return null;
20370
20370
  if (typeof s.metadata == "string")
20371
20371
  try {
@@ -20376,10 +20376,10 @@ function Zb(s) {
20376
20376
  }
20377
20377
  return typeof s.metadata == "object" && !Array.isArray(s.metadata) ? s.metadata : null;
20378
20378
  }
20379
- function zp(s) {
20379
+ function Lp(s) {
20380
20380
  const e = { stems: [], mixes: [], hasExtras: !1 };
20381
20381
  if (!s) return e;
20382
- const t = qp(s), i = Gp(s), n = typeof s.vrm == "string" ? s.vrm : void 0, a = Lp(s.lyrics), r = Ys(s.visualizer), o = Ys(s.video), c = Wp(s.merch), l = Hp(s.credits), u = typeof s.midi == "string" ? s.midi : void 0, d = typeof s.step_mania == "string" ? s.step_mania : void 0, h = typeof s.clone_hero == "string" ? s.clone_hero : void 0, m = typeof s.external_url == "string" ? s.external_url : void 0;
20382
+ const t = Gp(s), i = Up(s), n = typeof s.vrm == "string" ? s.vrm : void 0, a = Wp(s.lyrics), r = Ys(s.visualizer), o = Ys(s.video), c = Hp(s.merch), l = qp(s.credits), u = typeof s.midi == "string" ? s.midi : void 0, d = typeof s.step_mania == "string" ? s.step_mania : void 0, h = typeof s.clone_hero == "string" ? s.clone_hero : void 0, m = typeof s.external_url == "string" ? s.external_url : void 0;
20383
20383
  return {
20384
20384
  hasExtras: t.length > 0 || i.length > 0 || !!n || !!a || !!r || !!o || !!c || !!l || !!u || !!d || !!h || !!m,
20385
20385
  ...t.length > 0 ? { stems: t } : {},
@@ -20396,7 +20396,7 @@ function zp(s) {
20396
20396
  ...m ? { external_url: m } : {}
20397
20397
  };
20398
20398
  }
20399
- function Lp(s) {
20399
+ function Wp(s) {
20400
20400
  if (s) {
20401
20401
  if (typeof s == "string") return { text: s };
20402
20402
  if (typeof s == "object" && !Array.isArray(s)) {
@@ -20414,7 +20414,7 @@ function Ys(s) {
20414
20414
  mime_type: typeof e.mime_type == "string" ? e.mime_type : void 0
20415
20415
  };
20416
20416
  }
20417
- function Wp(s) {
20417
+ function Hp(s) {
20418
20418
  if (!s || typeof s != "object" || Array.isArray(s)) return;
20419
20419
  const e = s;
20420
20420
  if (typeof e.uri == "string")
@@ -20424,7 +20424,7 @@ function Wp(s) {
20424
20424
  type: typeof e.type == "string" ? e.type : void 0
20425
20425
  };
20426
20426
  }
20427
- function Hp(s) {
20427
+ function qp(s) {
20428
20428
  if (!Array.isArray(s)) return;
20429
20429
  const e = [];
20430
20430
  for (const t of s)
@@ -20434,7 +20434,7 @@ function Hp(s) {
20434
20434
  }
20435
20435
  return e.length > 0 ? e : void 0;
20436
20436
  }
20437
- function qp(s) {
20437
+ function Gp(s) {
20438
20438
  const e = s.stems;
20439
20439
  if (!Array.isArray(e)) return [];
20440
20440
  const t = [];
@@ -20449,13 +20449,13 @@ function qp(s) {
20449
20449
  }
20450
20450
  return t;
20451
20451
  }
20452
- function Gp(s) {
20452
+ function Up(s) {
20453
20453
  const e = s.mixes;
20454
20454
  if (!Array.isArray(e)) return [];
20455
20455
  const t = [];
20456
20456
  for (const i of e)
20457
20457
  if (i && typeof i == "object") {
20458
- const n = i, a = Up(n.name), r = Vp(n.conditions);
20458
+ const n = i, a = Vp(n.name), r = jp(n.conditions);
20459
20459
  t.push({
20460
20460
  name: a || "",
20461
20461
  uri: typeof n.uri == "string" ? n.uri : void 0,
@@ -20465,7 +20465,7 @@ function Gp(s) {
20465
20465
  }
20466
20466
  return t;
20467
20467
  }
20468
- function Up(s) {
20468
+ function Vp(s) {
20469
20469
  if (typeof s == "string") return s;
20470
20470
  if (s && typeof s == "object" && !Array.isArray(s)) {
20471
20471
  const e = s;
@@ -20473,7 +20473,7 @@ function Up(s) {
20473
20473
  }
20474
20474
  return "";
20475
20475
  }
20476
- function Vp(s) {
20476
+ function jp(s) {
20477
20477
  if (!Array.isArray(s)) return [];
20478
20478
  const e = [];
20479
20479
  for (const t of s)
@@ -20483,7 +20483,7 @@ function Vp(s) {
20483
20483
  }
20484
20484
  return e;
20485
20485
  }
20486
- function Xb(s, e) {
20486
+ function Jb(s, e) {
20487
20487
  const t = [], i = /* @__PURE__ */ new Date();
20488
20488
  for (const n of s.mixes || []) {
20489
20489
  if (n.conditions.length === 0) {
@@ -20497,7 +20497,7 @@ function Xb(s, e) {
20497
20497
  }
20498
20498
  const a = [], r = [];
20499
20499
  for (const o of n.conditions) {
20500
- const c = jp(o, e, i);
20500
+ const c = Kp(o, e, i);
20501
20501
  a.push(c), c.met || r.push(c);
20502
20502
  }
20503
20503
  t.push({
@@ -20509,7 +20509,7 @@ function Xb(s, e) {
20509
20509
  }
20510
20510
  return t;
20511
20511
  }
20512
- function jp(s, e, t = /* @__PURE__ */ new Date()) {
20512
+ function Kp(s, e, t = /* @__PURE__ */ new Date()) {
20513
20513
  const { type: i, value: n } = s, a = e?.environment, r = e?.appState;
20514
20514
  switch (i) {
20515
20515
  case "weather": {
@@ -20579,7 +20579,7 @@ function jp(s, e, t = /* @__PURE__ */ new Date()) {
20579
20579
  const o = a?.geolocation?.altitude;
20580
20580
  if (o == null)
20581
20581
  return { type: i, value: n, met: !1, reason: "Altitude unavailable" };
20582
- const c = Kp(n), l = Yp(o, c.operator, c.threshold);
20582
+ const c = Yp(n), l = Zp(o, c.operator, c.threshold);
20583
20583
  return {
20584
20584
  type: i,
20585
20585
  value: n,
@@ -20629,14 +20629,14 @@ function Zs(s) {
20629
20629
  const t = parseInt(e[0], 10), i = parseInt(e[1], 10);
20630
20630
  return isNaN(t) || isNaN(i) ? 0 : t * 60 + i;
20631
20631
  }
20632
- function Kp(s) {
20632
+ function Yp(s) {
20633
20633
  const e = s.match(/^(>=|<=|>|<|=)?\s*(\d+(?:\.\d+)?)\s*$/);
20634
20634
  return e ? {
20635
20635
  operator: e[1] || ">=",
20636
20636
  threshold: parseFloat(e[2])
20637
20637
  } : { operator: ">=", threshold: parseFloat(s) || 0 };
20638
20638
  }
20639
- function Yp(s, e, t) {
20639
+ function Zp(s, e, t) {
20640
20640
  switch (e) {
20641
20641
  case ">":
20642
20642
  return s > t;
@@ -20653,7 +20653,7 @@ function Yp(s, e, t) {
20653
20653
  return s >= t;
20654
20654
  }
20655
20655
  }
20656
- class Zp {
20656
+ class Xp {
20657
20657
  /**
20658
20658
  * Generate a unique RPG-style character name from track metadata and character class
20659
20659
  *
@@ -22628,7 +22628,7 @@ const Xs = [
22628
22628
  source: "default",
22629
22629
  description: "Covers influencing others through reason, charm, and good faith. Use this skill when you need to convince someone to see your point of view, negotiate favorable terms, get someone to do you a favor, or rally people to your cause. This skill works best when you're being honest."
22630
22630
  }
22631
- ], Jb = [
22631
+ ], Qb = [
22632
22632
  "physical",
22633
22633
  "exploration",
22634
22634
  "combat",
@@ -22641,7 +22641,7 @@ const Xs = [
22641
22641
  "perception",
22642
22642
  "practical",
22643
22643
  "entertainment"
22644
- ], Xp = {
22644
+ ], Jp = {
22645
22645
  "appearance.bodyTypes": ["slender", "athletic", "muscular", "stocky"],
22646
22646
  "appearance.skinTones": [
22647
22647
  "#F5E6D3",
@@ -22720,35 +22720,35 @@ const Xs = [
22720
22720
  };
22721
22721
  function Do() {
22722
22722
  const s = Y.getInstance();
22723
- for (const [e, t] of Object.entries(Xp))
22723
+ for (const [e, t] of Object.entries(Jp))
22724
22724
  s.initializeDefaults(e, [...t]);
22725
22725
  }
22726
- function Jp() {
22726
+ function Qp() {
22727
22727
  return Y.getInstance().getRegisteredCategories().some((t) => String(t).startsWith("appearance."));
22728
22728
  }
22729
22729
  function Eo() {
22730
- Jp() || Do();
22730
+ Qp() || Do();
22731
22731
  }
22732
- const Qp = Object.values(Or), eg = Object.entries(xn).map(([s, e]) => ({
22732
+ const eg = Object.values(Or), tg = Object.entries(xn).map(([s, e]) => ({
22733
22733
  class: s,
22734
22734
  cantrips: e.cantrips,
22735
22735
  spells_by_level: e.spells_by_level
22736
22736
  }));
22737
22737
  function xo() {
22738
22738
  const s = Y.getInstance();
22739
- s.initializeDefaults("spells", Qp);
22740
- for (const e of eg) {
22739
+ s.initializeDefaults("spells", eg);
22740
+ for (const e of tg) {
22741
22741
  const t = `spells.${e.class}`;
22742
22742
  s.initializeDefaults(t, [e]);
22743
22743
  }
22744
22744
  }
22745
- function tg() {
22745
+ function ig() {
22746
22746
  return Y.getInstance().getRegisteredCategories().some((t) => String(t).startsWith("spells"));
22747
22747
  }
22748
22748
  function On() {
22749
- tg() || xo();
22749
+ ig() || xo();
22750
22750
  }
22751
- const ig = Object.values(Vt).map((s) => ({
22751
+ const ng = Object.values(Vt).map((s) => ({
22752
22752
  ...s,
22753
22753
  source: "default",
22754
22754
  spawnWeight: s.spawnWeight ?? 1,
@@ -22756,46 +22756,46 @@ const ig = Object.values(Vt).map((s) => ({
22756
22756
  tags: s.tags ?? []
22757
22757
  }));
22758
22758
  function Ro() {
22759
- Y.getInstance().initializeDefaults("equipment", ig);
22759
+ Y.getInstance().initializeDefaults("equipment", ng);
22760
22760
  }
22761
- function ng() {
22761
+ function ag() {
22762
22762
  return Y.getInstance().getRegisteredCategories().some((t) => t === "equipment");
22763
22763
  }
22764
22764
  function Po() {
22765
- ng() || Ro();
22765
+ ag() || Ro();
22766
22766
  }
22767
22767
  function Bo() {
22768
22768
  Y.getInstance().initializeDefaults("races", [...bu]);
22769
22769
  }
22770
- function ag() {
22770
+ function sg() {
22771
22771
  return Y.getInstance().getRegisteredCategories().some((t) => t === "races");
22772
22772
  }
22773
22773
  function No() {
22774
- ag() || Bo();
22774
+ sg() || Bo();
22775
22775
  }
22776
22776
  function Fo() {
22777
22777
  Y.getInstance().initializeDefaults("races.data", [..._u]);
22778
22778
  }
22779
- function sg() {
22779
+ function rg() {
22780
22780
  return Y.getInstance().getRegisteredCategories().some((t) => t === "races.data");
22781
22781
  }
22782
- function rg() {
22783
- sg() || Fo();
22782
+ function og() {
22783
+ rg() || Fo();
22784
22784
  }
22785
22785
  function $o() {
22786
22786
  Y.getInstance().initializeDefaults("classes", [...yu]);
22787
22787
  }
22788
- function og() {
22788
+ function cg() {
22789
22789
  return Y.getInstance().getRegisteredCategories().some((t) => t === "classes");
22790
22790
  }
22791
22791
  function Oo() {
22792
- og() || $o();
22792
+ cg() || $o();
22793
22793
  }
22794
- function Qb() {
22794
+ function e0() {
22795
22795
  Do(), xo(), Ro(), Bo(), Fo(), $o(), zo(), Wo();
22796
22796
  }
22797
- function e0() {
22798
- Eo(), On(), Po(), No(), rg(), Oo(), Lo(), ug();
22797
+ function t0() {
22798
+ Eo(), On(), Po(), No(), og(), Oo(), Lo(), dg();
22799
22799
  }
22800
22800
  function zo() {
22801
22801
  const s = Y.getInstance(), e = {};
@@ -22815,11 +22815,11 @@ function zo() {
22815
22815
  s.initializeDefaults(a, n);
22816
22816
  }
22817
22817
  }
22818
- function cg() {
22818
+ function lg() {
22819
22819
  return Y.getInstance().getRegisteredCategories().some((t) => t === "classFeatures" || t === "racialTraits");
22820
22820
  }
22821
22821
  function Lo() {
22822
- cg() || zo();
22822
+ lg() || zo();
22823
22823
  }
22824
22824
  function Wo() {
22825
22825
  const s = Y.getInstance(), e = {
@@ -22838,14 +22838,14 @@ function Wo() {
22838
22838
  s.initializeDefaults(n, i);
22839
22839
  }
22840
22840
  }
22841
- function lg() {
22841
+ function ug() {
22842
22842
  const s = Y.getInstance();
22843
22843
  return s.hasCustomData("skills") || s.getDefaults("skills").length > 0;
22844
22844
  }
22845
- function ug() {
22846
- lg() || Wo();
22845
+ function dg() {
22846
+ ug() || Wo();
22847
22847
  }
22848
- class dg {
22848
+ class hg {
22849
22849
  /**
22850
22850
  * Select a random race deterministically from seeded RNG
22851
22851
  *
@@ -23253,7 +23253,7 @@ class pn {
23253
23253
  };
23254
23254
  }
23255
23255
  }
23256
- class hg {
23256
+ class mg {
23257
23257
  /**
23258
23258
  * Get skill list definition for a class from ExtensionManager
23259
23259
  *
@@ -23406,7 +23406,7 @@ class hg {
23406
23406
  return n.slice(0, t);
23407
23407
  }
23408
23408
  }
23409
- const mg = [
23409
+ const fg = [
23410
23410
  "Wizard",
23411
23411
  "Sorcerer",
23412
23412
  "Warlock",
@@ -23415,7 +23415,7 @@ const mg = [
23415
23415
  "Druid",
23416
23416
  "Paladin"
23417
23417
  ];
23418
- class fg {
23418
+ class pg {
23419
23419
  /**
23420
23420
  * Generate character appearance from seed and audio profile
23421
23421
  *
@@ -23432,7 +23432,7 @@ class fg {
23432
23432
  D
23433
23433
  ), oe = i.color_palette, j = oe?.primary_color, X = oe?.secondary_color, fe = oe?.accent_color;
23434
23434
  let pe;
23435
- return mg.includes(t) && (pe = this.generateAuraColor(t, oe?.primary_color)), {
23435
+ return fg.includes(t) && (pe = this.generateAuraColor(t, oe?.primary_color)), {
23436
23436
  body_type: R,
23437
23437
  skin_tone: q,
23438
23438
  hair_style: O,
@@ -23749,7 +23749,7 @@ const tr = {
23749
23749
  items: ["Spellbook", "Component Pouch", "Scholar's Pack", "Ink & Quill"]
23750
23750
  }
23751
23751
  };
23752
- function pg(s) {
23752
+ function gg(s) {
23753
23753
  if (s in tr)
23754
23754
  return tr[s];
23755
23755
  try {
@@ -24292,7 +24292,7 @@ class Pi {
24292
24292
  */
24293
24293
  static getStartingEquipment(e) {
24294
24294
  this.ensureInitialized();
24295
- const t = pg(e);
24295
+ const t = gg(e);
24296
24296
  return t ? {
24297
24297
  weapons: [...t.weapons],
24298
24298
  armor: [...t.armor],
@@ -24948,7 +24948,7 @@ class la {
24948
24948
  );
24949
24949
  d = J, l = u;
24950
24950
  }
24951
- const h = d || dg.select(a);
24951
+ const h = d || hg.select(a);
24952
24952
  if (l !== void 0 && u !== "pure") {
24953
24953
  const J = c.getAvailableSubraces(h);
24954
24954
  if (!J.includes(l))
@@ -24959,7 +24959,7 @@ class la {
24959
24959
  const le = ["pure", ...c.getAvailableSubraces(h)], dt = a.randomChoice(le);
24960
24960
  l = dt === "pure" ? void 0 : dt;
24961
24961
  }
24962
- const m = n.forceClass || zn.suggest(t, a), f = n.forceName || new Zp().generateName(
24962
+ const m = n.forceClass || zn.suggest(t, a), f = n.forceName || new Xp().generateName(
24963
24963
  e,
24964
24964
  i,
24965
24965
  t,
@@ -24968,14 +24968,14 @@ class la {
24968
24968
  ), p = pn.calculateBaseScores(t, a), g = pn.applyRacialBonuses(p, h), y = pn.calculateModifiers(g), v = zr(m);
24969
24969
  if (!v)
24970
24970
  throw new Error(`Unknown class: ${m}. Cannot generate character.`);
24971
- const T = Zn(h)?.speed ?? 30, _ = v.hit_die + y.CON, I = 10 + y.DEX, D = y.DEX, R = Lr[r], q = hg.assignSkills(m, a), O = {
24971
+ const T = Zn(h)?.speed ?? 30, _ = v.hit_die + y.CON, I = 10 + y.DEX, D = y.DEX, R = Lr[r], q = mg.assignSkills(m, a), O = {
24972
24972
  STR: v.saving_throws.includes("STR"),
24973
24973
  DEX: v.saving_throws.includes("DEX"),
24974
24974
  CON: v.saving_throws.includes("CON"),
24975
24975
  INT: v.saving_throws.includes("INT"),
24976
24976
  WIS: v.saving_throws.includes("WIS"),
24977
24977
  CHA: v.saving_throws.includes("CHA")
24978
- }, W = fg.generate(e, m, t), Z = c.getClassFeatures(m, r), Q = l ? c.getRacialTraitsForSubrace(h, l) : c.getBaseRacialTraits(h), se = Pi.initializeEquipment(m), oe = {
24978
+ }, W = pg.generate(e, m, t), Z = c.getClassFeatures(m, r), Q = l ? c.getRacialTraitsForSubrace(h, l) : c.getBaseRacialTraits(h), se = Pi.initializeEquipment(m), oe = {
24979
24979
  name: f,
24980
24980
  race: h,
24981
24981
  subrace: l,
@@ -25070,7 +25070,7 @@ class la {
25070
25070
  function ir(s) {
25071
25071
  return 2595 * Math.log10(1 + s / 700);
25072
25072
  }
25073
- function gg(s) {
25073
+ function yg(s) {
25074
25074
  return 700 * (Math.pow(10, s / 2595) - 1);
25075
25075
  }
25076
25076
  function Hi(s, e) {
@@ -25091,12 +25091,12 @@ function Hi(s, e) {
25091
25091
  targetSampleRate: e
25092
25092
  };
25093
25093
  }
25094
- function yg(s, e, t, i = 0, n = t / 2) {
25094
+ function vg(s, e, t, i = 0, n = t / 2) {
25095
25095
  const a = e / 2 + 1, r = [], o = ir(i), c = ir(n), l = [];
25096
25096
  for (let d = 0; d < s + 2; d++)
25097
25097
  l.push(o + d * (c - o) / (s + 1));
25098
25098
  const u = l.map((d) => {
25099
- const h = gg(d);
25099
+ const h = yg(d);
25100
25100
  return Math.floor((e + 1) * h / t);
25101
25101
  });
25102
25102
  for (let d = 0; d < s; d++) {
@@ -25109,7 +25109,7 @@ function yg(s, e, t, i = 0, n = t / 2) {
25109
25109
  }
25110
25110
  return r;
25111
25111
  }
25112
- function vg(s, e, t) {
25112
+ function bg(s, e, t) {
25113
25113
  if (s.length === 0)
25114
25114
  return new Float32Array(0);
25115
25115
  const i = 1 / (2 * Math.PI * e), n = 1 / t, a = i / (i + n), r = new Float32Array(s.length);
@@ -25143,7 +25143,7 @@ function Ho(s, e, t) {
25143
25143
  }
25144
25144
  return l;
25145
25145
  }
25146
- function bg(s) {
25146
+ function wg(s) {
25147
25147
  if (s.length === 0)
25148
25148
  return 0;
25149
25149
  let e = 0;
@@ -25158,7 +25158,7 @@ function bg(s) {
25158
25158
  const n = i / s.length;
25159
25159
  return Math.sqrt(n);
25160
25160
  }
25161
- function wg(s) {
25161
+ function Sg(s) {
25162
25162
  const e = s.length, t = Math.pow(2, Math.ceil(Math.log2(e))), i = new Float32Array(t), n = new Float32Array(t);
25163
25163
  for (let c = 0; c < e; c++) {
25164
25164
  const l = 0.5 - 0.5 * Math.cos(2 * Math.PI * c / (e - 1));
@@ -25197,7 +25197,7 @@ function qo(s, e, t, i) {
25197
25197
  const n = [];
25198
25198
  let a = 0;
25199
25199
  for (; a + e <= s.length; ) {
25200
- const r = s.slice(a, a + e), o = wg(r);
25200
+ const r = s.slice(a, a + e), o = Sg(r);
25201
25201
  n.push(o), a += t;
25202
25202
  }
25203
25203
  return {
@@ -25217,11 +25217,11 @@ function Uo(s, e) {
25217
25217
  const t = Math.PI * (2 * s - 1) / (2 * e);
25218
25218
  return 1 / (2 * Math.sin(t));
25219
25219
  }
25220
- function Sg(s, e, t, i) {
25220
+ function _g(s, e, t, i) {
25221
25221
  const n = 2 * Math.PI * s / e, a = Math.cos(n), r = Math.sin(n), o = Uo(t, i), c = r / (2 * o), l = 1 + c, u = (1 - a) / 2 / l, d = (1 - a) / l, h = (1 - a) / 2 / l, m = -2 * a / l, f = (1 - c) / l;
25222
25222
  return { b0: u, b1: d, b2: h, a1: m, a2: f };
25223
25223
  }
25224
- function _g(s, e, t, i) {
25224
+ function Tg(s, e, t, i) {
25225
25225
  const n = 2 * Math.PI * s / e, a = Math.cos(n), r = Math.sin(n), o = Uo(t, i), c = r / (2 * o), l = 1 + c, u = (1 + a) / 2 / l, d = -(1 + a) / l, h = (1 + a) / 2 / l, m = -2 * a / l, f = (1 - c) / l;
25226
25226
  return { b0: u, b1: d, b2: h, a1: m, a2: f };
25227
25227
  }
@@ -25232,7 +25232,7 @@ function nr(s, e) {
25232
25232
  o[c] = t * s[c] + i * s[c - 1] + n * s[c - 2] - a * o[c - 1] - r * o[c - 2];
25233
25233
  return o;
25234
25234
  }
25235
- function Tg(s, e, t, i, n) {
25235
+ function Cg(s, e, t, i, n) {
25236
25236
  if (s.length === 0)
25237
25237
  return new Float32Array(0);
25238
25238
  const a = 8;
@@ -25243,22 +25243,22 @@ function Tg(s, e, t, i, n) {
25243
25243
  const r = a / 2;
25244
25244
  let o = new Float32Array(s);
25245
25245
  for (let c = 1; c <= r; c++) {
25246
- const l = _g(e, i, c, a);
25246
+ const l = Tg(e, i, c, a);
25247
25247
  o = nr(o, l);
25248
25248
  }
25249
25249
  for (let c = 1; c <= r; c++) {
25250
- const l = Sg(t, i, c, a);
25250
+ const l = _g(t, i, c, a);
25251
25251
  o = nr(o, l);
25252
25252
  }
25253
25253
  return o;
25254
25254
  }
25255
- function Cg(s, e, t, i) {
25255
+ function Mg(s, e, t, i) {
25256
25256
  const n = Go.find((a) => a.name === e);
25257
25257
  if (!n)
25258
25258
  throw new Error(`Unknown frequency band: ${e}. Valid bands are: low, mid, high`);
25259
- return Tg(s, n.lowHz, n.highHz, t);
25259
+ return Cg(s, n.lowHz, n.highHz, t);
25260
25260
  }
25261
- const Mg = {
25261
+ const Ag = {
25262
25262
  targetSampleRate: 44100,
25263
25263
  fftWindowSizeMs: 23,
25264
25264
  hopSizeMs: 10,
@@ -25266,7 +25266,7 @@ const Mg = {
25266
25266
  peakThreshold: 0.3,
25267
25267
  bands: Go
25268
25268
  };
25269
- class Ag {
25269
+ class kg {
25270
25270
  /**
25271
25271
  * Create a new Multi-Band Analyzer
25272
25272
  *
@@ -25274,7 +25274,7 @@ class Ag {
25274
25274
  */
25275
25275
  constructor(e = {}) {
25276
25276
  if (this.config = {
25277
- ...Mg,
25277
+ ...Ag,
25278
25278
  ...e
25279
25279
  }, this.config.peakThreshold < 0 || this.config.peakThreshold > 1)
25280
25280
  throw new Error(`peakThreshold must be between 0 and 1, got: ${this.config.peakThreshold}`);
@@ -25329,7 +25329,7 @@ class Ag {
25329
25329
  * Analyze a single frequency band
25330
25330
  */
25331
25331
  analyzeBand(e, t, i, n, a, r, o) {
25332
- const c = Cg(e, t.name, i), l = qo(c, n, a, i), u = l.numFrames, d = new Float32Array(u);
25332
+ const c = Mg(e, t.name, i), l = qo(c, n, a, i), u = l.numFrames, d = new Float32Array(u);
25333
25333
  for (let T = 0; T < u; T++) {
25334
25334
  const _ = l.frames[T];
25335
25335
  let I = 0;
@@ -25474,14 +25474,14 @@ const gn = {
25474
25474
  // 60ms buffer
25475
25475
  adaptiveThresholding: !1
25476
25476
  }
25477
- }, kg = {
25477
+ }, Ig = {
25478
25478
  baseThreshold: 0.3,
25479
25479
  adaptiveThresholding: !1,
25480
25480
  adaptiveWindowSize: 50,
25481
25481
  minTransientInterval: 0.02
25482
25482
  // 20ms minimum between transients (fallback)
25483
25483
  };
25484
- class Ig {
25484
+ class Dg {
25485
25485
  /**
25486
25486
  * Create a new TransientDetector
25487
25487
  *
@@ -25494,7 +25494,7 @@ class Ig {
25494
25494
  high: { ...gn.high, ...i?.high }
25495
25495
  };
25496
25496
  if (this.config = {
25497
- ...kg,
25497
+ ...Ig,
25498
25498
  ...n,
25499
25499
  bandConfig: a
25500
25500
  }, t !== void 0 && (this.config.bands = t), this.config.baseThreshold < 0 || this.config.baseThreshold > 1)
@@ -26173,7 +26173,7 @@ class Vo {
26173
26173
  };
26174
26174
  }
26175
26175
  }
26176
- class Dg {
26176
+ class Eg {
26177
26177
  constructor(e = {}) {
26178
26178
  this.id = "high-bpm-grid-restriction", this.description = "Restricts 16th notes and triplets to 8th notes at high BPMs for playability", this.restrict16thBpm = e.restrict16thBpm ?? 160, this.restrictTripletBpm = e.restrictTripletBpm ?? 200;
26179
26179
  }
@@ -26201,10 +26201,10 @@ class Dg {
26201
26201
  }
26202
26202
  }
26203
26203
  const jo = {
26204
- rules: [new Dg()],
26204
+ rules: [new Eg()],
26205
26205
  enabled: !0
26206
26206
  };
26207
- class Eg {
26207
+ class xg {
26208
26208
  /**
26209
26209
  * Create a new TempoAwareQuantizer.
26210
26210
  *
@@ -26277,16 +26277,16 @@ class Eg {
26277
26277
  return i;
26278
26278
  }
26279
26279
  }
26280
- const xg = {
26280
+ const Rg = {
26281
26281
  phraseSizes: [1, 2, 4, 8],
26282
26282
  minOccurrences: 3,
26283
26283
  topSignificantCount: 10,
26284
26284
  includePhrasesWithoutVariation: !1,
26285
26285
  minNotesPerPhrase: (s) => 1 + s
26286
26286
  };
26287
- class Rg {
26287
+ class Pg {
26288
26288
  constructor(e = {}) {
26289
- this.config = { ...xg, ...e };
26289
+ this.config = { ...Rg, ...e };
26290
26290
  }
26291
26291
  /**
26292
26292
  * Analyze quantized band streams for rhythmic phrases
@@ -26475,15 +26475,15 @@ class Rg {
26475
26475
  return i * n;
26476
26476
  }
26477
26477
  }
26478
- const Pg = {
26478
+ const Bg = {
26479
26479
  beatsPerSection: 8,
26480
26480
  // 2 measures in 4/4 time
26481
26481
  sparseThreshold: 1,
26482
26482
  denseThreshold: 1.5
26483
26483
  };
26484
- class Bg {
26484
+ class Ng {
26485
26485
  constructor(e = {}) {
26486
- this.config = { ...Pg, ...e };
26486
+ this.config = { ...Bg, ...e };
26487
26487
  }
26488
26488
  /**
26489
26489
  * Analyze quantized band streams for density
@@ -26704,11 +26704,11 @@ const Ko = {
26704
26704
  mid: 0.95,
26705
26705
  high: 1
26706
26706
  }
26707
- }, Ng = {
26707
+ }, Fg = {
26708
26708
  low: 0.8,
26709
26709
  mid: 0.95,
26710
26710
  high: 1
26711
- }, Fg = {
26711
+ }, $g = {
26712
26712
  ddr: {
26713
26713
  ioiVarianceWeight: 0.2,
26714
26714
  syncopationWeight: 0.15,
@@ -26728,15 +26728,15 @@ const Ko = {
26728
26728
  densityWeight: 0.2
26729
26729
  }
26730
26730
  };
26731
- function t0(s) {
26732
- const e = Fg[s];
26731
+ function i0(s) {
26732
+ const e = $g[s];
26733
26733
  return {
26734
26734
  ...Ko,
26735
26735
  ...e,
26736
- bandBiasWeights: { ...Ng }
26736
+ bandBiasWeights: { ...Fg }
26737
26737
  };
26738
26738
  }
26739
- class $g {
26739
+ class Og {
26740
26740
  constructor(e = {}) {
26741
26741
  this.config = { ...Ko, ...e };
26742
26742
  }
@@ -26936,14 +26936,14 @@ class $g {
26936
26936
  this.config = { ...this.config, ...e };
26937
26937
  }
26938
26938
  }
26939
- const Og = {
26939
+ const zg = {
26940
26940
  transitionOverlapBeats: 0,
26941
26941
  // No overlap by default - clean section boundaries
26942
26942
  preserveGridDecisions: !0
26943
- }, zg = 1, Lg = 1.5;
26944
- class Wg {
26943
+ }, Lg = 1, Wg = 1.5;
26944
+ class Hg {
26945
26945
  constructor(e = {}) {
26946
- this.config = { ...Og, ...e };
26946
+ this.config = { ...zg, ...e };
26947
26947
  }
26948
26948
  /**
26949
26949
  * Generate a composite stream from quantized band streams and scoring results
@@ -27048,7 +27048,7 @@ class Wg {
27048
27048
  const o = Math.max(...e.map((c) => c.beatIndex)) + 1;
27049
27049
  a = e.length / o * (i / 60);
27050
27050
  }
27051
- return a < zg ? "easy" : a > Lg ? "hard" : "medium";
27051
+ return a < Lg ? "easy" : a > Wg ? "hard" : "medium";
27052
27052
  }
27053
27053
  /**
27054
27054
  * Get the current configuration
@@ -27063,7 +27063,7 @@ const ua = {
27063
27063
  fillEmptyMeasures: !0,
27064
27064
  addedBeatIntensity: 0.45,
27065
27065
  marginSeconds: 0.5
27066
- }, Hg = {
27066
+ }, qg = {
27067
27067
  ddr: {
27068
27068
  strongBeatEmphasis: "natural",
27069
27069
  downbeatProximityRange: 1,
@@ -27086,19 +27086,19 @@ const ua = {
27086
27086
  marginSeconds: 0.5
27087
27087
  }
27088
27088
  };
27089
- function i0(s) {
27090
- return { ...Hg[s] };
27089
+ function n0(s) {
27090
+ return { ...qg[s] };
27091
27091
  }
27092
- function qg(s) {
27092
+ function Gg(s) {
27093
27093
  return s % 3 === 0 ? 3 : 2;
27094
27094
  }
27095
- function Gg(s, e) {
27095
+ function Ug(s, e) {
27096
27096
  return s % e === 0;
27097
27097
  }
27098
- function Ug(s, e) {
27098
+ function Vg(s, e) {
27099
27099
  return s % e !== 0;
27100
27100
  }
27101
- function Vg(s, e) {
27101
+ function jg(s, e) {
27102
27102
  let t = s[0];
27103
27103
  for (const i of s)
27104
27104
  if (i.startBeat <= e)
@@ -27107,13 +27107,13 @@ function Vg(s, e) {
27107
27107
  break;
27108
27108
  return t;
27109
27109
  }
27110
- function jg(s, e, t) {
27110
+ function Kg(s, e, t) {
27111
27111
  if (t === "neutral")
27112
27112
  return !1;
27113
- const i = qg(e);
27114
- return t === "natural" ? Gg(s, i) : Ug(s, i);
27113
+ const i = Gg(e);
27114
+ return t === "natural" ? Ug(s, i) : Vg(s, i);
27115
27115
  }
27116
- class Kg {
27116
+ class Yg {
27117
27117
  constructor(e = {}) {
27118
27118
  this.config = { ...ua, ...e };
27119
27119
  }
@@ -27331,7 +27331,7 @@ class Kg {
27331
27331
  return e.filter((r) => r.timestamp < n || r.timestamp > a ? (i.marginRemovals++, !1) : !0);
27332
27332
  }
27333
27333
  }
27334
- const n0 = [
27334
+ const a0 = [
27335
27335
  "straight_16th",
27336
27336
  "triplet_8th",
27337
27337
  "straight_8th",
@@ -27418,7 +27418,7 @@ const n0 = [
27418
27418
  description: "Custom density-based variant — parameters provided at generation time",
27419
27419
  targetDensityRange: { min: 0, max: 1 / 0 }
27420
27420
  }
27421
- }, Yg = 70, Zg = 70, Xg = 120;
27421
+ }, Zg = 70, Xg = 70, Jg = 120;
27422
27422
  function at(s, e) {
27423
27423
  if (s === "natural")
27424
27424
  return [...qe.natural.allowedGridTypes];
@@ -27427,13 +27427,13 @@ function at(s, e) {
27427
27427
  if (s === "medium")
27428
27428
  return ["straight_8th", "quarter_triplet"];
27429
27429
  if (s === "hard")
27430
- return e >= Zg ? ["straight_8th", "quarter_triplet"] : [...qe.hard.allowedGridTypes];
27430
+ return e >= Xg ? ["straight_8th", "quarter_triplet"] : [...qe.hard.allowedGridTypes];
27431
27431
  if (s === "custom")
27432
27432
  return [...qe.custom.allowedGridTypes];
27433
27433
  const t = s;
27434
27434
  throw new Error(`Unhandled difficulty: ${t}`);
27435
27435
  }
27436
- const Jg = {
27436
+ const Qg = {
27437
27437
  straight_4th: ["straight_4th"],
27438
27438
  straight_8th: ["straight_8th", "quarter_triplet"],
27439
27439
  quarter_triplet: ["quarter_triplet", "straight_8th"],
@@ -27441,15 +27441,15 @@ const Jg = {
27441
27441
  triplet_8th: ["triplet_8th", "straight_8th", "quarter_triplet"],
27442
27442
  straight_16th: ["straight_16th", "triplet_8th", "straight_8th", "quarter_triplet"]
27443
27443
  };
27444
- function Qg(s, e) {
27445
- const t = Jg[s.maxGridType] ?? [s.maxGridType];
27444
+ function ey(s, e) {
27445
+ const t = Qg[s.maxGridType] ?? [s.maxGridType];
27446
27446
  if (!s.bpmBasedQuantization)
27447
27447
  return [...t];
27448
- const i = s.restrictBpm ?? Yg, n = s.quarterNoteBpm ?? Xg;
27448
+ const i = s.restrictBpm ?? Zg, n = s.quarterNoteBpm ?? Jg;
27449
27449
  let a = [...t];
27450
27450
  return e >= i && (a = a.filter((r) => r !== "straight_16th" && r !== "triplet_8th")), e > n && (a = a.filter((r) => r !== "straight_8th")), a;
27451
27451
  }
27452
- function ey(s, e) {
27452
+ function ty(s, e) {
27453
27453
  if (s.length === 0 || e <= 0)
27454
27454
  return 0;
27455
27455
  const t = 60 / e;
@@ -27457,7 +27457,7 @@ function ey(s, e) {
27457
27457
  ...s.map((n) => Hn[n])
27458
27458
  ) / t;
27459
27459
  }
27460
- const ty = {
27460
+ const iy = {
27461
27461
  logConversions: !1,
27462
27462
  preservePhraseBoundaries: !0,
27463
27463
  simplificationIntensityThreshold: 0.3,
@@ -27472,10 +27472,10 @@ const ty = {
27472
27472
  seed: void 0,
27473
27473
  rhythmicBalanceConfig: void 0
27474
27474
  };
27475
- function a0(s, e, t) {
27475
+ function s0(s, e, t) {
27476
27476
  return t !== void 0 ? at(e, t).includes(s) : qe[e].allowedGridTypes.includes(s);
27477
27477
  }
27478
- function s0(s, e) {
27478
+ function r0(s, e) {
27479
27479
  return e !== void 0 ? at(s, e) : [...qe[s].allowedGridTypes];
27480
27480
  }
27481
27481
  function qn(s, e, t, i) {
@@ -27493,10 +27493,10 @@ function qn(s, e, t, i) {
27493
27493
  return s;
27494
27494
  }
27495
27495
  }
27496
- function r0(s) {
27496
+ function o0(s) {
27497
27497
  return s;
27498
27498
  }
27499
- function iy(s, e, t) {
27499
+ function ny(s, e, t) {
27500
27500
  const i = [], n = t !== void 0 ? at(e, t) : qe[e].allowedGridTypes;
27501
27501
  for (const a of s)
27502
27502
  n.includes(a.gridType) || i.push({
@@ -27513,7 +27513,7 @@ function iy(s, e, t) {
27513
27513
  }
27514
27514
  class Gn {
27515
27515
  constructor(e = {}) {
27516
- this.currentUnifiedBeatMap = null, this.config = { ...ty, ...e };
27516
+ this.currentUnifiedBeatMap = null, this.config = { ...iy, ...e };
27517
27517
  }
27518
27518
  /**
27519
27519
  * Lock grid type per beat index before density work
@@ -27664,7 +27664,7 @@ class Gn {
27664
27664
  this.currentUnifiedBeatMap = i;
27665
27665
  const r = i?.quarterNoteBpm ?? 120, o = i?.duration ?? 120;
27666
27666
  this.calculateDensity(e.beats, o);
27667
- const c = Qg(t, r), l = ey(c, r);
27667
+ const c = ey(t, r), l = ty(c, r);
27668
27668
  let u = t.targetDensity, d = !1;
27669
27669
  t.targetDensity > l && (u = l, d = !0, console.warn(
27670
27670
  `[DifficultyVariantGenerator] Target density ${t.targetDensity.toFixed(2)} nps exceeds max achievable ${l.toFixed(2)} nps for grid types [${c.join(", ")}] at ${r} BPM. Clamping to ${u.toFixed(2)} nps.`
@@ -27818,7 +27818,7 @@ class Gn {
27818
27818
  * @param difficulty - The difficulty level
27819
27819
  */
27820
27820
  validateVariant(e, t) {
27821
- const i = iy(e.beats, t);
27821
+ const i = ny(e.beats, t);
27822
27822
  if (i.isValid)
27823
27823
  this.config.logConversions && console.log(
27824
27824
  `[DifficultyVariantGenerator] ${t} variant validated: ${i.totalBeats} beats, no subdivision violations`
@@ -28199,8 +28199,8 @@ class Gn {
28199
28199
  const c = e % 4;
28200
28200
  return c === 0 || c === 2;
28201
28201
  }
28202
- const o = Vg(a, e).timeSignature.beatsPerMeasure;
28203
- return jg(
28202
+ const o = jg(a, e).timeSignature.beatsPerMeasure;
28203
+ return Kg(
28204
28204
  n.beatInMeasure,
28205
28205
  o,
28206
28206
  t
@@ -29238,13 +29238,13 @@ const Yo = {
29238
29238
  description: "Focus on bass/low-frequency rhythms"
29239
29239
  }
29240
29240
  };
29241
- function o0(s) {
29241
+ function c0(s) {
29242
29242
  return Yo[s];
29243
29243
  }
29244
- function c0() {
29244
+ function l0() {
29245
29245
  return Object.keys(Yo);
29246
29246
  }
29247
- const ny = {
29247
+ const ay = {
29248
29248
  difficulty: "medium",
29249
29249
  outputMode: "composite",
29250
29250
  measureStartOffset: 0,
@@ -29273,18 +29273,18 @@ class mt {
29273
29273
  ...e.rhythmicBalanceConfig
29274
29274
  };
29275
29275
  this.options = {
29276
- ...ny,
29276
+ ...ay,
29277
29277
  ...e,
29278
29278
  rhythmicBalanceConfig: t
29279
- }, this.multiBandAnalyzer = new Ag(), this.transientDetector = new Ig({
29279
+ }, this.multiBandAnalyzer = new kg(), this.transientDetector = new Dg({
29280
29280
  bandConfig: this.options.transientConfig
29281
29281
  }), this.rhythmQuantizer = new Vo({
29282
29282
  minimumTransientIntensity: this.options.minimumTransientIntensity,
29283
29283
  densityValidation: this.options.densityValidation
29284
- }), this.phraseAnalyzer = new Rg(this.options.phraseAnalyzerConfig), this.densityAnalyzer = new Bg(), this.streamScorer = new $g(this.options.scoringConfig), this.compositeGenerator = new Wg(), this.variantGenerator = new Gn({
29284
+ }), this.phraseAnalyzer = new Pg(this.options.phraseAnalyzerConfig), this.densityAnalyzer = new Ng(), this.streamScorer = new Og(this.options.scoringConfig), this.compositeGenerator = new Hg(), this.variantGenerator = new Gn({
29285
29285
  seed: this.options.seed,
29286
29286
  rhythmicBalanceConfig: t
29287
- }), this.rhythmicBalancer = new Kg(this.options.rhythmicBalanceConfig), this.tempoAwareQuantizer = new Eg(
29287
+ }), this.rhythmicBalancer = new Yg(this.options.rhythmicBalanceConfig), this.tempoAwareQuantizer = new xg(
29288
29288
  this.options.tempoQuantizationConfig ?? jo,
29289
29289
  this.rhythmQuantizer
29290
29290
  );
@@ -30129,7 +30129,7 @@ class mt {
30129
30129
  };
30130
30130
  }
30131
30131
  }
30132
- const ay = {
30132
+ const sy = {
30133
30133
  minFrequency: 80,
30134
30134
  maxFrequency: 1e3,
30135
30135
  frameSize: 2048,
@@ -30139,7 +30139,7 @@ const ay = {
30139
30139
  selfTransitionProbability: 0.99,
30140
30140
  yinThreshold: 0.4,
30141
30141
  targetSampleRate: 44100
30142
- }, ar = 69, sr = 440, sy = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
30142
+ }, ar = 69, sr = 440, ry = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
30143
30143
  class Zo {
30144
30144
  /**
30145
30145
  * Create a new PitchDetector
@@ -30147,7 +30147,7 @@ class Zo {
30147
30147
  * @param config - Configuration options (partial, defaults applied)
30148
30148
  */
30149
30149
  constructor(e = {}) {
30150
- if (this.states = [], this.transitionMatrix = [], this.config = { ...ay, ...e }, this.config.minFrequency <= 0)
30150
+ if (this.states = [], this.transitionMatrix = [], this.config = { ...sy, ...e }, this.config.minFrequency <= 0)
30151
30151
  throw new Error(`minFrequency must be positive, got: ${this.config.minFrequency}`);
30152
30152
  if (this.config.maxFrequency <= this.config.minFrequency)
30153
30153
  throw new Error("maxFrequency must be greater than minFrequency");
@@ -30230,7 +30230,7 @@ class Zo {
30230
30230
  */
30231
30231
  midiToNoteName(e) {
30232
30232
  const t = Math.floor(e / 12) - 1, i = Math.round(e) % 12;
30233
- return `${sy[i]}${t}`;
30233
+ return `${ry[i]}${t}`;
30234
30234
  }
30235
30235
  /**
30236
30236
  * Detect pitch in an audio buffer
@@ -30587,7 +30587,7 @@ const da = "https://arweave.net/_HoMwkbF0JUamTiVGWNnCCC5yDjcPry-ENhzN6Xn3U0/mode
30587
30587
  hopSize: 128,
30588
30588
  targetSampleRate: 44100,
30589
30589
  crepeModelUrl: da
30590
- }, ry = 69, oy = 440, cy = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
30590
+ }, oy = 69, cy = 440, ly = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
30591
30591
  class qi {
30592
30592
  /**
30593
30593
  * Private constructor - use static `create()` factory method instead.
@@ -31094,7 +31094,7 @@ class qi {
31094
31094
  * @internal
31095
31095
  */
31096
31096
  frequencyToMidi(e) {
31097
- return ry + 12 * Math.log2(e / oy);
31097
+ return oy + 12 * Math.log2(e / cy);
31098
31098
  }
31099
31099
  /**
31100
31100
  * Convert MIDI note number to note name (e.g., "C4", "F#5").
@@ -31102,7 +31102,7 @@ class qi {
31102
31102
  */
31103
31103
  midiToNoteName(e) {
31104
31104
  const t = Math.floor(e / 12) - 1, i = Math.round(e) % 12;
31105
- return `${cy[i]}${t}`;
31105
+ return `${ly[i]}${t}`;
31106
31106
  }
31107
31107
  }
31108
31108
  const or = {
@@ -31111,7 +31111,7 @@ const or = {
31111
31111
  pitchAlgorithm: "pitch_melodia",
31112
31112
  crepeModelUrl: da
31113
31113
  };
31114
- class ly {
31114
+ class uy {
31115
31115
  /**
31116
31116
  * Create a new PitchBeatLinker
31117
31117
  *
@@ -31254,19 +31254,19 @@ class ly {
31254
31254
  };
31255
31255
  }
31256
31256
  }
31257
- const uy = {
31257
+ const dy = {
31258
31258
  maxTimeGapForConsecutive: 0.5
31259
31259
  };
31260
31260
  function Xo(s) {
31261
31261
  return s === 0 ? "unison" : s <= 2 ? "small" : s <= 4 ? "medium" : s <= 7 ? "large" : "very_large";
31262
31262
  }
31263
- function dy(s, e) {
31263
+ function hy(s, e) {
31264
31264
  return Math.abs(s - e);
31265
31265
  }
31266
- function hy(s, e) {
31266
+ function my(s, e) {
31267
31267
  return s === null || e === null ? "none" : s > e ? "up" : s < e ? "down" : "stable";
31268
31268
  }
31269
- function my(s) {
31269
+ function fy(s) {
31270
31270
  if (s.length === 0)
31271
31271
  return "stable";
31272
31272
  let e = 0, t = 0, i = 0;
@@ -31281,7 +31281,7 @@ function cr(s) {
31281
31281
  const e = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"], t = Math.floor(s / 12) - 1, i = s % 12;
31282
31282
  return `${e[i]}${t}`;
31283
31283
  }
31284
- class fy {
31284
+ class py {
31285
31285
  /**
31286
31286
  * Create a new MelodyContourAnalyzer
31287
31287
  *
@@ -31289,7 +31289,7 @@ class fy {
31289
31289
  */
31290
31290
  constructor(e = {}) {
31291
31291
  this.config = {
31292
- ...uy,
31292
+ ...dy,
31293
31293
  ...e
31294
31294
  };
31295
31295
  }
@@ -31337,7 +31337,7 @@ class fy {
31337
31337
  o = "none", c = 0, l = "unison";
31338
31338
  else {
31339
31339
  const u = n.pitch.midiNote, d = a.pitch.midiNote;
31340
- u === null || d === null ? (o = "none", c = 0, l = "unison") : (o = hy(u, d), c = dy(u, d), l = Xo(c));
31340
+ u === null || d === null ? (o = "none", c = 0, l = "unison") : (o = my(u, d), c = hy(u, d), l = Xo(c));
31341
31341
  }
31342
31342
  t.push({
31343
31343
  ...n,
@@ -31383,7 +31383,7 @@ class fy {
31383
31383
  mediumTermDirection: "stable",
31384
31384
  longTermDirection: "stable"
31385
31385
  };
31386
- const n = Math.min(...i), a = Math.max(...i), r = cr(n), o = cr(a), c = this.buildSegments(t), l = my(c), u = this.calculateTimeWindowDirection(e, 1, 2), d = this.calculateTimeWindowDirection(e, 4, 8), h = this.calculateTimeWindowDirection(e, 16, 1 / 0);
31386
+ const n = Math.min(...i), a = Math.max(...i), r = cr(n), o = cr(a), c = this.buildSegments(t), l = fy(c), u = this.calculateTimeWindowDirection(e, 1, 2), d = this.calculateTimeWindowDirection(e, 4, 8), h = this.calculateTimeWindowDirection(e, 16, 1 / 0);
31387
31387
  return {
31388
31388
  segments: c,
31389
31389
  direction: l,
@@ -31519,7 +31519,7 @@ class fy {
31519
31519
  };
31520
31520
  }
31521
31521
  }
31522
- const py = {
31522
+ const gy = {
31523
31523
  algorithm: "pitch_melodia",
31524
31524
  minFrequency: 80,
31525
31525
  maxFrequency: 2e4,
@@ -31529,8 +31529,8 @@ const py = {
31529
31529
  resolveUrl: Ae.resolveUrl.bind(Ae),
31530
31530
  includeContour: !0,
31531
31531
  onProgress: void 0
31532
- }, gy = 69, yy = 440, vy = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
31533
- class l0 {
31532
+ }, yy = 69, vy = 440, by = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
31533
+ class u0 {
31534
31534
  /**
31535
31535
  * Create a new PitchAnalyzer
31536
31536
  *
@@ -31538,7 +31538,7 @@ class l0 {
31538
31538
  */
31539
31539
  constructor(e = {}) {
31540
31540
  this.config = {
31541
- ...py,
31541
+ ...gy,
31542
31542
  ...e
31543
31543
  };
31544
31544
  }
@@ -31820,17 +31820,17 @@ class l0 {
31820
31820
  * Convert frequency in Hz to MIDI note number
31821
31821
  */
31822
31822
  frequencyToMidi(e) {
31823
- return gy + 12 * Math.log2(e / yy);
31823
+ return yy + 12 * Math.log2(e / vy);
31824
31824
  }
31825
31825
  /**
31826
31826
  * Convert MIDI note number to note name (e.g., "C4", "F#5")
31827
31827
  */
31828
31828
  midiToNoteName(e) {
31829
31829
  const t = Math.floor(e / 12) - 1, i = Math.round(e) % 12;
31830
- return `${vy[i]}${t}`;
31830
+ return `${by[i]}${t}`;
31831
31831
  }
31832
31832
  }
31833
- const by = [
31833
+ const wy = [
31834
31834
  // Single key patterns
31835
31835
  {
31836
31836
  id: "ddr_basic_single_up",
@@ -31955,7 +31955,7 @@ const by = [
31955
31955
  category: "basic",
31956
31956
  difficulty: 2
31957
31957
  }
31958
- ], wy = [
31958
+ ], Sy = [
31959
31959
  // Clockwise rolls
31960
31960
  {
31961
31961
  id: "ddr_roll_clockwise_full",
@@ -32061,7 +32061,7 @@ const by = [
32061
32061
  category: "roll",
32062
32062
  difficulty: 3
32063
32063
  }
32064
- ], Sy = [
32064
+ ], _y = [
32065
32065
  // Vertical streams
32066
32066
  {
32067
32067
  id: "ddr_stream_vertical_8",
@@ -32173,7 +32173,7 @@ const by = [
32173
32173
  category: "stream",
32174
32174
  difficulty: 6
32175
32175
  }
32176
- ], _y = [
32176
+ ], Ty = [
32177
32177
  // Opposite jumps (maximum distance)
32178
32178
  {
32179
32179
  id: "ddr_jump_opposite_vertical",
@@ -32277,7 +32277,7 @@ const by = [
32277
32277
  category: "jump",
32278
32278
  difficulty: 6
32279
32279
  }
32280
- ], Ty = [
32280
+ ], Cy = [
32281
32281
  // Build-up transitions
32282
32282
  {
32283
32283
  id: "ddr_transition_build_up",
@@ -32320,7 +32320,7 @@ const by = [
32320
32320
  category: "transition",
32321
32321
  difficulty: 4
32322
32322
  }
32323
- ], Cy = [
32323
+ ], My = [
32324
32324
  // Single fret patterns
32325
32325
  {
32326
32326
  id: "gh_basic_single_1",
@@ -32495,7 +32495,7 @@ const by = [
32495
32495
  category: "basic",
32496
32496
  difficulty: 2
32497
32497
  }
32498
- ], My = [
32498
+ ], Ay = [
32499
32499
  // Two-fret alternations
32500
32500
  {
32501
32501
  id: "gh_alternating_1_3",
@@ -32619,7 +32619,7 @@ const by = [
32619
32619
  category: "basic",
32620
32620
  difficulty: 4
32621
32621
  }
32622
- ], Ay = [
32622
+ ], ky = [
32623
32623
  // Power chord shapes (1-3-5 and variations)
32624
32624
  {
32625
32625
  id: "gh_chord_power_full",
@@ -32713,7 +32713,7 @@ const by = [
32713
32713
  category: "chord",
32714
32714
  difficulty: 5
32715
32715
  }
32716
- ], ky = [
32716
+ ], Iy = [
32717
32717
  // Wide jumps
32718
32718
  {
32719
32719
  id: "gh_jump_wide_1_4",
@@ -32808,7 +32808,7 @@ const by = [
32808
32808
  category: "jump",
32809
32809
  difficulty: 5
32810
32810
  }
32811
- ], Iy = [
32811
+ ], Dy = [
32812
32812
  // Build-up transitions
32813
32813
  {
32814
32814
  id: "gh_transition_build_up",
@@ -32872,18 +32872,18 @@ const by = [
32872
32872
  category: "transition",
32873
32873
  difficulty: 3
32874
32874
  }
32875
- ], Dy = [
32876
- ...by,
32875
+ ], Ey = [
32877
32876
  ...wy,
32878
32877
  ...Sy,
32879
32878
  ..._y,
32880
- ...Ty
32881
- ], Ey = [
32882
- ...Cy,
32879
+ ...Ty,
32880
+ ...Cy
32881
+ ], xy = [
32883
32882
  ...My,
32884
32883
  ...Ay,
32885
32884
  ...ky,
32886
- ...Iy
32885
+ ...Iy,
32886
+ ...Dy
32887
32887
  ];
32888
32888
  function Jo(s, e) {
32889
32889
  const t = /* @__PURE__ */ new Map(), i = ["basic", "roll", "stream", "jump", "chord", "transition"];
@@ -32903,17 +32903,17 @@ function Jo(s, e) {
32903
32903
  byDifficulty: n
32904
32904
  };
32905
32905
  }
32906
- const Qo = Jo("ddr", Dy), ec = Jo(
32906
+ const Qo = Jo("ddr", Ey), ec = Jo(
32907
32907
  "guitar_hero",
32908
- Ey
32908
+ xy
32909
32909
  );
32910
- function u0(s) {
32910
+ function d0(s) {
32911
32911
  return s === "ddr" ? Qo : ec;
32912
32912
  }
32913
- function d0(s, e) {
32913
+ function h0(s, e) {
32914
32914
  return s.byCategory.get(e) ?? [];
32915
32915
  }
32916
- function h0(s, e = 1, t = 10) {
32916
+ function m0(s, e = 1, t = 10) {
32917
32917
  const i = [];
32918
32918
  for (let n = e; n <= t; n++) {
32919
32919
  const a = s.byDifficulty.get(n);
@@ -32921,24 +32921,24 @@ function h0(s, e = 1, t = 10) {
32921
32921
  }
32922
32922
  return i;
32923
32923
  }
32924
- function m0(s, e) {
32924
+ function f0(s, e) {
32925
32925
  return s.patterns.filter(
32926
32926
  (t) => e.every((i) => t.tags.includes(i))
32927
32927
  );
32928
32928
  }
32929
- function f0(s, e) {
32929
+ function p0(s, e) {
32930
32930
  return s.patterns.filter((t) => t.keys.length === e);
32931
32931
  }
32932
- function p0(s, e) {
32932
+ function g0(s, e) {
32933
32933
  const t = e ? s.patterns.filter(e) : s.patterns;
32934
32934
  if (t.length === 0) return;
32935
32935
  const i = Math.floor(Math.random() * t.length);
32936
32936
  return t[i];
32937
32937
  }
32938
- function g0(s, e) {
32938
+ function y0(s, e) {
32939
32939
  return s.patterns.find((t) => t.id === e);
32940
32940
  }
32941
- function y0(s) {
32941
+ function v0(s) {
32942
32942
  const e = {
32943
32943
  basic: 0,
32944
32944
  roll: 0,
@@ -32982,7 +32982,7 @@ const tc = {
32982
32982
  descending: { unison: "left", small: "down", medium: "down", large: "down", very_large: "right" },
32983
32983
  stable: "left"
32984
32984
  }
32985
- }, xy = {
32985
+ }, Ry = {
32986
32986
  up: { ascending: "up", descending: "left", stable: "up" },
32987
32987
  right: { ascending: "up", descending: "down", stable: "right" },
32988
32988
  down: { ascending: "right", descending: "down", stable: "down" },
@@ -33016,7 +33016,7 @@ const tc = {
33016
33016
  descending: { unison: 5, small: 4, medium: 4, large: 3, very_large: 2 },
33017
33017
  stable: 5
33018
33018
  }
33019
- }, Ry = {
33019
+ }, Py = {
33020
33020
  1: { ascending: 2, descending: 1, stable: 1 },
33021
33021
  2: { ascending: 3, descending: 1, stable: 2 },
33022
33022
  3: { ascending: 4, descending: 2, stable: 3 },
@@ -33026,29 +33026,29 @@ const tc = {
33026
33026
  function nc(s) {
33027
33027
  return s.intervalCategory ?? "small";
33028
33028
  }
33029
- function Py(s, e, t) {
33029
+ function By(s, e, t) {
33030
33030
  const i = e ?? "left";
33031
33031
  if (s.direction === "stable" || s.intervalCategory === "unison")
33032
33032
  return i;
33033
33033
  if (t === "easy") {
33034
- const o = xy[i];
33034
+ const o = Ry[i];
33035
33035
  return s.direction === "up" ? o.ascending : o.descending;
33036
33036
  }
33037
33037
  const n = tc[i], a = s.direction === "up" ? "ascending" : "descending", r = nc(s);
33038
33038
  return n[a][r];
33039
33039
  }
33040
- function By(s, e, t) {
33040
+ function Ny(s, e, t) {
33041
33041
  const i = e ?? 3;
33042
33042
  if (s.direction === "stable" || s.intervalCategory === "unison")
33043
33043
  return i;
33044
33044
  if (t === "easy") {
33045
- const o = Ry[i];
33045
+ const o = Py[i];
33046
33046
  return s.direction === "up" ? o.ascending : o.descending;
33047
33047
  }
33048
33048
  const n = ic[i], a = s.direction === "up" ? "ascending" : "descending", r = nc(s);
33049
33049
  return n[a][r];
33050
33050
  }
33051
- function Ny(s, e, t, i) {
33051
+ function Fy(s, e, t, i) {
33052
33052
  const n = /* @__PURE__ */ new Map();
33053
33053
  if (e)
33054
33054
  for (const c of e) {
@@ -33063,11 +33063,11 @@ function Ny(s, e, t, i) {
33063
33063
  for (let m = -2; m <= 2 && (u = n.get(l + m) ?? null, !u); m++)
33064
33064
  ;
33065
33065
  let d = null, h = 0;
33066
- u && u.direction !== "none" && (d = t === "ddr" ? Py(u, o, i) : By(u, o, i), h = u.pitch?.probability ?? 0.5), a.push(d), r.push(h), o = d;
33066
+ u && u.direction !== "none" && (d = t === "ddr" ? By(u, o, i) : Ny(u, o, i), h = u.pitch?.probability ?? 0.5), a.push(d), r.push(h), o = d;
33067
33067
  }
33068
33068
  return { pitchKeys: a, probabilities: r };
33069
33069
  }
33070
- function Fy(s) {
33070
+ function $y(s) {
33071
33071
  const e = [];
33072
33072
  let t = -1;
33073
33073
  for (let i = 0; i <= s.length; i++) {
@@ -33106,7 +33106,7 @@ function wi(s, e, t, i, n) {
33106
33106
  }
33107
33107
  return !0;
33108
33108
  }
33109
- function $y(s, e, t, i, n) {
33109
+ function Oy(s, e, t, i, n) {
33110
33110
  const a = [], r = e.filter(
33111
33111
  (h) => h.difficulty <= t && h.keys.length > 0
33112
33112
  );
@@ -33203,7 +33203,7 @@ function Si(s, e = Math.random) {
33203
33203
  const t = s[0].keys.length, i = s.filter((n) => n.keys.length === t);
33204
33204
  return i[Math.floor(e() * i.length)];
33205
33205
  }
33206
- function Oy(s, e, t) {
33206
+ function zy(s, e, t) {
33207
33207
  const i = s.length, n = [...s], a = new Array(i).fill(void 0);
33208
33208
  for (let r = 0; r < e.length; r++) {
33209
33209
  const o = t[r];
@@ -33224,7 +33224,7 @@ function Oy(s, e, t) {
33224
33224
  patternIds: a
33225
33225
  };
33226
33226
  }
33227
- function zy(s, e) {
33227
+ function Ly(s, e) {
33228
33228
  const t = [];
33229
33229
  if (e <= 0 || s.length === 0)
33230
33230
  return { positions: t };
@@ -33234,7 +33234,7 @@ function zy(s, e) {
33234
33234
  s[a] === n ? (i++, i > e && t.push(a)) : i = 1;
33235
33235
  return { positions: t };
33236
33236
  }
33237
- function Ly(s, e, t, i = Math.random) {
33237
+ function Wy(s, e, t, i = Math.random) {
33238
33238
  const n = e.filter((o) => o.difficulty <= t);
33239
33239
  if (n.length === 0)
33240
33240
  return s;
@@ -33383,7 +33383,7 @@ class vn {
33383
33383
  }));
33384
33384
  const a = [], r = this.getMaxPatternDifficulty(i);
33385
33385
  let o = 0;
33386
- const { pitchKeys: c, probabilities: l } = Ny(
33386
+ const { pitchKeys: c, probabilities: l } = Fy(
33387
33387
  n,
33388
33388
  t,
33389
33389
  this.config.controllerMode,
@@ -33394,8 +33394,8 @@ class vn {
33394
33394
  this.config.pitchInfluenceWeight
33395
33395
  ), d = c.map(
33396
33396
  (v, S) => v !== null && u[S] ? v : null
33397
- ), h = this.config.controllerMode === "ddr" ? Qo.patterns : ec.patterns, m = Fy(d), f = /* @__PURE__ */ new Set(), p = m.map((v, S) => {
33398
- const T = $y(
33397
+ ), h = this.config.controllerMode === "ddr" ? Qo.patterns : ec.patterns, m = $y(d), f = /* @__PURE__ */ new Set(), p = m.map((v, S) => {
33398
+ const T = Oy(
33399
33399
  v,
33400
33400
  h,
33401
33401
  r,
@@ -33405,7 +33405,7 @@ class vn {
33405
33405
  for (const _ of T)
33406
33406
  _.pattern.id !== "__interpolated__" && f.add(_.pattern.id);
33407
33407
  return T;
33408
- }), { keys: g, patternIds: y } = Oy(
33408
+ }), { keys: g, patternIds: y } = zy(
33409
33409
  d,
33410
33410
  m,
33411
33411
  p
@@ -33475,9 +33475,9 @@ class vn {
33475
33475
  * Apply consecutive same-key limit to prevent monotonous patterns
33476
33476
  */
33477
33477
  applyConsecutiveLimit(e, t, i) {
33478
- const n = e.map((o) => o.key), a = this.config.consecutiveSameKeyLimit, { positions: r } = zy(n, a);
33478
+ const n = e.map((o) => o.key), a = this.config.consecutiveSameKeyLimit, { positions: r } = Ly(n, a);
33479
33479
  for (let o = 0; o < r.length; o++) {
33480
- const c = r[o], l = Ly(
33480
+ const c = r[o], l = Wy(
33481
33481
  e[c].key,
33482
33482
  t,
33483
33483
  i,
@@ -34367,12 +34367,12 @@ class ma {
34367
34367
  ...n.pitchDetector,
34368
34368
  voicingThreshold: this.options.voicingThreshold
34369
34369
  });
34370
- const a = new ly(n), r = await a.linkWithComposite(
34370
+ const a = new uy(n), r = await a.linkWithComposite(
34371
34371
  t.composite,
34372
34372
  e
34373
34373
  );
34374
34374
  i?.(0.4, "Analyzing melody contour...");
34375
- const c = new fy().analyze(r);
34375
+ const c = new py().analyze(r);
34376
34376
  i?.(0.8, "Deriving variant pitches...");
34377
34377
  let l;
34378
34378
  if (!t.difficultyVariants)
@@ -34447,7 +34447,7 @@ class ma {
34447
34447
  };
34448
34448
  }
34449
34449
  }
34450
- class v0 {
34450
+ class b0 {
34451
34451
  // ============================================================================
34452
34452
  // Export: GeneratedLevel → FullBeatMapExportData
34453
34453
  // ============================================================================
@@ -35373,7 +35373,7 @@ class v0 {
35373
35373
  `);
35374
35374
  }
35375
35375
  }
35376
- function b0(s) {
35376
+ function w0(s) {
35377
35377
  return typeof s == "string" && [
35378
35378
  "humanoid",
35379
35379
  "beast",
@@ -35385,16 +35385,16 @@ function b0(s) {
35385
35385
  "monstrosity"
35386
35386
  ].includes(s);
35387
35387
  }
35388
- function w0(s) {
35388
+ function S0(s) {
35389
35389
  return typeof s == "string" && ["common", "uncommon", "elite", "boss"].includes(s);
35390
35390
  }
35391
- function S0(s) {
35391
+ function _0(s) {
35392
35392
  return typeof s == "string" && ["brute", "archer", "support"].includes(s);
35393
35393
  }
35394
- function _0(s) {
35394
+ function T0(s) {
35395
35395
  return typeof s == "string" && ["easy", "medium", "hard", "deadly"].includes(s);
35396
35396
  }
35397
- class T0 {
35397
+ class C0 {
35398
35398
  /**
35399
35399
  * Calculate average party level
35400
35400
  *
@@ -35618,31 +35618,31 @@ class T0 {
35618
35618
  const _e = [];
35619
35619
  for (let s = 0; s < 256; ++s)
35620
35620
  _e.push((s + 256).toString(16).slice(1));
35621
- function Wy(s, e = 0) {
35621
+ function Hy(s, e = 0) {
35622
35622
  return (_e[s[e + 0]] + _e[s[e + 1]] + _e[s[e + 2]] + _e[s[e + 3]] + "-" + _e[s[e + 4]] + _e[s[e + 5]] + "-" + _e[s[e + 6]] + _e[s[e + 7]] + "-" + _e[s[e + 8]] + _e[s[e + 9]] + "-" + _e[s[e + 10]] + _e[s[e + 11]] + _e[s[e + 12]] + _e[s[e + 13]] + _e[s[e + 14]] + _e[s[e + 15]]).toLowerCase();
35623
35623
  }
35624
35624
  let bn;
35625
- const Hy = new Uint8Array(16);
35626
- function qy() {
35625
+ const qy = new Uint8Array(16);
35626
+ function Gy() {
35627
35627
  if (!bn) {
35628
35628
  if (typeof crypto > "u" || !crypto.getRandomValues)
35629
35629
  throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
35630
35630
  bn = crypto.getRandomValues.bind(crypto);
35631
35631
  }
35632
- return bn(Hy);
35632
+ return bn(qy);
35633
35633
  }
35634
- const Gy = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), lr = { randomUUID: Gy };
35635
- function Uy(s, e, t) {
35634
+ const Uy = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), lr = { randomUUID: Uy };
35635
+ function Vy(s, e, t) {
35636
35636
  s = s || {};
35637
- const i = s.random ?? s.rng?.() ?? qy();
35637
+ const i = s.random ?? s.rng?.() ?? Gy();
35638
35638
  if (i.length < 16)
35639
35639
  throw new Error("Random bytes length must be >= 16");
35640
- return i[6] = i[6] & 15 | 64, i[8] = i[8] & 63 | 128, Wy(i);
35640
+ return i[6] = i[6] & 15 | 64, i[8] = i[8] & 63 | 128, Hy(i);
35641
35641
  }
35642
- function Vy(s, e, t) {
35643
- return lr.randomUUID && !s ? lr.randomUUID() : Uy(s);
35642
+ function jy(s, e, t) {
35643
+ return lr.randomUUID && !s ? lr.randomUUID() : Vy(s);
35644
35644
  }
35645
- class C0 {
35645
+ class M0 {
35646
35646
  constructor(e = {}) {
35647
35647
  this.options = {
35648
35648
  validateAudioUrls: !1,
@@ -35706,7 +35706,7 @@ class C0 {
35706
35706
  const i = ee.parseMetadata(e.metadata);
35707
35707
  if (!i && this.options.strict)
35708
35708
  throw new Error(`Failed to parse metadata for track at index ${t}`);
35709
- const n = e.chain_name, a = e.token_address, r = e.token_id, o = e.tx_id, c = e.platform, l = e.id || (n === "AR" ? `AR-${o}` : `${n}-${a}-${r}`), u = e.uuid || Vy(), d = ee.extractTitle(i || {}), h = ee.extractArtist(i || {}), f = typeof e.artwork_url == "string" && e.artwork_url || typeof e.image_url == "string" && e.image_url || null || ee.extractImageUrl(i || {}), p = ee.extractImageThumbUrl(i || {}), y = typeof e.audio_url == "string" && e.audio_url || null || ee.extractAudioUrl(i || {}), v = ee.extractAudioUrlLossless(i || {});
35709
+ const n = e.chain_name, a = e.token_address, r = e.token_id, o = e.tx_id, c = e.platform, l = e.id || (n === "AR" ? `AR-${o}` : `${n}-${a}-${r}`), u = e.uuid || jy(), d = ee.extractTitle(i || {}), h = ee.extractArtist(i || {}), f = typeof e.artwork_url == "string" && e.artwork_url || typeof e.image_url == "string" && e.image_url || null || ee.extractImageUrl(i || {}), p = ee.extractImageThumbUrl(i || {}), y = typeof e.audio_url == "string" && e.audio_url || null || ee.extractAudioUrl(i || {}), v = ee.extractAudioUrlLossless(i || {});
35710
35710
  if (!y) {
35711
35711
  if (this.options.strict)
35712
35712
  throw new Error(`No audio URL found for track: ${d || l}`);
@@ -35722,7 +35722,7 @@ class C0 {
35722
35722
  throw new Error(`Missing required fields for track: ${JSON.stringify({ title: d, artist: h, imageUrl: f })}`);
35723
35723
  return null;
35724
35724
  }
35725
- const S = typeof i?.description == "string" ? i.description : void 0, T = typeof i?.album == "string" ? i.album : void 0, _ = i?.duration ? Number(i.duration) : 0, I = ee.extractGenre(i || {}), D = i?.tags || [], R = i?.bpm ? Number(i.bpm) : void 0, q = typeof i?.key == "string" ? i.key : void 0, O = ee.convertAttributes(i?.attributes), W = zp(i || {}), Z = {
35725
+ const S = typeof i?.description == "string" ? i.description : void 0, T = typeof i?.album == "string" ? i.album : void 0, _ = i?.duration ? Number(i.duration) : 0, I = ee.extractGenre(i || {}), D = i?.tags || [], R = i?.bpm ? Number(i.bpm) : void 0, q = typeof i?.key == "string" ? i.key : void 0, O = ee.convertAttributes(i?.attributes), W = Lp(i || {}), Z = {
35726
35726
  id: l,
35727
35727
  uuid: u,
35728
35728
  playlist_index: t,
@@ -35825,7 +35825,7 @@ const _i = {
35825
35825
  gaussianSmoothMode: { mode: "standard" }
35826
35826
  // Default to standard mode
35827
35827
  };
35828
- class jy {
35828
+ class Ky {
35829
35829
  /**
35830
35830
  * Create a new Onset Strength Envelope calculator
35831
35831
  *
@@ -35887,7 +35887,7 @@ class jy {
35887
35887
  * @returns Onset strength envelope result
35888
35888
  */
35889
35889
  calculate(e) {
35890
- const t = Hi(e, this.config.targetSampleRate), i = t.targetSampleRate, n = e.duration, a = Math.round(this.config.fftWindowSize / 1e3 * i), r = Math.pow(2, Math.ceil(Math.log2(a))), o = Math.round(this.config.hopSizeMs / 1e3 * i), c = this.config.hopSizeMs / 1e3, l = qo(t.data, r, o, i), u = yg(
35890
+ const t = Hi(e, this.config.targetSampleRate), i = t.targetSampleRate, n = e.duration, a = Math.round(this.config.fftWindowSize / 1e3 * i), r = Math.pow(2, Math.ceil(Math.log2(a))), o = Math.round(this.config.hopSizeMs / 1e3 * i), c = this.config.hopSizeMs / 1e3, l = qo(t.data, r, o, i), u = vg(
35891
35891
  this.config.melBands,
35892
35892
  r,
35893
35893
  i
@@ -35913,7 +35913,7 @@ class jy {
35913
35913
  }
35914
35914
  m[S] = T;
35915
35915
  }
35916
- const f = 1 / c, p = vg(
35916
+ const f = 1 / c, p = bg(
35917
35917
  m,
35918
35918
  this.config.highPassCutoff,
35919
35919
  f
@@ -35921,7 +35921,7 @@ class jy {
35921
35921
  p,
35922
35922
  this.config.gaussianSmoothMs,
35923
35923
  f
35924
- ), y = bg(g), v = new Float32Array(g.length);
35924
+ ), y = wg(g), v = new Float32Array(g.length);
35925
35925
  if (y > 1e-10)
35926
35926
  for (let S = 0; S < g.length; S++)
35927
35927
  v[S] = g[S] / y;
@@ -35979,7 +35979,7 @@ class jy {
35979
35979
  return Math.round(e / t);
35980
35980
  }
35981
35981
  }
35982
- const Ky = {
35982
+ const Yy = {
35983
35983
  tempoCenter: 0.5,
35984
35984
  // 0.5 seconds (120 BPM) - center of human tempo perception
35985
35985
  tempoWidth: 1.4,
@@ -35993,14 +35993,14 @@ const Ky = {
35993
35993
  useTripleMeter: !1
35994
35994
  // Disabled by default - opt-in for triple meter music
35995
35995
  };
35996
- class Yy {
35996
+ class Zy {
35997
35997
  /**
35998
35998
  * Create a new Tempo Detector
35999
35999
  *
36000
36000
  * @param config - Configuration options (all optional, defaults provided)
36001
36001
  */
36002
36002
  constructor(e = {}) {
36003
- this.config = { ...Ky, ...e };
36003
+ this.config = { ...Yy, ...e };
36004
36004
  }
36005
36005
  /**
36006
36006
  * Estimate the tempo from an onset strength envelope
@@ -36243,7 +36243,7 @@ class Yy {
36243
36243
  return u.sort((d, h) => h.strength - d.strength), u.slice(0, i);
36244
36244
  }
36245
36245
  }
36246
- const Ti = Se.for("BeatTracker"), Zy = {
36246
+ const Ti = Se.for("BeatTracker"), Xy = {
36247
36247
  dpAlpha: 680,
36248
36248
  // Ellis optimal balance factor
36249
36249
  sensitivity: 1,
@@ -36253,14 +36253,14 @@ const Ti = Se.for("BeatTracker"), Zy = {
36253
36253
  maxPredecessorRatio: 2
36254
36254
  // 2τp - maximum predecessor interval
36255
36255
  };
36256
- class Xy {
36256
+ class Jy {
36257
36257
  /**
36258
36258
  * Create a new Beat Tracker
36259
36259
  *
36260
36260
  * @param config - Configuration options (all optional, defaults provided)
36261
36261
  */
36262
36262
  constructor(e = {}) {
36263
- this.config = { ...Zy, ...e };
36263
+ this.config = { ...Xy, ...e };
36264
36264
  }
36265
36265
  /**
36266
36266
  * Get the current configuration
@@ -36577,7 +36577,7 @@ class Ye {
36577
36577
  const a = e.duration;
36578
36578
  if (this.updateProgress("preprocessing", 5, "Preparing audio..."), this.state.cancelled) throw new Error("Generation cancelled");
36579
36579
  if (this.updateProgress("ose_calculation", 10, "Calculating onset strength envelope..."), this.state.cancelled) throw new Error("Generation cancelled");
36580
- const o = new jy({
36580
+ const o = new Ky({
36581
36581
  targetSampleRate: 8e3,
36582
36582
  fftWindowSize: 32,
36583
36583
  hopSizeMs: this.options.hopSizeMs,
@@ -36587,7 +36587,7 @@ class Ye {
36587
36587
  }).calculate(e);
36588
36588
  if (this.updateProgress("ose_calculation", 35, "Onset strength envelope calculated."), this.state.cancelled) throw new Error("Generation cancelled");
36589
36589
  if (this.updateProgress("tempo_estimation", 40, "Estimating tempo..."), this.state.cancelled) throw new Error("Generation cancelled");
36590
- const l = new Yy({
36590
+ const l = new Zy({
36591
36591
  tempoCenter: this.options.tempoCenter,
36592
36592
  tempoWidth: this.options.tempoWidth,
36593
36593
  minBpm: this.options.minBpm,
@@ -36599,7 +36599,7 @@ class Ye {
36599
36599
  );
36600
36600
  if (this.updateProgress("tempo_estimation", 55, `Tempo estimated: ${Math.round(l.primaryBpm)} BPM`), this.state.cancelled) throw new Error("Generation cancelled");
36601
36601
  if (this.updateProgress("beat_tracking", 60, "Tracking beats..."), this.state.cancelled) throw new Error("Generation cancelled");
36602
- const d = new Xy({
36602
+ const d = new Jy({
36603
36603
  dpAlpha: this.options.dpAlpha,
36604
36604
  sensitivity: this.options.sensitivity
36605
36605
  }).trackBeats(
@@ -36864,13 +36864,13 @@ class Ye {
36864
36864
  return Ye.fromJSON(i);
36865
36865
  }
36866
36866
  }
36867
- function Jy(s) {
36867
+ function Qy(s) {
36868
36868
  return "mergedBeats" in s && "detectedBeats" in s;
36869
36869
  }
36870
- function Qy(s) {
36870
+ function ev(s) {
36871
36871
  return "subdivisionConfig" in s && "subdivisionMetadata" in s;
36872
36872
  }
36873
- class ev {
36873
+ class tv {
36874
36874
  /**
36875
36875
  * Create a new BeatStream
36876
36876
  *
@@ -36918,7 +36918,7 @@ class ev {
36918
36918
  * selecting the appropriate beat array based on the map type and options.
36919
36919
  */
36920
36920
  createNormalizedBeatMap(e) {
36921
- if (Qy(e)) {
36921
+ if (ev(e)) {
36922
36922
  let t = 120;
36923
36923
  if (e.beats.length >= 2) {
36924
36924
  const n = e.beats[1].timestamp - e.beats[0].timestamp;
@@ -36952,7 +36952,7 @@ class ev {
36952
36952
  metadata: i,
36953
36953
  downbeatConfig: e.downbeatConfig
36954
36954
  };
36955
- } else return Jy(e) ? this.options.useInterpolatedBeats ? {
36955
+ } else return Qy(e) ? this.options.useInterpolatedBeats ? {
36956
36956
  audioId: e.audioId,
36957
36957
  duration: e.duration,
36958
36958
  beats: e.mergedBeats,
@@ -38909,7 +38909,7 @@ const Ut = class Ut {
38909
38909
  * ```
38910
38910
  */
38911
38911
  createBeatStream(e, t, i) {
38912
- return new ev(e, t, i);
38912
+ return new tv(e, t, i);
38913
38913
  }
38914
38914
  // ==================== Beat Interpolation ====================
38915
38915
  /**
@@ -39541,7 +39541,7 @@ Ut.LEVEL_PRESETS = {
39541
39541
  }
39542
39542
  };
39543
39543
  let dr = Ut;
39544
- const tv = [
39544
+ const iv = [
39545
39545
  "60s",
39546
39546
  "70s",
39547
39547
  "80s",
@@ -40030,7 +40030,7 @@ const tv = [
40030
40030
  "Stage & Screen---Score",
40031
40031
  "Stage & Screen---Soundtrack",
40032
40032
  "Stage & Screen---Theme"
40033
- ], iv = [
40033
+ ], nv = [
40034
40034
  "Blues",
40035
40035
  "Classical",
40036
40036
  "Country",
@@ -40041,7 +40041,7 @@ const tv = [
40041
40041
  "Pop",
40042
40042
  "Reggae",
40043
40043
  "Rock"
40044
- ], nv = [
40044
+ ], av = [
40045
40045
  "guitar",
40046
40046
  "classical",
40047
40047
  "slow",
@@ -40092,7 +40092,7 @@ const tv = [
40092
40092
  "metal",
40093
40093
  "female voice",
40094
40094
  "choral"
40095
- ], av = ["happy", "not happy"], sv = [
40095
+ ], sv = ["happy", "not happy"], rv = [
40096
40096
  "action",
40097
40097
  "adventure",
40098
40098
  "advertising",
@@ -40155,7 +40155,7 @@ const tv = [
40155
40155
  "uplifting",
40156
40156
  "video",
40157
40157
  "war"
40158
- ], rv = ["danceable", "non-danceable"], ov = ["voice", "instrumental"], cv = ["acoustic", "electronic"];
40158
+ ], ov = ["danceable", "non-danceable"], cv = ["voice", "instrumental"], lv = ["acoustic", "electronic"];
40159
40159
  function Ai(s) {
40160
40160
  return typeof s == "object" && s !== null && "embedding" in s && "classifier" in s;
40161
40161
  }
@@ -40167,21 +40167,21 @@ function wn(s, e) {
40167
40167
  const t = s.toLowerCase();
40168
40168
  return t.includes("effnet") || t.includes("discogs") ? "effnet" : t.includes("vggish") ? "vggish" : t.includes("tempocnn") || t.includes("tempo") && !t.includes("temple") ? "tempocnn" : "musicnn";
40169
40169
  }
40170
- function lv(s, e) {
40170
+ function uv(s, e) {
40171
40171
  if (e) return e;
40172
40172
  const t = s.toLowerCase();
40173
40173
  return t.includes("jamendo") ? "jamendo" : t.includes("discogs400") || t.includes("discogs") ? "discogs400" : t.includes("tzanetakis") ? "tzanetakis" : t.includes("mtt_musicnn") ? "mtt_musicnn" : "jamendo";
40174
40174
  }
40175
- function uv(s) {
40175
+ function dv(s) {
40176
40176
  switch (s) {
40177
40177
  case "jamendo":
40178
- return tv;
40178
+ return iv;
40179
40179
  case "discogs400":
40180
40180
  return hr;
40181
40181
  case "tzanetakis":
40182
- return iv;
40183
- case "mtt_musicnn":
40184
40182
  return nv;
40183
+ case "mtt_musicnn":
40184
+ return av;
40185
40185
  default:
40186
40186
  return hr;
40187
40187
  }
@@ -40189,7 +40189,7 @@ function uv(s) {
40189
40189
  function Ot(s) {
40190
40190
  return Ai(s) ? `${s.embedding} -> ${s.classifier}` : s.modelUrl;
40191
40191
  }
40192
- function dv(s) {
40192
+ function hv(s) {
40193
40193
  if (!s || s.length === 0)
40194
40194
  return [];
40195
40195
  const e = s[0].length;
@@ -40257,19 +40257,19 @@ const Sn = {
40257
40257
  modelUrl: "https://arweave.net/nX9KX1OVhEaT1dStNcsRiZKCQTWuHjAMl4MWprIFyZU/model.json",
40258
40258
  modelType: "musicnn"
40259
40259
  }
40260
- }, M0 = {
40260
+ }, A0 = {
40261
40261
  genre: Object.keys(sc),
40262
40262
  mood: Object.keys(rc),
40263
40263
  danceability: Object.keys(oc)
40264
40264
  };
40265
- function hv(s) {
40265
+ function mv(s) {
40266
40266
  const e = {};
40267
40267
  return s.genre && (e.genre = sc[s.genre]), s.mood && (e.mood = rc[s.mood]), s.danceability && (e.danceability = oc[s.danceability]), e;
40268
40268
  }
40269
- class A0 {
40269
+ class k0 {
40270
40270
  constructor(e = {}) {
40271
40271
  this.essentiaWASM = null, this.essentiaModel = null, this.extractor = null, this.initialized = !1, this.embeddingModelCache = /* @__PURE__ */ new Map(), this.classifierModelCache = /* @__PURE__ */ new Map(), this.resolvedUrlCache = /* @__PURE__ */ new Map(), this.extractors = /* @__PURE__ */ new Map();
40272
- const t = e.preset ? hv(e.preset) : {};
40272
+ const t = e.preset ? mv(e.preset) : {};
40273
40273
  this.options = {
40274
40274
  models: {
40275
40275
  // Start with engine defaults, layer on presets, then explicit models
@@ -40619,8 +40619,8 @@ class A0 {
40619
40619
  if (this.options.models?.genre) {
40620
40620
  const d = this.options.models.genre, h = Ai(d) ? d.classifier : d.modelUrl;
40621
40621
  let m;
40622
- Ai(d) && d.classifierType ? m = d.classifierType : mr(d) && d.genreType ? m = d.genreType : m = lv(h);
40623
- const f = uv(m);
40622
+ Ai(d) && d.classifierType ? m = d.classifierType : mr(d) && d.genreType ? m = d.genreType : m = uv(h);
40623
+ const f = dv(m);
40624
40624
  u.genres = await this.runModelPrediction(
40625
40625
  d,
40626
40626
  o,
@@ -40628,7 +40628,7 @@ class A0 {
40628
40628
  ), u.primary_genre = u.genres.length > 0 ? u.genres[0].name : "Unknown", l.push(Ot(d));
40629
40629
  }
40630
40630
  if (this.options.models?.mood) {
40631
- const d = this.options.models.mood, h = mr(d) ? av : sv;
40631
+ const d = this.options.models.mood, h = mr(d) ? sv : rv;
40632
40632
  u.moods = await this.runModelPrediction(
40633
40633
  d,
40634
40634
  o,
@@ -40639,7 +40639,7 @@ class A0 {
40639
40639
  const d = this.options.models.danceability, m = (await this.runModelPrediction(
40640
40640
  d,
40641
40641
  o,
40642
- rv
40642
+ ov
40643
40643
  )).find((f) => f.name === "danceable");
40644
40644
  u.vibe_metrics.danceability = m?.confidence ?? 0, l.push(Ot(d));
40645
40645
  }
@@ -40647,7 +40647,7 @@ class A0 {
40647
40647
  const d = this.options.models.voice, m = (await this.runModelPrediction(
40648
40648
  d,
40649
40649
  o,
40650
- ov
40650
+ cv
40651
40651
  )).find((f) => f.name === "instrumental");
40652
40652
  u.vibe_metrics.instrumental_probability = m?.confidence ?? 0, l.push(Ot(d));
40653
40653
  }
@@ -40655,7 +40655,7 @@ class A0 {
40655
40655
  const d = this.options.models.acoustic, m = (await this.runModelPrediction(
40656
40656
  d,
40657
40657
  o,
40658
- cv
40658
+ lv
40659
40659
  )).find((f) => f.name === "electronic");
40660
40660
  u.vibe_metrics.electronic_probability = m?.confidence ?? 0, l.push(Ot(d));
40661
40661
  }
@@ -40693,7 +40693,7 @@ class A0 {
40693
40693
  * @returns Promise resolving to 1D array of averaged class predictions
40694
40694
  */
40695
40695
  async runClassifierOnEmbeddings(e, t) {
40696
- const i = dv(t);
40696
+ const i = hv(t);
40697
40697
  if (i.length === 0)
40698
40698
  return console.warn("Empty embeddings provided to classifier"), [];
40699
40699
  const n = await this.loadModelWithRetry(e), a = Ee.tensor2d([i], [1, i.length]);
@@ -40926,7 +40926,7 @@ class A0 {
40926
40926
  })).sort((i, n) => n.confidence - i.confidence).filter((i) => i.confidence >= this.options.threshold).slice(0, this.options.topN);
40927
40927
  }
40928
40928
  }
40929
- class k0 {
40929
+ class I0 {
40930
40930
  /**
40931
40931
  * Initialize ColorExtractor with canvas for image processing
40932
40932
  * Canvas is only created in browser environments (safe for Node.js)
@@ -41135,7 +41135,7 @@ class k0 {
41135
41135
  };
41136
41136
  }
41137
41137
  }
41138
- const _n = Se.for("BeatSubdivider"), mv = {
41138
+ const _n = Se.for("BeatSubdivider"), fv = {
41139
41139
  tolerance: 0.02,
41140
41140
  // 20ms tolerance
41141
41141
  defaultIntensity: 0.5,
@@ -41151,7 +41151,7 @@ class Xt {
41151
41151
  */
41152
41152
  constructor(e) {
41153
41153
  this.options = {
41154
- ...mv,
41154
+ ...fv,
41155
41155
  ...e
41156
41156
  }, _n.debug("BeatSubdivider initialized", { options: this.options });
41157
41157
  }
@@ -41638,7 +41638,7 @@ class Xt {
41638
41638
  return Xt.fromJSON(i);
41639
41639
  }
41640
41640
  }
41641
- class I0 {
41641
+ class D0 {
41642
41642
  // Track direction for change detection
41643
41643
  /**
41644
41644
  * Create a new GrooveAnalyzer instance
@@ -41891,7 +41891,7 @@ class I0 {
41891
41891
  return Math.abs(e) < this.options.neutralDeadZone ? "neutral" : e < 0 ? "push" : "pull";
41892
41892
  }
41893
41893
  }
41894
- function D0(s, e = kr, t) {
41894
+ function E0(s, e = kr, t) {
41895
41895
  const i = Un(s);
41896
41896
  return new Xt(t).subdivide(i, e);
41897
41897
  }
@@ -41907,7 +41907,7 @@ function fa(s, e) {
41907
41907
  beats: e
41908
41908
  };
41909
41909
  }
41910
- function E0(s, e, t) {
41910
+ function x0(s, e, t) {
41911
41911
  const i = gt(s);
41912
41912
  if (e < 0 || e >= i.length)
41913
41913
  throw new Error(
@@ -41927,7 +41927,7 @@ function E0(s, e, t) {
41927
41927
  });
41928
41928
  return fa(s, n);
41929
41929
  }
41930
- function x0(s, e) {
41930
+ function R0(s, e) {
41931
41931
  const t = gt(s), i = t.length;
41932
41932
  for (const r of e)
41933
41933
  if (r.beatIndex < 0 || r.beatIndex >= i)
@@ -41952,7 +41952,7 @@ function x0(s, e) {
41952
41952
  });
41953
41953
  return fa(s, a);
41954
41954
  }
41955
- function R0(s) {
41955
+ function P0(s) {
41956
41956
  const e = gt(s), t = /* @__PURE__ */ new Map();
41957
41957
  for (let i = 0; i < e.length; i++) {
41958
41958
  const n = e[i];
@@ -41960,7 +41960,7 @@ function R0(s) {
41960
41960
  }
41961
41961
  return t;
41962
41962
  }
41963
- function P0(s) {
41963
+ function B0(s) {
41964
41964
  const t = gt(s).map((i) => {
41965
41965
  if (i.requiredKey === void 0)
41966
41966
  return i;
@@ -41969,20 +41969,20 @@ function P0(s) {
41969
41969
  });
41970
41970
  return fa(s, t);
41971
41971
  }
41972
- function B0(s) {
41972
+ function N0(s) {
41973
41973
  return gt(s).some((t) => t.requiredKey !== void 0);
41974
41974
  }
41975
- function N0(s) {
41975
+ function F0(s) {
41976
41976
  return gt(s).filter((t) => t.requiredKey !== void 0).length;
41977
41977
  }
41978
- function F0(s) {
41978
+ function $0(s) {
41979
41979
  const e = gt(s), t = /* @__PURE__ */ new Set();
41980
41980
  for (const i of e)
41981
41981
  i.requiredKey !== void 0 && t.add(i.requiredKey);
41982
41982
  return Array.from(t).sort();
41983
41983
  }
41984
41984
  const we = Se.for("SubdivisionPlaybackController");
41985
- class $0 {
41985
+ class O0 {
41986
41986
  /**
41987
41987
  * Create a new SubdivisionPlaybackController
41988
41988
  *
@@ -42582,7 +42582,7 @@ class $0 {
42582
42582
  this.stop(), this.subscribers.clear(), this.state.scheduledBeats.clear(), we.debug("SubdivisionPlaybackController disposed");
42583
42583
  }
42584
42584
  }
42585
- const fv = [
42585
+ const pv = [
42586
42586
  0,
42587
42587
  // Level 1
42588
42588
  300,
@@ -42623,7 +42623,7 @@ const fv = [
42623
42623
  // Level 19
42624
42624
  355e3
42625
42625
  // Level 20
42626
- ], pv = {
42626
+ ], gv = {
42627
42627
  stationary: 1,
42628
42628
  walking: 1.2,
42629
42629
  running: 1.5,
@@ -42646,11 +42646,11 @@ class cc {
42646
42646
  */
42647
42647
  constructor(e) {
42648
42648
  this.config = {
42649
- level_thresholds: e?.level_thresholds || fv,
42649
+ level_thresholds: e?.level_thresholds || pv,
42650
42650
  xp_per_second: e?.xp_per_second ?? 1,
42651
42651
  xp_per_track_completion: e?.xp_per_track_completion ?? 50,
42652
42652
  activity_bonuses: {
42653
- ...pv,
42653
+ ...gv,
42654
42654
  ...e?.activity_bonuses
42655
42655
  },
42656
42656
  track_mastery_threshold: e?.track_mastery_threshold ?? 10,
@@ -42853,7 +42853,7 @@ class cc {
42853
42853
  return { ...this.config };
42854
42854
  }
42855
42855
  }
42856
- class O0 {
42856
+ class z0 {
42857
42857
  /**
42858
42858
  * Create a new SessionTracker
42859
42859
  * @param xpCalculator - Optional custom XPCalculator instance
@@ -43451,7 +43451,7 @@ class Ve {
43451
43451
  e.equipment && xe.reapplyEquipmentEffects(e);
43452
43452
  }
43453
43453
  }
43454
- class gv {
43454
+ class yv {
43455
43455
  constructor() {
43456
43456
  this.name = "D&D 5e Standard";
43457
43457
  }
@@ -43468,7 +43468,7 @@ class gv {
43468
43468
  return !e?.forcedAbilities || e.forcedAbilities.length === 0;
43469
43469
  }
43470
43470
  }
43471
- class yv {
43471
+ class vv {
43472
43472
  constructor() {
43473
43473
  this.name = "D&D 5e Smart";
43474
43474
  }
@@ -43517,7 +43517,7 @@ class yv {
43517
43517
  return n;
43518
43518
  }
43519
43519
  }
43520
- class vv {
43520
+ class bv {
43521
43521
  constructor() {
43522
43522
  this.name = "Balanced";
43523
43523
  }
@@ -43539,7 +43539,7 @@ class vv {
43539
43539
  return !1;
43540
43540
  }
43541
43541
  }
43542
- class bv {
43542
+ class wv {
43543
43543
  constructor() {
43544
43544
  this.name = "Primary Only";
43545
43545
  }
@@ -43562,7 +43562,7 @@ class bv {
43562
43562
  return n;
43563
43563
  }
43564
43564
  }
43565
- class wv {
43565
+ class Sv {
43566
43566
  constructor() {
43567
43567
  this.name = "Random";
43568
43568
  }
@@ -43579,7 +43579,7 @@ class wv {
43579
43579
  return !1;
43580
43580
  }
43581
43581
  }
43582
- class Sv {
43582
+ class _v {
43583
43583
  constructor() {
43584
43584
  this.name = "Manual";
43585
43585
  }
@@ -43590,7 +43590,7 @@ class Sv {
43590
43590
  return !0;
43591
43591
  }
43592
43592
  }
43593
- class _v {
43593
+ class Tv {
43594
43594
  constructor(e, t) {
43595
43595
  this.fn = e, this.name = t || "Custom Function";
43596
43596
  }
@@ -43605,20 +43605,20 @@ function pr(s) {
43605
43605
  if (typeof s != "string" && typeof s != "function")
43606
43606
  return s;
43607
43607
  if (typeof s == "function")
43608
- return new _v(s);
43608
+ return new Tv(s);
43609
43609
  switch (s) {
43610
43610
  case "dnD5e":
43611
- return new gv();
43612
- case "dnD5e_smart":
43613
43611
  return new yv();
43614
- case "balanced":
43612
+ case "dnD5e_smart":
43615
43613
  return new vv();
43616
- case "primary_only":
43614
+ case "balanced":
43617
43615
  return new bv();
43618
- case "random":
43616
+ case "primary_only":
43619
43617
  return new wv();
43620
- case "manual":
43618
+ case "random":
43621
43619
  return new Sv();
43620
+ case "manual":
43621
+ return new _v();
43622
43622
  default:
43623
43623
  const e = s;
43624
43624
  throw new Error(`Unknown strategy type: ${e}`);
@@ -43628,7 +43628,7 @@ const gr = [4, 8, 12, 16, 19], yr = {
43628
43628
  strategy: "dnD5e",
43629
43629
  autoApply: !0
43630
43630
  };
43631
- class Tv {
43631
+ class Cv {
43632
43632
  constructor(e) {
43633
43633
  this.config = this.mergeWithDefaults(e), this.strategy = pr(this.config.strategy);
43634
43634
  }
@@ -44134,7 +44134,7 @@ const wa = class wa {
44134
44134
  };
44135
44135
  wa.customThresholds = /* @__PURE__ */ new Map();
44136
44136
  let Ce = wa;
44137
- class z0 {
44137
+ class L0 {
44138
44138
  constructor(e) {
44139
44139
  this.xpCalculator = new cc(), this.statManager = e, this.statManager && Ve.setStatManager(this.statManager);
44140
44140
  }
@@ -44174,7 +44174,7 @@ class z0 {
44174
44174
  };
44175
44175
  if (n.xp.current += t, !this.statManager) {
44176
44176
  const d = (n.gameMode || "standard") === "standard" ? "dnD5e" : "dnD5e_smart";
44177
- this.statManager = new Tv({ strategy: d }), Ve.setStatManager(this.statManager);
44177
+ this.statManager = new Cv({ strategy: d }), Ve.setStatManager(this.statManager);
44178
44178
  }
44179
44179
  let a = !1, r;
44180
44180
  const o = [], c = n.gameMode === "uncapped", l = Ve.calculateLevel(n.xp.current, c);
@@ -44485,7 +44485,7 @@ class z0 {
44485
44485
  return Ce.getPrestigeInfo(n, a, r);
44486
44486
  }
44487
44487
  }
44488
- class L0 {
44488
+ class W0 {
44489
44489
  /**
44490
44490
  * Create a new RhythmXPCalculator instance
44491
44491
  *
@@ -44735,7 +44735,7 @@ class L0 {
44735
44735
  });
44736
44736
  }
44737
44737
  }
44738
- class W0 {
44738
+ class H0 {
44739
44739
  /**
44740
44740
  * Enchant equipment with new properties (creates per-instance modification)
44741
44741
  *
@@ -45393,7 +45393,7 @@ const Vn = {
45393
45393
  tags: ["magic", "enhanced", "+2", "armor"]
45394
45394
  }
45395
45395
  };
45396
- class Cv {
45396
+ class Mv {
45397
45397
  /**
45398
45398
  * Open a box and generate its contents
45399
45399
  *
@@ -45657,7 +45657,7 @@ const bt = {
45657
45657
  very_rare: 3,
45658
45658
  legendary: 4
45659
45659
  };
45660
- class H0 {
45660
+ class q0 {
45661
45661
  /**
45662
45662
  * Spawn multiple items from an array of equipment names
45663
45663
  *
@@ -45980,7 +45980,7 @@ class H0 {
45980
45980
  const o = Y.getInstance().get("equipment").find((d) => d.name === t);
45981
45981
  if (!o || o.type !== "box")
45982
45982
  return null;
45983
- const c = e.equipment.items, l = Cv.openBox(o, i, c);
45983
+ const c = e.equipment.items, l = Mv.openBox(o, i, c);
45984
45984
  if (!l.success)
45985
45985
  return { character: e, result: l };
45986
45986
  if (l.consumedItems && l.consumedItems.length > 0)
@@ -46352,7 +46352,7 @@ class vr {
46352
46352
  return e >= 7 && e <= 18 && t >= 275 && t <= 290 || e >= 33 && e <= 43 && t >= 124 && t <= 132 || e >= 36 && e <= 47 && t >= 8 && t <= 19 || e >= 36 && e <= 44 && t >= 358 && t <= 360 || e >= 36 && e <= 44 && t >= 0 && t <= 10 || e >= 55 && e <= 71 && t >= 4 && t <= 32 || e >= 24 && e <= 31 && t >= 268 && t <= 272 || e >= 55 && e <= 62 && t >= 210 && t <= 220 || e >= 50 && e <= 62 && t >= 156 && t <= 163;
46353
46353
  }
46354
46354
  }
46355
- class Mv {
46355
+ class Av {
46356
46356
  constructor() {
46357
46357
  this.logger = Se.for("MotionDetector"), this.isListening = !1, this.lastMotion = null, this.motionCallback = null, this.lastProcessedTime = 0, this.minSampleIntervalMs = 83, this.deltaBuffer = [], this.bufferSize = 24, this.confirmedActivity = "unknown", this.candidateActivity = null, this.candidateStartTime = 0, this.confirmationMs = 1500, this.handleMotion = (e) => {
46358
46358
  if (!this.isListening || !this.motionCallback) return;
@@ -46483,7 +46483,7 @@ const lc = re({
46483
46483
  gust: L().optional()
46484
46484
  }), hc = re({
46485
46485
  all: L().min(0).max(100)
46486
- }), Av = re({
46486
+ }), kv = re({
46487
46487
  type: L().optional(),
46488
46488
  id: L().optional(),
46489
46489
  country: G().optional(),
@@ -46502,7 +46502,7 @@ const lc = re({
46502
46502
  }), pc = re({
46503
46503
  lon: L().min(-180).max(180),
46504
46504
  lat: L().min(-90).max(90)
46505
- }), kv = re({
46505
+ }), Iv = re({
46506
46506
  coord: pc.optional(),
46507
46507
  weather: Te(lc).min(1),
46508
46508
  base: G().optional(),
@@ -46513,12 +46513,12 @@ const lc = re({
46513
46513
  snow: fc.optional(),
46514
46514
  clouds: hc.optional(),
46515
46515
  dt: L().nonnegative(),
46516
- sys: Av,
46516
+ sys: kv,
46517
46517
  timezone: L().optional(),
46518
46518
  id: L().optional(),
46519
46519
  name: G().optional(),
46520
46520
  cod: L().optional()
46521
- }), Iv = re({
46521
+ }), Dv = re({
46522
46522
  dt: L().nonnegative(),
46523
46523
  main: uc,
46524
46524
  weather: Te(lc).min(1),
@@ -46533,11 +46533,11 @@ const lc = re({
46533
46533
  pod: G().optional()
46534
46534
  }).optional(),
46535
46535
  dt_txt: G().optional()
46536
- }), Dv = re({
46536
+ }), Ev = re({
46537
46537
  cod: sa([G(), L()]),
46538
46538
  message: L().optional(),
46539
46539
  cnt: L().nonnegative().optional(),
46540
- list: Te(Iv).min(1),
46540
+ list: Te(Dv).min(1),
46541
46541
  city: re({
46542
46542
  id: L(),
46543
46543
  name: G(),
@@ -46549,7 +46549,7 @@ const lc = re({
46549
46549
  sunset: L().optional()
46550
46550
  }).optional()
46551
46551
  }), br = "weather_api_cache";
46552
- class Ev {
46552
+ class xv {
46553
46553
  constructor(e, t, i) {
46554
46554
  if (this.baseUrl = "https://api.openweathermap.org/data/2.5/weather", this.forecastUrl = "https://api.openweathermap.org/data/2.5/forecast", this.cache = /* @__PURE__ */ new Map(), this.forecastCache = /* @__PURE__ */ new Map(), this.cacheTTL = 720 * 1e3, this.forecastCacheTTL = 3600 * 1e3, this.cacheStats = { hits: 0, misses: 0 }, this.logger = Se.for("WeatherAPIClient"), this.lastKnownLocation = null, this.weatherApiMetrics = {
46555
46555
  successCount: 0,
@@ -46951,7 +46951,7 @@ class Ev {
46951
46951
  const o = `${this.baseUrl}?lat=${e}&lon=${t}&appid=${this.apiKey}&units=metric`, c = await fetch(o);
46952
46952
  if (!c.ok)
46953
46953
  throw new Error(`Weather API error: ${c.statusText}`);
46954
- const l = await c.json(), u = kv.safeParse(l);
46954
+ const l = await c.json(), u = Iv.safeParse(l);
46955
46955
  if (!u.success)
46956
46956
  return this.logger.error("Weather API response validation failed", {
46957
46957
  errors: u.error.issues,
@@ -47070,7 +47070,7 @@ class Ev {
47070
47070
  const l = Math.ceil(n / 3), u = `${this.forecastUrl}?lat=${e}&lon=${t}&appid=${this.apiKey}&units=metric&cnt=${l}`, d = await fetch(u);
47071
47071
  if (!d.ok)
47072
47072
  throw new Error(`Weather Forecast API error: ${d.statusText}`);
47073
- const h = await d.json(), m = Dv.safeParse(h);
47073
+ const h = await d.json(), m = Ev.safeParse(h);
47074
47074
  if (!m.success)
47075
47075
  return this.logger.error("Weather Forecast API response validation failed", {
47076
47076
  errors: m.error.issues,
@@ -47276,7 +47276,7 @@ function ga(s) {
47276
47276
  function H(s, e, t) {
47277
47277
  return t ? `${e}${s}${F.reset}` : s;
47278
47278
  }
47279
- function xv(s, e) {
47279
+ function Rv(s, e) {
47280
47280
  switch (s) {
47281
47281
  case "healthy":
47282
47282
  return H("●", F.green, e);
@@ -47288,10 +47288,10 @@ function xv(s, e) {
47288
47288
  return H("○", F.dim, e);
47289
47289
  }
47290
47290
  }
47291
- function Rv(s, e) {
47291
+ function Pv(s, e) {
47292
47292
  return s ? H("✓ Granted", F.green, e) : H("✗ Denied", F.red, e);
47293
47293
  }
47294
- function Pv(s, e) {
47294
+ function Bv(s, e) {
47295
47295
  return s ? H("Available", F.green, e) : H("Unavailable", F.red, e);
47296
47296
  }
47297
47297
  function ya(s) {
@@ -47329,13 +47329,13 @@ function gc(s, e = {}) {
47329
47329
  const t = { ...pa, ...e }, i = ga(t), n = 60;
47330
47330
  console.log(va("ENVIRONMENTAL SENSORS", n, i)), t.showTimestamp && (console.log(`${H("Timestamp:", F.dim, i)} ${ya(s.timestamp)}`), console.log(`${H("Diagnostic Mode:", F.dim, i)} ${s.diagnosticMode ? H("ENABLED", F.yellow, i) : "Disabled"}`), console.log("")), console.log(H("┌─ SENSOR STATUS", F.cyan, i)), console.log(Pe(22) + (i ? F.reset : ""));
47331
47331
  for (const o of s.sensors) {
47332
- const c = xv(o.status.health, i), l = H(
47332
+ const c = Rv(o.status.health, i), l = H(
47333
47333
  o.status.health.toUpperCase().padEnd(8),
47334
47334
  o.status.health === "healthy" ? F.green : o.status.health === "failed" ? F.red : F.yellow,
47335
47335
  i
47336
47336
  );
47337
47337
  if (console.log(`
47338
- ${H(o.type.toUpperCase().padEnd(12), F.bright, i)}`), console.log(` Health: ${c} ${l}`), console.log(` Permission: ${Rv(o.permission, i)}`), console.log(` Availability:${Pv(o.availability, i)}`), o.status.consecutiveFailures > 0 && console.log(` Failures: ${H(o.status.consecutiveFailures.toString(), F.red, i)} consecutive`), o.status.lastError) {
47338
+ ${H(o.type.toUpperCase().padEnd(12), F.bright, i)}`), console.log(` Health: ${c} ${l}`), console.log(` Permission: ${Pv(o.permission, i)}`), console.log(` Availability:${Bv(o.availability, i)}`), o.status.consecutiveFailures > 0 && console.log(` Failures: ${H(o.status.consecutiveFailures.toString(), F.red, i)} consecutive`), o.status.lastError) {
47339
47339
  const u = o.status.lastError.length > 40 ? o.status.lastError.substring(0, 37) + "..." : o.status.lastError;
47340
47340
  console.log(` Last Error: ${H(u, F.red, i)}`);
47341
47341
  }
@@ -47418,7 +47418,7 @@ ${H("┌─ API PERFORMANCE", F.cyan, i)}`), console.log(Pe(20) + (i ? F.reset :
47418
47418
  ${Pe(n)}
47419
47419
  `);
47420
47420
  }
47421
- function Bv(s, e = {}) {
47421
+ function Nv(s, e = {}) {
47422
47422
  const t = { ...pa, ...e }, i = ga(t);
47423
47423
  if (console.log(va("SENSOR SYSTEM DASHBOARD", 70, i)), t.showTimestamp) {
47424
47424
  const a = s.environmental?.timestamp || s.gaming?.timestamp || Date.now();
@@ -47442,9 +47442,9 @@ function Bv(s, e = {}) {
47442
47442
  const vc = {
47443
47443
  displayEnvironmentalDiagnostics: gc,
47444
47444
  displayGamingDiagnostics: yc,
47445
- displaySystemDashboard: Bv
47445
+ displaySystemDashboard: Nv
47446
47446
  };
47447
- class q0 {
47447
+ class G0 {
47448
47448
  /**
47449
47449
  * Initialize environmental sensors with optional weather API key, retry config, or full config
47450
47450
  *
@@ -47492,7 +47492,7 @@ class q0 {
47492
47492
  const a = e;
47493
47493
  i = a.weather?.apiKey ?? "", n = a.geolocation, a.retry && (this.retryConfig = { ...this.retryConfig, ...a.retry }), a.xpModifier && (this.xpConfig = { ...this.xpConfig, ...a.xpModifier });
47494
47494
  }
47495
- this.geolocation = n ? new vr(n) : new vr(), this.motion = new Mv(), this.weather = new Ev(i), this.initializeSensorStatuses();
47495
+ this.geolocation = n ? new vr(n) : new vr(), this.motion = new Av(), this.weather = new xv(i), this.initializeSensorStatuses();
47496
47496
  }
47497
47497
  /**
47498
47498
  * Initialize sensor statuses to 'unknown' state
@@ -48013,7 +48013,7 @@ class q0 {
48013
48013
  return this.weather.getSolarInfo(e, t, i);
48014
48014
  }
48015
48015
  }
48016
- class Nv {
48016
+ class Fv {
48017
48017
  constructor(e = "") {
48018
48018
  this.baseUrl = "https://api.steampowered.com", this.logger = Se.for("SteamAPIClient"), this.currentGameApiMetrics = {
48019
48019
  successCount: 0,
@@ -48203,7 +48203,7 @@ class Nv {
48203
48203
  }
48204
48204
  }
48205
48205
  }
48206
- class G0 {
48206
+ class U0 {
48207
48207
  // 24 hours
48208
48208
  /**
48209
48209
  * Initialize GamingPlatformSensors with optional Steam configuration
@@ -48231,7 +48231,7 @@ class G0 {
48231
48231
  totalGamingMinutes: 0,
48232
48232
  gamesPlayedWhileListening: [],
48233
48233
  lastUpdated: Date.now()
48234
- }, this.contextCallback = null, this.gameMetadataCache = /* @__PURE__ */ new Map(), this.cacheExpiryMs = 864e5, "steam" in e && e.steam && (this.steamApiKey = e.steam.apiKey, this.steamUserId = e.steam.steamId, e.steam.pollInterval && (this.pollIntervalMs = e.steam.pollInterval)), "metadataCacheExpiry" in e && e.metadataCacheExpiry && (this.cacheExpiryMs = e.metadataCacheExpiry), "maxBackoffMs" in e && e.maxBackoffMs && (this.maxBackoffMs = e.maxBackoffMs), "xpModifier" in e && e.xpModifier && (this.xpConfig = { ...this.xpConfig, ...e.xpModifier }), this.steam = new Nv(this.steamApiKey);
48234
+ }, this.contextCallback = null, this.gameMetadataCache = /* @__PURE__ */ new Map(), this.cacheExpiryMs = 864e5, "steam" in e && e.steam && (this.steamApiKey = e.steam.apiKey, this.steamUserId = e.steam.steamId, e.steam.pollInterval && (this.pollIntervalMs = e.steam.pollInterval)), "metadataCacheExpiry" in e && e.metadataCacheExpiry && (this.cacheExpiryMs = e.metadataCacheExpiry), "maxBackoffMs" in e && e.maxBackoffMs && (this.maxBackoffMs = e.maxBackoffMs), "xpModifier" in e && e.xpModifier && (this.xpConfig = { ...this.xpConfig, ...e.xpModifier }), this.steam = new Fv(this.steamApiKey);
48235
48235
  }
48236
48236
  /**
48237
48237
  * Authenticate with Steam
@@ -48405,7 +48405,7 @@ class G0 {
48405
48405
  vc.displayGamingDiagnostics(this.getDiagnostics(), e);
48406
48406
  }
48407
48407
  }
48408
- const Fv = {
48408
+ const $v = {
48409
48409
  geolocation: {
48410
48410
  cacheTTL: 300 * 1e3,
48411
48411
  // 5 minutes
@@ -48457,7 +48457,7 @@ const Fv = {
48457
48457
  backoffMultiplier: 2
48458
48458
  }
48459
48459
  };
48460
- function $v() {
48460
+ function Ov() {
48461
48461
  const s = {};
48462
48462
  if (typeof process < "u" && process.env?.WEATHER_API_KEY && (s.weather = { ...s.weather, apiKey: process.env.WEATHER_API_KEY }), typeof process < "u" && process.env?.STEAM_API_KEY && (s.gaming = {
48463
48463
  ...s.gaming,
@@ -48471,9 +48471,9 @@ function $v() {
48471
48471
  }
48472
48472
  return s;
48473
48473
  }
48474
- function U0(s = {}) {
48475
- const e = $v();
48476
- return jn(Fv, jn(e, s));
48474
+ function V0(s = {}) {
48475
+ const e = Ov();
48476
+ return jn($v, jn(e, s));
48477
48477
  }
48478
48478
  function jn(s, e) {
48479
48479
  const t = { ...s };
@@ -48483,7 +48483,7 @@ function jn(s, e) {
48483
48483
  }
48484
48484
  return t;
48485
48485
  }
48486
- const Ov = [
48486
+ const zv = [
48487
48487
  0,
48488
48488
  300,
48489
48489
  900,
@@ -48506,7 +48506,7 @@ const Ov = [
48506
48506
  355e3
48507
48507
  ], zt = {
48508
48508
  xp: {
48509
- level_thresholds: Ov,
48509
+ level_thresholds: zv,
48510
48510
  xp_per_second: 1,
48511
48511
  xp_per_track_completion: 50,
48512
48512
  activity_bonuses: {
@@ -48542,7 +48542,7 @@ const Ov = [
48542
48542
  showNotifications: !0
48543
48543
  }
48544
48544
  };
48545
- function V0(s) {
48545
+ function j0(s) {
48546
48546
  return s ? {
48547
48547
  xp: {
48548
48548
  ...zt.xp,
@@ -51125,25 +51125,25 @@ class Le {
51125
51125
  };
51126
51126
  }
51127
51127
  }
51128
- const j0 = z.WEAPON_ENCHANTMENTS, K0 = z.ARMOR_ENCHANTMENTS, Y0 = z.RESISTANCE_ENCHANTMENTS, Z0 = z.CURSES, X0 = z.ALL_ENCHANTMENTS, J0 = (s) => Le.getEnchantment(s), Q0 = (s) => Le.getCurse(s), ew = () => Le.getAllEnchantments(), tw = () => Le.getAllCurses(), iw = (s) => Le.getEnchantmentsByType(s), nw = (s) => Le.createStrengthEnchantment(s), aw = (s) => Le.createDexterityEnchantment(s), sw = (s) => Le.createConstitutionEnchantment(s), rw = (s) => Le.createIntelligenceEnchantment(s), ow = (s) => Le.createWisdomEnchantment(s), cw = (s) => Le.createCharismaEnchantment(s);
51129
- function lw(s) {
51128
+ const K0 = z.WEAPON_ENCHANTMENTS, Y0 = z.ARMOR_ENCHANTMENTS, Z0 = z.RESISTANCE_ENCHANTMENTS, X0 = z.CURSES, J0 = z.ALL_ENCHANTMENTS, Q0 = (s) => Le.getEnchantment(s), ew = (s) => Le.getCurse(s), tw = () => Le.getAllEnchantments(), iw = () => Le.getAllCurses(), nw = (s) => Le.getEnchantmentsByType(s), aw = (s) => Le.createStrengthEnchantment(s), sw = (s) => Le.createDexterityEnchantment(s), rw = (s) => Le.createConstitutionEnchantment(s), ow = (s) => Le.createIntelligenceEnchantment(s), cw = (s) => Le.createWisdomEnchantment(s), lw = (s) => Le.createCharismaEnchantment(s);
51129
+ function uw(s) {
51130
51130
  return Jt.find((e) => e.name === s);
51131
51131
  }
51132
- function uw(s) {
51132
+ function dw(s) {
51133
51133
  return Jt.filter((e) => e.type === s);
51134
51134
  }
51135
- function dw(s) {
51135
+ function hw(s) {
51136
51136
  return Jt.filter((e) => e.rarity === s);
51137
51137
  }
51138
- function hw() {
51138
+ function mw() {
51139
51139
  return Jt.filter((s) => s.tags?.includes("cursed"));
51140
51140
  }
51141
- function mw(s) {
51141
+ function fw(s) {
51142
51142
  return Jt.filter(
51143
51143
  (e) => e.properties?.some((t) => t.type === s)
51144
51144
  );
51145
51145
  }
51146
- function fw(s, e) {
51146
+ function pw(s, e) {
51147
51147
  const t = Vn[e];
51148
51148
  return t ? {
51149
51149
  ...s,
@@ -51163,32 +51163,32 @@ function fw(s, e) {
51163
51163
  export {
51164
51164
  Ql as AICombatRunner,
51165
51165
  yu as ALL_CLASSES,
51166
- X0 as ALL_ENCHANTMENTS,
51167
- n0 as ALL_GRID_TYPES,
51166
+ J0 as ALL_ENCHANTMENTS,
51167
+ a0 as ALL_GRID_TYPES,
51168
51168
  bu as ALL_RACES,
51169
- K0 as ARMOR_ENCHANTMENTS,
51170
- M0 as AVAILABLE_PRESETS,
51169
+ Y0 as ARMOR_ENCHANTMENTS,
51170
+ A0 as AVAILABLE_PRESETS,
51171
51171
  pn as AbilityScoreCalculator,
51172
51172
  Gs as AbilityScoresSchema,
51173
- fg as AppearanceGenerator,
51174
- Ip as ArweaveGatewayManager,
51173
+ pg as AppearanceGenerator,
51174
+ Dp as ArweaveGatewayManager,
51175
51175
  Re as AttackResolver,
51176
51176
  dr as AudioAnalyzer,
51177
- Rb as AudioProfileSchema,
51177
+ Pb as AudioProfileSchema,
51178
51178
  zl as BASE_PLAYS_THRESHOLD,
51179
51179
  Ll as BASE_XP_THRESHOLD,
51180
- Wv as BEAT_ACCURACY_THRESHOLDS,
51180
+ Hv as BEAT_ACCURACY_THRESHOLDS,
51181
51181
  Ml as BEAT_DETECTION_ALGORITHM,
51182
51182
  Cl as BEAT_DETECTION_VERSION,
51183
- kb as BalanceValidator,
51184
- vv as BalancedStrategy,
51183
+ Ib as BalanceValidator,
51184
+ bv as BalancedStrategy,
51185
51185
  ha as BeatConverter,
51186
51186
  Ni as BeatInterpolator,
51187
51187
  Ye as BeatMapGenerator,
51188
- ev as BeatStream,
51188
+ tv as BeatStream,
51189
51189
  Xt as BeatSubdivider,
51190
- Xy as BeatTracker,
51191
- Cv as BoxOpener,
51190
+ Jy as BeatTracker,
51191
+ Mv as BoxOpener,
51192
51192
  vn as ButtonMapper,
51193
51193
  vu as CLASS_AUDIO_PREFERENCES,
51194
51194
  tt as CLASS_DATA,
@@ -51196,19 +51196,19 @@ export {
51196
51196
  tr as CLASS_STARTING_EQUIPMENT,
51197
51197
  tn as CONSECUTIVE_KEY_LIMITS,
51198
51198
  Dn as CR_TO_XP,
51199
- Z0 as CURSES,
51199
+ X0 as CURSES,
51200
51200
  la as CharacterGenerator,
51201
- Pb as CharacterSheetSchema,
51202
- z0 as CharacterUpdater,
51201
+ Bb as CharacterSheetSchema,
51202
+ L0 as CharacterUpdater,
51203
51203
  zn as ClassSuggester,
51204
- k0 as ColorExtractor,
51204
+ I0 as ColorExtractor,
51205
51205
  ql as CombatAI,
51206
51206
  Xl as CombatEngine,
51207
51207
  Jl as CombatMetricsTracker,
51208
51208
  $i as CombatSimulator,
51209
51209
  Fu as CombatantAccumulator,
51210
- Db as ComparativeAnalyzer,
51211
- Wg as CompositeStreamGenerator,
51210
+ Eb as ComparativeAnalyzer,
51211
+ Hg as CompositeStreamGenerator,
51212
51212
  oc as DANCEABILITY_PRESETS,
51213
51213
  Qo as DDR_PATTERN_LIBRARY,
51214
51214
  Sn as DEFAULT_ARWEAVE_MODELS,
@@ -51223,39 +51223,39 @@ export {
51223
51223
  Vt as DEFAULT_EQUIPMENT,
51224
51224
  Ao as DEFAULT_GATEWAYS,
51225
51225
  kl as DEFAULT_GROOVE_OPTIONS,
51226
- Dp as DEFAULT_IPFS_GATEWAY,
51226
+ Ep as DEFAULT_IPFS_GATEWAY,
51227
51227
  zt as DEFAULT_PROGRESSION_CONFIG,
51228
51228
  _u as DEFAULT_RACE_DATA_ARRAY,
51229
51229
  Js as DEFAULT_RACIAL_TRAITS,
51230
51230
  ua as DEFAULT_RHYTHMIC_BALANCE_CONFIG,
51231
51231
  nt as DEFAULT_RHYTHM_XP_CONFIG,
51232
- Fv as DEFAULT_SENSOR_CONFIG,
51232
+ $v as DEFAULT_SENSOR_CONFIG,
51233
51233
  Qs as DEFAULT_SKILLS,
51234
- Jb as DEFAULT_SKILL_CATEGORIES,
51234
+ Qb as DEFAULT_SKILL_CATEGORIES,
51235
51235
  kr as DEFAULT_SUBDIVISION_CONFIG,
51236
51236
  Tl as DEFAULT_SUBDIVISION_PLAYBACK_OPTIONS,
51237
51237
  jo as DEFAULT_TEMPO_AWARE_CONFIG,
51238
51238
  ml as DEFAULT_TIME_SIGNATURE,
51239
51239
  hr as DISCOGS400_GENRES,
51240
- Bg as DensityAnalyzer,
51240
+ Ng as DensityAnalyzer,
51241
51241
  ue as DiceRoller,
51242
51242
  Ss as DifficultyCalculator,
51243
51243
  Gn as DifficultyVariantGenerator,
51244
- yv as DnD5eSmartStrategy,
51245
- gv as DnD5eStandardStrategy,
51244
+ vv as DnD5eSmartStrategy,
51245
+ yv as DnD5eStandardStrategy,
51246
51246
  gl as EASY_ACCURACY_THRESHOLDS,
51247
51247
  Il as EASY_GROOVE_PENALTIES,
51248
- Xg as EASY_QUARTER_NOTE_BPM,
51248
+ Jg as EASY_QUARTER_NOTE_BPM,
51249
51249
  z as ENCHANTMENT_LIBRARY,
51250
51250
  Ya as ENEMY_COUNT_MULTIPLIER,
51251
51251
  Vr as EXPECTED_WIN_RATES,
51252
51252
  Le as EnchantmentLibrary,
51253
51253
  Yt as EnemyGenerator,
51254
- q0 as EnvironmentalSensors,
51254
+ G0 as EnvironmentalSensors,
51255
51255
  xe as EquipmentEffectApplier,
51256
51256
  Pi as EquipmentGenerator,
51257
- W0 as EquipmentModifier,
51258
- H0 as EquipmentSpawnHelper,
51257
+ H0 as EquipmentModifier,
51258
+ q0 as EquipmentSpawnHelper,
51259
51259
  En as EquipmentValidator,
51260
51260
  qi as EssentiaPitchDetector,
51261
51261
  Y as ExtensionManager,
@@ -51267,75 +51267,75 @@ export {
51267
51267
  El as GROOVE_PENALTY_PRESETS,
51268
51268
  _t as GROOVE_TIERS,
51269
51269
  ec as GUITAR_HERO_PATTERN_LIBRARY,
51270
- G0 as GamingPlatformSensors,
51271
- I0 as GrooveAnalyzer,
51270
+ U0 as GamingPlatformSensors,
51271
+ D0 as GrooveAnalyzer,
51272
51272
  Tr as HARD_ACCURACY_THRESHOLDS,
51273
51273
  Dl as HARD_GROOVE_PENALTIES,
51274
- Zg as HARD_RESTRICT_BPM,
51274
+ Xg as HARD_RESTRICT_BPM,
51275
51275
  qa as HOP_SIZE_PRESETS,
51276
- Dg as HighBpmGridRestrictionRule,
51276
+ Eg as HighBpmGridRestrictionRule,
51277
51277
  Vn as ITEM_CREATION_TEMPLATES,
51278
51278
  Gl as InitiativeRoller,
51279
51279
  Us as KNOWN_GATEWAY_HOSTS,
51280
51280
  ca as KNOWN_IPFS_GATEWAY_HOSTS,
51281
51281
  ma as LevelGenerator,
51282
- v0 as LevelSerializer,
51282
+ b0 as LevelSerializer,
51283
51283
  Ve as LevelUpProcessor,
51284
51284
  Sp as LogLevel,
51285
51285
  Se as Logger,
51286
51286
  Jt as MAGIC_ITEMS,
51287
51287
  wu as MASTERY_BONUS_XP,
51288
- _b as MASTERY_THRESHOLD,
51288
+ Tb as MASTERY_THRESHOLD,
51289
51289
  Ha as MAX_BEATS_PER_MEASURE,
51290
51290
  ni as MAX_PRESTIGE_LEVEL,
51291
51291
  Ga as MAX_SUBDIVISION_DENSITY,
51292
51292
  yl as MEDIUM_ACCURACY_THRESHOLDS,
51293
51293
  kn as MEDIUM_GROOVE_PENALTIES,
51294
- Yg as MEDIUM_RESTRICT_BPM,
51294
+ Zg as MEDIUM_RESTRICT_BPM,
51295
51295
  vl as MEL_BANDS_PRESETS,
51296
51296
  Wa as MIN_BEATS_PER_MEASURE,
51297
51297
  rc as MOOD_PRESETS,
51298
- Sv as ManualStrategy,
51298
+ _v as ManualStrategy,
51299
51299
  ee as MetadataExtractor,
51300
- Op as ModelCache,
51301
- Ag as MultiBandAnalyzer,
51302
- A0 as MusicClassifier,
51303
- Zp as NamingEngine,
51304
- jy as OnsetStrengthEnvelope,
51300
+ zp as ModelCache,
51301
+ kg as MultiBandAnalyzer,
51302
+ k0 as MusicClassifier,
51303
+ Xp as NamingEngine,
51304
+ Ky as OnsetStrengthEnvelope,
51305
51305
  Ol as PRESTIGE_ROMAN_NUMERALS,
51306
51306
  Va as PRESTIGE_SCALING_FACTOR,
51307
51307
  Lr as PROFICIENCY_BONUS,
51308
- Ib as ParameterSweep,
51309
- T0 as PartyAnalyzer,
51310
- Rg as PhraseAnalyzer,
51311
- l0 as PitchAnalyzer,
51312
- ly as PitchBeatLinker,
51308
+ Db as ParameterSweep,
51309
+ C0 as PartyAnalyzer,
51310
+ Pg as PhraseAnalyzer,
51311
+ u0 as PitchAnalyzer,
51312
+ uy as PitchBeatLinker,
51313
51313
  Zo as PitchDetector,
51314
- C0 as PlaylistParser,
51314
+ M0 as PlaylistParser,
51315
51315
  wp as PlaylistTrackSchema,
51316
51316
  Ce as PrestigeSystem,
51317
- bv as PrimaryOnlyStrategy,
51318
- Cb as RACE_DATA,
51317
+ wv as PrimaryOnlyStrategy,
51318
+ Mb as RACE_DATA,
51319
51319
  Br as RARITY_CONFIGS,
51320
- Y0 as RESISTANCE_ENCHANTMENTS,
51320
+ Z0 as RESISTANCE_ENCHANTMENTS,
51321
51321
  Yo as RHYTHM_PRESETS,
51322
- dg as RaceSelector,
51323
- wv as RandomStrategy,
51322
+ hg as RaceSelector,
51323
+ Sv as RandomStrategy,
51324
51324
  mt as RhythmGenerator,
51325
51325
  Vo as RhythmQuantizer,
51326
- L0 as RhythmXPCalculator,
51327
- Kg as RhythmicBalancer,
51328
- Sb as SKILL_ABILITY_MAP,
51326
+ W0 as RhythmXPCalculator,
51327
+ Yg as RhythmicBalancer,
51328
+ _b as SKILL_ABILITY_MAP,
51329
51329
  Or as SPELL_DATABASE,
51330
51330
  hs as SPELL_SLOTS_BY_CLASS,
51331
51331
  qe as SUBDIVISION_LIMITS,
51332
51332
  tu as SeededDiceRoller,
51333
51333
  Ue as SeededRNG,
51334
51334
  vc as SensorDashboard,
51335
- xb as ServerlessPlaylistSchema,
51336
- O0 as SessionTracker,
51335
+ Rb as ServerlessPlaylistSchema,
51336
+ z0 as SessionTracker,
51337
51337
  Nu as SimulationAggregator,
51338
- hg as SkillAssigner,
51338
+ mg as SkillAssigner,
51339
51339
  Ne as SkillQuery,
51340
51340
  Ge as SkillValidator,
51341
51341
  Qe as SpectrumScanner,
@@ -51343,156 +51343,156 @@ export {
51343
51343
  er as SpellManager,
51344
51344
  it as SpellQuery,
51345
51345
  rt as SpellValidator,
51346
- Tv as StatManager,
51347
- $g as StreamScorer,
51348
- $0 as SubdivisionPlaybackController,
51349
- Xv as TUNING_FACTORS,
51350
- Eg as TempoAwareQuantizer,
51351
- Yy as TempoDetector,
51352
- Ig as TransientDetector,
51346
+ Cv as StatManager,
51347
+ Og as StreamScorer,
51348
+ O0 as SubdivisionPlaybackController,
51349
+ Jv as TUNING_FACTORS,
51350
+ xg as TempoAwareQuantizer,
51351
+ Zy as TempoDetector,
51352
+ Dg as TransientDetector,
51353
51353
  Mn as VALID_SUBDIVISION_TYPES,
51354
- j0 as WEAPON_ENCHANTMENTS,
51354
+ K0 as WEAPON_ENCHANTMENTS,
51355
51355
  ze as WeightedSelector,
51356
51356
  cc as XPCalculator,
51357
51357
  Kl as XP_BUDGET_PER_LEVEL,
51358
51358
  Ii as XP_THRESHOLDS,
51359
- fw as applyTemplate,
51360
- Jv as applyTuning,
51361
- Jp as areAppearanceDefaultsInitialized,
51362
- og as areClassDefaultsInitialized,
51363
- ng as areEquipmentDefaultsInitialized,
51364
- cg as areFeatureDefaultsInitialized,
51365
- sg as areRaceDataDefaultsInitialized,
51366
- ag as areRaceDefaultsInitialized,
51367
- lg as areSkillDefaultsInitialized,
51368
- tg as areSpellDefaultsInitialized,
51359
+ pw as applyTemplate,
51360
+ Qv as applyTuning,
51361
+ Qp as areAppearanceDefaultsInitialized,
51362
+ cg as areClassDefaultsInitialized,
51363
+ ag as areEquipmentDefaultsInitialized,
51364
+ lg as areFeatureDefaultsInitialized,
51365
+ rg as areRaceDataDefaultsInitialized,
51366
+ sg as areRaceDefaultsInitialized,
51367
+ ug as areSkillDefaultsInitialized,
51368
+ ig as areSpellDefaultsInitialized,
51369
51369
  Ae as arweaveGatewayManager,
51370
51370
  mu as asClass,
51371
- E0 as assignKeyToBeat,
51372
- x0 as assignKeysToBeats,
51373
- dv as averageEmbeddings,
51374
- Qv as calculateAdjustedXP,
51371
+ x0 as assignKeyToBeat,
51372
+ R0 as assignKeysToBeats,
51373
+ hv as averageEmbeddings,
51374
+ eb as calculateAdjustedXP,
51375
51375
  Nl as calculateBeatInMeasure,
51376
- ey as calculateMaxAchievableDensity,
51377
- bg as calculateStdDev,
51378
- Uv as chartedBeatMapToBeatMap,
51379
- P0 as clearAllKeys,
51376
+ ty as calculateMaxAchievableDensity,
51377
+ wg as calculateStdDev,
51378
+ Vv as chartedBeatMapToBeatMap,
51379
+ B0 as clearAllKeys,
51380
51380
  je as constructGatewayUrl,
51381
51381
  qn as convertToAllowedGridType,
51382
- cw as createCharismaEnchantment,
51383
- sw as createConstitutionEnchantment,
51384
- aw as createDexterityEnchantment,
51385
- rw as createIntelligenceEnchantment,
51386
- Bb as createLogger,
51387
- yg as createMelFilterbank,
51382
+ lw as createCharismaEnchantment,
51383
+ rw as createConstitutionEnchantment,
51384
+ sw as createDexterityEnchantment,
51385
+ ow as createIntelligenceEnchantment,
51386
+ Nb as createLogger,
51387
+ vg as createMelFilterbank,
51388
51388
  eu as createSeededRoller,
51389
51389
  pr as createStatIncreaseStrategy,
51390
- nw as createStrengthEnchantment,
51391
- ow as createWisdomEnchantment,
51392
- Qg as deriveAllowedGridTypes,
51390
+ aw as createStrengthEnchantment,
51391
+ cw as createWisdomEnchantment,
51392
+ ey as deriveAllowedGridTypes,
51393
51393
  Tt as deriveSeed,
51394
- lv as detectGenreListType,
51394
+ uv as detectGenreListType,
51395
51395
  wn as detectModelArchitecture,
51396
51396
  gc as displayEnvironmentalDiagnostics,
51397
51397
  yc as displayGamingDiagnostics,
51398
- Bv as displaySystemDashboard,
51399
- e0 as ensureAllDefaultsInitialized,
51398
+ Nv as displaySystemDashboard,
51399
+ t0 as ensureAllDefaultsInitialized,
51400
51400
  Eo as ensureAppearanceDefaultsInitialized,
51401
51401
  Oo as ensureClassDefaultsInitialized,
51402
51402
  Po as ensureEquipmentDefaultsInitialized,
51403
51403
  Lo as ensureFeatureDefaultsInitialized,
51404
- rg as ensureRaceDataDefaultsInitialized,
51404
+ og as ensureRaceDataDefaultsInitialized,
51405
51405
  No as ensureRaceDefaultsInitialized,
51406
- ug as ensureSkillDefaultsInitialized,
51406
+ dg as ensureSkillDefaultsInitialized,
51407
51407
  On as ensureSpellDefaultsInitialized,
51408
- Xb as evaluateMixConditions,
51409
- Ep as extractIPFSPath,
51410
- R0 as extractKeyMap,
51411
- Vg as findActiveSegment,
51408
+ Jb as evaluateMixConditions,
51409
+ xp as extractIPFSPath,
51410
+ P0 as extractKeyMap,
51411
+ jg as findActiveSegment,
51412
51412
  Ot as formatModelForMetadata,
51413
51413
  Ho as gaussianSmooth,
51414
- Yv as generateSeed,
51414
+ Zv as generateSeed,
51415
51415
  Cn as getAccuracyThresholdsForPreset,
51416
- tw as getAllCurses,
51417
- ew as getAllEnchantments,
51418
- jb as getAllGatewayUrls,
51416
+ iw as getAllCurses,
51417
+ tw as getAllEnchantments,
51418
+ Kb as getAllGatewayUrls,
51419
51419
  lu as getAllRarities,
51420
- s0 as getAllowedGridTypes,
51421
- Ob as getArtists,
51422
- Nb as getAudioUrls,
51420
+ r0 as getAllowedGridTypes,
51421
+ zb as getArtists,
51422
+ Fb as getAudioUrls,
51423
51423
  Zl as getAveragePartyLevel,
51424
51424
  Pr as getCRFromXP,
51425
51425
  zr as getClassData,
51426
51426
  ms as getClassSpellList,
51427
- pg as getClassStartingEquipment,
51427
+ gg as getClassStartingEquipment,
51428
51428
  Rl as getConsecutiveKeyLimit,
51429
- i0 as getControllerModeBalanceDefaults,
51430
- t0 as getControllerModeScoringDefaults,
51431
- Q0 as getCurse,
51432
- hw as getCursedItems,
51433
- J0 as getEnchantment,
51434
- iw as getEnchantmentsByType,
51429
+ n0 as getControllerModeBalanceDefaults,
51430
+ i0 as getControllerModeScoringDefaults,
51431
+ ew as getCurse,
51432
+ mw as getCursedItems,
51433
+ Q0 as getEnchantment,
51434
+ nw as getEnchantmentsByType,
51435
51435
  ki as getEncounterMultiplier,
51436
- Ab as getFeatureQuery,
51437
- Gb as getFullTracks,
51436
+ kb as getFeatureQuery,
51437
+ Ub as getFullTracks,
51438
51438
  Ar as getGaussianSmoothMs,
51439
- uv as getGenreLabels,
51440
- zb as getGenres,
51439
+ dv as getGenreLabels,
51440
+ Lb as getGenres,
51441
51441
  xl as getGroovePenaltiesForPreset,
51442
51442
  en as getGrooveTier,
51443
51443
  Al as getGrooveWindowMs,
51444
- sb as getHigherRarity,
51444
+ rb as getHigherRarity,
51445
51445
  Cr as getHopSizeMs,
51446
- Fb as getImageUrls,
51447
- mw as getItemsWithProperty,
51448
- N0 as getKeyCount,
51449
- lw as getMagicItem,
51450
- dw as getMagicItemsByRarity,
51451
- uw as getMagicItemsByType,
51446
+ $b as getImageUrls,
51447
+ fw as getItemsWithProperty,
51448
+ F0 as getKeyCount,
51449
+ uw as getMagicItem,
51450
+ hw as getMagicItemsByRarity,
51451
+ dw as getMagicItemsByType,
51452
51452
  Mr as getMelBands,
51453
- qg as getMetricGroupSize,
51454
- Gv as getMinHotnessForTier,
51455
- g0 as getPatternById,
51456
- u0 as getPatternLibrary,
51457
- y0 as getPatternLibraryStats,
51458
- d0 as getPatternsByCategory,
51459
- h0 as getPatternsByDifficulty,
51460
- f0 as getPatternsByKeyCount,
51461
- m0 as getPatternsByTags,
51453
+ Gg as getMetricGroupSize,
51454
+ Uv as getMinHotnessForTier,
51455
+ y0 as getPatternById,
51456
+ d0 as getPatternLibrary,
51457
+ v0 as getPatternLibraryStats,
51458
+ h0 as getPatternsByCategory,
51459
+ m0 as getPatternsByDifficulty,
51460
+ p0 as getPatternsByKeyCount,
51461
+ f0 as getPatternsByTags,
51462
51462
  Zn as getRaceData,
51463
- Mb as getRaceDataAsync,
51464
- p0 as getRandomPattern,
51463
+ Ab as getRaceDataAsync,
51464
+ g0 as getRandomPattern,
51465
51465
  wt as getRarityConfig,
51466
- o0 as getRhythmPreset,
51467
- c0 as getRhythmPresetNames,
51468
- ab as getSignatureDie,
51469
- wb as getSkillQuery,
51470
- Tb as getSpellQuery,
51466
+ c0 as getRhythmPreset,
51467
+ l0 as getRhythmPresetNames,
51468
+ sb as getSignatureDie,
51469
+ Sb as getSkillQuery,
51470
+ Cb as getSpellQuery,
51471
51471
  Wr as getSpellSlotsForClass,
51472
51472
  Ir as getSubdivisionDensity,
51473
- Lb as getTags,
51474
- tb as getTemplateById,
51475
- nb as getTemplatesByArchetype,
51476
- ib as getTemplatesByCategory,
51473
+ Wb as getTags,
51474
+ ib as getTemplateById,
51475
+ ab as getTemplatesByArchetype,
51476
+ nb as getTemplatesByCategory,
51477
51477
  at as getTempoAwareAllowedGridTypes,
51478
- Wb as getTotalDuration,
51479
- Hb as getTrackCount,
51480
- zp as getTrackExtras,
51481
- Zb as getTrackMetadata,
51482
- $b as getTrackTitles,
51483
- qb as getTracks,
51484
- F0 as getUsedKeys,
51485
- Vb as getVRMTracks,
51486
- Ub as getVRMs,
51478
+ Hb as getTotalDuration,
51479
+ qb as getTrackCount,
51480
+ Lp as getTrackExtras,
51481
+ Xb as getTrackMetadata,
51482
+ Ob as getTrackTitles,
51483
+ Gb as getTracks,
51484
+ $0 as getUsedKeys,
51485
+ jb as getVRMTracks,
51486
+ Vb as getVRMs,
51487
51487
  Yn as getXPBudgetForParty,
51488
51488
  Yl as getXPBudgetPerLevel,
51489
51489
  Rr as getXPForCR,
51490
- B0 as hasRequiredKeys,
51490
+ N0 as hasRequiredKeys,
51491
51491
  ht as hashSeedToFloat,
51492
- Zv as hashSeedToInt,
51493
- vg as highPassFilter,
51492
+ Xv as hashSeedToInt,
51493
+ bg as highPassFilter,
51494
51494
  ir as hzToMel,
51495
- Qb as initializeAllDefaults,
51495
+ e0 as initializeAllDefaults,
51496
51496
  Do as initializeAppearanceDefaults,
51497
51497
  $o as initializeClassDefaults,
51498
51498
  Ro as initializeEquipmentDefaults,
@@ -51503,63 +51503,63 @@ export {
51503
51503
  xo as initializeSpellDefaults,
51504
51504
  Wt as isArweaveUrl,
51505
51505
  Fl as isFullBeatMapExportData,
51506
- a0 as isGridTypeAllowed,
51507
- Kb as isIPFS,
51506
+ s0 as isGridTypeAllowed,
51507
+ Yb as isIPFS,
51508
51508
  $l as isLevelPackExport,
51509
- Gg as isMetricStrongBeat,
51510
- Ug as isMetricWeakBeat,
51511
- jv as isPrestigeLevel,
51509
+ Ug as isMetricStrongBeat,
51510
+ Vg as isMetricWeakBeat,
51511
+ Kv as isPrestigeLevel,
51512
51512
  mr as isSingleStepModel,
51513
- jg as isStrongBeatForEmphasis,
51513
+ Kg as isStrongBeatForEmphasis,
51514
51514
  Ai as isTwoStepModel,
51515
- Kv as isValidAIPlayStyle,
51515
+ Yv as isValidAIPlayStyle,
51516
51516
  Za as isValidClass,
51517
- _0 as isValidEncounterDifficulty,
51518
- eb as isValidEncounterDifficultyUtil,
51519
- S0 as isValidEnemyArchetype,
51520
- b0 as isValidEnemyCategory,
51521
- w0 as isValidEnemyRarity,
51517
+ T0 as isValidEncounterDifficulty,
51518
+ tb as isValidEncounterDifficultyUtil,
51519
+ _0 as isValidEnemyArchetype,
51520
+ w0 as isValidEnemyCategory,
51521
+ S0 as isValidEnemyRarity,
51522
51522
  An as isValidSubdivisionType,
51523
- $v as loadConfigFromEnv,
51523
+ Ov as loadConfigFromEnv,
51524
51524
  Bl as mapGridToSubdivision,
51525
- gg as melToHz,
51525
+ yg as melToHz,
51526
51526
  Er as mergeButtonMappingConfig,
51527
- U0 as mergeConfig,
51528
- V0 as mergeProgressionConfig,
51527
+ V0 as mergeConfig,
51528
+ j0 as mergeProgressionConfig,
51529
51529
  Rn as mergeRhythmXPConfig,
51530
51530
  Ht as modelCache,
51531
- r0 as naturalDifficultyToLevel,
51531
+ o0 as naturalDifficultyToLevel,
51532
51532
  Nt as parseArweaveUrl,
51533
- wg as performBeatFFT,
51533
+ Sg as performBeatFFT,
51534
51534
  qo as performSTFT,
51535
- Lv as reapplyDownbeatConfig,
51535
+ Wv as reapplyDownbeatConfig,
51536
51536
  Hi as resampleAudio,
51537
- Yb as resolveIPFSLink,
51538
- Eb as shouldAccuracyBreakCombo,
51539
- D0 as subdivideBeatMap,
51537
+ Zb as resolveIPFSLink,
51538
+ xb as shouldAccuracyBreakCombo,
51539
+ E0 as subdivideBeatMap,
51540
51540
  Wl as toPrestigeLevel,
51541
51541
  Un as unifyBeatMap,
51542
51542
  Pl as validateButtonMappingConfig,
51543
- rb as validateClassFeature,
51544
- cb as validateClassFeatures,
51543
+ ob as validateClassFeature,
51544
+ lb as validateClassFeatures,
51545
51545
  Sr as validateDownbeatConfig,
51546
51546
  _r as validateDownbeatConfigAgainstBeats,
51547
- ob as validateRacialTrait,
51548
- lb as validateRacialTraits,
51549
- ub as validateSkill,
51550
- fb as validateSkillListDefinition,
51551
- pb as validateSkillPrerequisites,
51552
- mb as validateSkillProficiencies,
51553
- hb as validateSkillProficiency,
51554
- db as validateSkills,
51555
- gb as validateSpell,
51556
- bb as validateSpellPrerequisites,
51557
- vb as validateSpellPrerequisitesSchema,
51558
- yb as validateSpells,
51547
+ cb as validateRacialTrait,
51548
+ ub as validateRacialTraits,
51549
+ db as validateSkill,
51550
+ pb as validateSkillListDefinition,
51551
+ gb as validateSkillPrerequisites,
51552
+ fb as validateSkillProficiencies,
51553
+ mb as validateSkillProficiency,
51554
+ hb as validateSkills,
51555
+ yb as validateSpell,
51556
+ wb as validateSpellPrerequisites,
51557
+ bb as validateSpellPrerequisitesSchema,
51558
+ vb as validateSpells,
51559
51559
  Dr as validateSubdivisionConfig,
51560
51560
  _l as validateSubdivisionConfigAgainstBeats,
51561
- qv as validateSubdivisionDensity,
51562
- iy as validateSubdivisionLimits,
51563
- Hv as validateThresholds,
51564
- Vv as validateTrackMatch
51561
+ Gv as validateSubdivisionDensity,
51562
+ ny as validateSubdivisionLimits,
51563
+ qv as validateThresholds,
51564
+ jv as validateTrackMatch
51565
51565
  };