@tspro/web-music-score 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +4 -4
  3. package/dist/audio/index.d.ts +1 -1
  4. package/dist/audio/index.js +2 -2
  5. package/dist/audio/index.mjs +4 -4
  6. package/dist/audio-cg/index.js +1 -1
  7. package/dist/audio-cg/index.mjs +3 -3
  8. package/dist/audio-synth/index.js +1 -1
  9. package/dist/audio-synth/index.mjs +3 -3
  10. package/dist/{chunk-ROPTZBKD.mjs → chunk-6S5BDSCM.mjs} +2 -2
  11. package/dist/{chunk-2EQHSQWO.mjs → chunk-LC5JMIVF.mjs} +2 -2
  12. package/dist/{chunk-QVYFIK3L.mjs → chunk-XUGM7SCC.mjs} +3 -3
  13. package/dist/core/index.js +2 -2
  14. package/dist/core/index.mjs +3 -3
  15. package/dist/{guitar-CaZJDA05.d.ts → guitar-BsSayRsH.d.ts} +1 -1
  16. package/dist/iife/audio-cg.global.js +9 -2
  17. package/dist/iife/index.global.js +11 -11
  18. package/dist/{music-objects-DTDFSro0.d.mts → music-objects-CB05XryE.d.mts} +3 -9
  19. package/dist/{music-objects-CMdYZeC6.d.ts → music-objects-CwPOlqFi.d.ts} +5 -11
  20. package/dist/{note-eA2xPPiG.d.ts → note-CgCIBwvR.d.ts} +1 -1
  21. package/dist/pieces/index.d.mts +1 -1
  22. package/dist/pieces/index.d.ts +3 -3
  23. package/dist/pieces/index.js +1 -1
  24. package/dist/pieces/index.mjs +2 -2
  25. package/dist/react-ui/index.d.mts +1 -1
  26. package/dist/react-ui/index.d.ts +5 -5
  27. package/dist/react-ui/index.js +1 -1
  28. package/dist/react-ui/index.mjs +2 -2
  29. package/dist/{scale-DGx3tJH4.d.ts → scale-CBW4eTz7.d.ts} +2 -2
  30. package/dist/score/index.d.mts +2 -2
  31. package/dist/score/index.d.ts +5 -5
  32. package/dist/score/index.js +153 -88
  33. package/dist/score/index.mjs +155 -90
  34. package/dist/{tempo-GrstpD9G.d.ts → tempo-DMt3iwz9.d.ts} +1 -1
  35. package/dist/theory/index.d.ts +6 -6
  36. package/dist/theory/index.js +1 -1
  37. package/dist/theory/index.mjs +3 -3
  38. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
- /* WebMusicScore v5.1.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
1
+ /* WebMusicScore v5.2.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
2
2
  import {
3
3
  NoteLengthProps,
4
4
  RhythmProps,
5
5
  validateNoteLength
6
- } from "../chunk-QVYFIK3L.mjs";
6
+ } from "../chunk-XUGM7SCC.mjs";
7
7
  import {
8
8
  __publicField
9
- } from "../chunk-2EQHSQWO.mjs";
9
+ } from "../chunk-LC5JMIVF.mjs";
10
10
 
11
11
  // src/score/pub/div-rect.ts
12
12
  import { Utils } from "@tspro/ts-utils-lib";
@@ -2790,7 +2790,7 @@ var ObjRhythmColumn = class extends MusicObject {
2790
2790
  this.measure = measure;
2791
2791
  this.positionTicks = positionTicks;
2792
2792
  __publicField(this, "voiceSymbol", []);
2793
- __publicField(this, "lyricsContainers", []);
2793
+ __publicField(this, "lyricsContainerCache", /* @__PURE__ */ new Map());
2794
2794
  __publicField(this, "minDiatonicId");
2795
2795
  __publicField(this, "maxDiatonicId");
2796
2796
  __publicField(this, "staffMinDiatonicId", /* @__PURE__ */ new Map());
@@ -2916,18 +2916,20 @@ var ObjRhythmColumn = class extends MusicObject {
2916
2916
  getVoiceSymbol(voiceId) {
2917
2917
  return this.voiceSymbol[voiceId];
2918
2918
  }
2919
- getLyricsContainerDatas() {
2920
- return this.lyricsContainers;
2921
- }
2922
2919
  getLyricsContainer(verse, line, vpos, lyricsLength) {
2923
- let data = this.lyricsContainers.find((data2) => data2.verse === verse && data2.line === line && data2.vpos === vpos);
2924
- if (data === void 0 && lyricsLength !== void 0) {
2925
- data = { lyricsContainer: new LyricsContainer(this, validateNoteLength2(lyricsLength)), verse, line, vpos };
2926
- this.lyricsContainers.push(data);
2927
- this.requestLayout();
2928
- this.requestRectUpdate();
2920
+ let vposMap = this.lyricsContainerCache.get(line);
2921
+ if (vposMap === void 0) {
2922
+ this.lyricsContainerCache.set(line, vposMap = /* @__PURE__ */ new Map());
2923
+ }
2924
+ let verseMap = vposMap.get(vpos);
2925
+ if (verseMap === void 0) {
2926
+ vposMap.set(vpos, verseMap = /* @__PURE__ */ new Map());
2929
2927
  }
2930
- return data == null ? void 0 : data.lyricsContainer;
2928
+ let lyricsContainer = verseMap.get(verse);
2929
+ if (lyricsContainer === void 0 && lyricsLength !== void 0) {
2930
+ verseMap.set(verse, lyricsContainer = new LyricsContainer(this, validateNoteLength2(lyricsLength)));
2931
+ }
2932
+ return lyricsContainer;
2931
2933
  }
2932
2934
  getMinWidth() {
2933
2935
  let maxNoteSize = Math.max(...this.voiceSymbol.map((s) => s.rhythmProps.noteSize));
@@ -3700,6 +3702,10 @@ var Player = class _Player {
3700
3702
  return;
3701
3703
  }
3702
3704
  const col = this.playerColumnSequence[this.playPos];
3705
+ if (!col) {
3706
+ this.stop();
3707
+ return;
3708
+ }
3703
3709
  const getDuration = (ticks, tempo2) => {
3704
3710
  let seconds = calcTicksDuration(ticks, tempo2);
3705
3711
  return Math.max(0, seconds);
@@ -3784,6 +3790,9 @@ var Player = class _Player {
3784
3790
  return void 0;
3785
3791
  }
3786
3792
  let col = this.playerColumnSequence[this.playPos];
3793
+ if (!col) {
3794
+ return void 0;
3795
+ }
3787
3796
  let measure = col.measure;
3788
3797
  let x = col.getRect().centerX;
3789
3798
  let top = measure.row.getRect().top;
@@ -4162,6 +4171,12 @@ var ObjStaffBeamGroup = class extends MusicObject {
4162
4171
  }
4163
4172
  }
4164
4173
  };
4174
+ var InvalidBeamGroup = class {
4175
+ constructor(beamGroup, message) {
4176
+ this.beamGroup = beamGroup;
4177
+ this.message = message;
4178
+ }
4179
+ };
4165
4180
  var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4166
4181
  constructor(symbols, tupletRatio) {
4167
4182
  super(symbols[0].measure);
@@ -4202,10 +4217,27 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4202
4217
  let first = i === 0;
4203
4218
  let last = i === this.symbols.length - 1;
4204
4219
  if (first && sym.getRightBeamCount() === 0 || last && sym.getLeftBeamCount() === 0 || !first && !last && (sym.getLeftBeamCount() === 0 || sym.getRightBeamCount() === 0)) {
4205
- this.detach();
4220
+ throw new InvalidBeamGroup(this, "Beam has zero left or right beam count!");
4206
4221
  }
4207
4222
  });
4208
4223
  }
4224
+ if (symbols.some((symbol) => symbol.voiceId !== symbols[0].voiceId)) {
4225
+ if (this.type === 0 /* RegularBeam */) {
4226
+ throw new InvalidBeamGroup(this, "Beam symbols have different voiceId.");
4227
+ } else {
4228
+ throw new MusicError10(MusicErrorType10.Score, `Tuplet symbols have different voiceId.`);
4229
+ }
4230
+ }
4231
+ symbols[0].row.getStaves().forEach((staff) => {
4232
+ if (staff.getActualStaff(symbols[0].ownDiatonicId) && staff.containsVoiceId(symbols[0].voiceId)) {
4233
+ symbols.forEach((sym) => {
4234
+ let actualStaff = staff.getActualStaff(sym.ownDiatonicId);
4235
+ if (!actualStaff || !actualStaff.containsVoiceId(sym.voiceId)) {
4236
+ throw new InvalidBeamGroup(this, "Some of beam or tuplet symbols are not visible!");
4237
+ }
4238
+ });
4239
+ }
4240
+ });
4209
4241
  }
4210
4242
  get showTupletRatio() {
4211
4243
  var _a;
@@ -4213,26 +4245,54 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4213
4245
  }
4214
4246
  static createBeam(noteGroups) {
4215
4247
  if (noteGroups.length > 1 && noteGroups.every((ng) => !ng.hasTuplet())) {
4216
- new _ObjBeamGroup(noteGroups, void 0);
4248
+ try {
4249
+ new _ObjBeamGroup(noteGroups, void 0);
4250
+ return true;
4251
+ } catch (err) {
4252
+ if (err instanceof InvalidBeamGroup) {
4253
+ err.beamGroup.detach();
4254
+ } else {
4255
+ throw err;
4256
+ }
4257
+ }
4217
4258
  }
4259
+ return false;
4218
4260
  }
4219
4261
  static createOldStyleTriplet(symbols) {
4220
- let s2 = symbols.slice(0, 2);
4221
- let n2 = s2.map((s) => s.rhythmProps.noteSize);
4222
- if (s2.length === 2 && s2.every((s) => s.oldStyleTriplet && s.getBeamGroup() === void 0) && (n2[0] * 2 === n2[1] || n2[1] * 2 === n2[0])) {
4223
- new _ObjBeamGroup(s2, Tuplet3.Triplet);
4224
- return 2;
4225
- }
4226
- let s3 = symbols.slice(0, 3);
4227
- let n3 = s3.map((s) => s.rhythmProps.noteSize);
4228
- if (s3.length === 3 && s3.every((s) => s.oldStyleTriplet && s.getBeamGroup() === void 0) && n3.every((n) => n === n3[0])) {
4229
- new _ObjBeamGroup(s3, Tuplet3.Triplet);
4230
- return 3;
4262
+ try {
4263
+ let s2 = symbols.slice(0, 2);
4264
+ let n2 = s2.map((s) => s.rhythmProps.noteSize);
4265
+ if (s2.length === 2 && s2.every((s) => s.oldStyleTriplet && s.getBeamGroup() === void 0) && (n2[0] * 2 === n2[1] || n2[1] * 2 === n2[0])) {
4266
+ new _ObjBeamGroup(s2, Tuplet3.Triplet);
4267
+ return 2;
4268
+ }
4269
+ let s3 = symbols.slice(0, 3);
4270
+ let n3 = s3.map((s) => s.rhythmProps.noteSize);
4271
+ if (s3.length === 3 && s3.every((s) => s.oldStyleTriplet && s.getBeamGroup() === void 0) && n3.every((n) => n === n3[0])) {
4272
+ new _ObjBeamGroup(s3, Tuplet3.Triplet);
4273
+ return 3;
4274
+ }
4275
+ } catch (err) {
4276
+ if (err instanceof InvalidBeamGroup) {
4277
+ console.error(err.message);
4278
+ err.beamGroup.detach();
4279
+ } else {
4280
+ throw err;
4281
+ }
4231
4282
  }
4232
4283
  return 0;
4233
4284
  }
4234
4285
  static createTuplet(symbols, tupletRatio) {
4235
- new _ObjBeamGroup(symbols, tupletRatio);
4286
+ try {
4287
+ new _ObjBeamGroup(symbols, tupletRatio);
4288
+ } catch (err) {
4289
+ if (err instanceof InvalidBeamGroup) {
4290
+ console.error(err.message);
4291
+ err.beamGroup.detach();
4292
+ } else {
4293
+ throw err;
4294
+ }
4295
+ }
4236
4296
  }
4237
4297
  getMusicInterface() {
4238
4298
  return this.mi;
@@ -4277,6 +4337,9 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4277
4337
  get stemDir() {
4278
4338
  return this.symbols[0].ownStemDir;
4279
4339
  }
4340
+ get color() {
4341
+ return this.symbols[0].color;
4342
+ }
4280
4343
  layout(renderer) {
4281
4344
  this.requestRectUpdate();
4282
4345
  this.staffObjects.length = 0;
@@ -4284,12 +4347,8 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4284
4347
  if (symbols.length === 0) {
4285
4348
  return;
4286
4349
  }
4287
- let voiceId = symbols[0].voiceId;
4288
- if (symbols.some((symbol) => symbol.voiceId !== voiceId)) {
4289
- return;
4290
- }
4291
4350
  let { unitSize } = renderer;
4292
- let { stemDir } = this;
4351
+ let { stemDir, type } = this;
4293
4352
  let symbolsBeamCoords = symbols.map((s) => s.getBeamCoords());
4294
4353
  symbolsBeamCoords[0].map((s) => s == null ? void 0 : s.staff).forEach((mainStaff, index) => {
4295
4354
  var _a, _b;
@@ -4325,7 +4384,7 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4325
4384
  }
4326
4385
  let leftStemHeight = (_a = symbolStemHeight[0]) != null ? _a : 0;
4327
4386
  let rightStemHeight = (_b = symbolStemHeight[symbolStemHeight.length - 1]) != null ? _b : 0;
4328
- if (this.type !== 2 /* TupletGroup */) {
4387
+ if (type !== 2 /* TupletGroup */) {
4329
4388
  let leftDy = leftStemHeight < rightStemHeight ? Math.sqrt(rightStemHeight - leftStemHeight) : 0;
4330
4389
  let rightDy = rightStemHeight < leftStemHeight ? Math.sqrt(leftStemHeight - rightStemHeight) : 0;
4331
4390
  if (stemDir === "up" /* Up */) {
@@ -4363,21 +4422,21 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4363
4422
  rightY += raiseBeamY;
4364
4423
  symbolY = symbolY.map((y) => y === void 0 ? void 0 : y + raiseBeamY);
4365
4424
  let obj = new ObjStaffBeamGroup(mainStaff, this);
4366
- if (this.type === 2 /* TupletGroup */) {
4425
+ if (type === 2 /* TupletGroup */) {
4367
4426
  let ef = unitSize / (rightX - leftX);
4368
4427
  let l = Utils8.Math.interpolateCoord(leftX, leftY + groupLineDy, rightX, rightY + groupLineDy, -ef);
4369
4428
  let r = Utils8.Math.interpolateCoord(leftX, leftY + groupLineDy, rightX, rightY + groupLineDy, 1 + ef);
4370
4429
  obj.points.push(new BeamPoint(leftStaff, this, leftSymbol, l.x, l.y));
4371
4430
  obj.points.push(new BeamPoint(rightStaff, this, rightSymbol, r.x, r.y));
4372
4431
  obj.tupletNumberOffsetY = 0;
4373
- } else if (this.type === 0 /* RegularBeam */ || this.type === 1 /* TupletBeam */) {
4432
+ } else if (type === 0 /* RegularBeam */ || type === 1 /* TupletBeam */) {
4374
4433
  raiseBeamY *= 0.5;
4375
4434
  let { beamThickness } = renderer;
4376
4435
  const beamHeight = (i) => {
4377
4436
  let sym = symbols[i];
4378
4437
  if (sym instanceof ObjNoteGroup) {
4379
4438
  let beamCount = sym instanceof ObjNoteGroup ? Math.max(sym.getLeftBeamCount(), sym.getRightBeamCount()) : 0;
4380
- return DocumentSettings.BeamSeparation * unitSize * (this.stemDir === "up" /* Up */ ? beamCount - 1 : 0);
4439
+ return DocumentSettings.BeamSeparation * unitSize * (stemDir === "up" /* Up */ ? beamCount - 1 : 0);
4381
4440
  } else {
4382
4441
  return 0;
4383
4442
  }
@@ -4388,8 +4447,16 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4388
4447
  let symY = symbolY[i];
4389
4448
  if (symStaff && symX !== void 0 && symY !== void 0) {
4390
4449
  let pt = new BeamPoint(symStaff, this, sym, symX, symY);
4391
- pt.topBeamsHeight = beamThickness / 2 + (stemDir === "down" /* Down */ ? beamHeight(i) : 0);
4392
- pt.bottomBeamsHeight = beamThickness / 2 + (stemDir === "up" /* Up */ ? beamHeight(i) : 0);
4450
+ switch (stemDir) {
4451
+ case "up" /* Up */:
4452
+ pt.topBeamsHeight = beamThickness / 2;
4453
+ pt.bottomBeamsHeight = beamThickness / 2 + beamHeight(i);
4454
+ break;
4455
+ case "down" /* Down */:
4456
+ pt.topBeamsHeight = beamThickness / 2 + beamHeight(i);
4457
+ pt.bottomBeamsHeight = beamThickness / 2;
4458
+ break;
4459
+ }
4393
4460
  obj.points.push(pt);
4394
4461
  }
4395
4462
  });
@@ -4442,53 +4509,52 @@ var ObjBeamGroup = class _ObjBeamGroup extends MusicObject {
4442
4509
  }
4443
4510
  draw(renderer) {
4444
4511
  let { unitSize, beamThickness, lineWidth } = renderer;
4445
- let color = "black";
4446
- this.staffObjects.forEach((obj) => {
4447
- if (this.type === 2 /* TupletGroup */) {
4448
- let l = obj.points[0];
4449
- let r = obj.points[obj.points.length - 1];
4450
- if (l && r) {
4451
- let tf = obj.tupletNumber ? obj.tupletNumber.getRect().width / (r.x - l.x) * 1.2 : 0;
4452
- let lc = Utils8.Math.interpolateCoord(l.x, l.y, r.x, r.y, 0.5 - tf / 2);
4453
- let rc = Utils8.Math.interpolateCoord(l.x, l.y, r.x, r.y, 0.5 + tf / 2);
4454
- let tipH = this.stemDir === "up" /* Up */ ? unitSize : -unitSize;
4455
- renderer.drawLine(l.x, l.y, lc.x, lc.y, color, lineWidth);
4456
- renderer.drawLine(rc.x, rc.y, r.x, r.y, color, lineWidth);
4457
- renderer.drawLine(l.x, l.y, l.x, l.y + tipH, color, lineWidth);
4458
- renderer.drawLine(r.x, r.y, r.x, r.y + tipH, color, lineWidth);
4512
+ let { stemDir, color, type } = this;
4513
+ if (type === 2 /* TupletGroup */) {
4514
+ let tipHeight = (stemDir === "up" /* Up */ ? 1 : -1) * unitSize;
4515
+ this.staffObjects.forEach((obj) => {
4516
+ let { x: lx, y: ly } = obj.points[0];
4517
+ let { x: rx, y: ry } = obj.points[obj.points.length - 1];
4518
+ if (obj.tupletNumber) {
4519
+ let tf = obj.tupletNumber.getRect().width / (rx - lx) * 1.2;
4520
+ let lc = Utils8.Math.interpolateCoord(lx, ly, rx, ry, 0.5 - tf / 2);
4521
+ let rc = Utils8.Math.interpolateCoord(lx, ly, rx, ry, 0.5 + tf / 2);
4522
+ renderer.drawLine(lx, ly, lc.x, lc.y, color, lineWidth);
4523
+ renderer.drawLine(rc.x, rc.y, rx, ry, color, lineWidth);
4524
+ } else {
4525
+ renderer.drawLine(lx, ly, rx, ry, color, lineWidth);
4459
4526
  }
4460
- } else if (this.type === 0 /* RegularBeam */ || this.type === 1 /* TupletBeam */) {
4461
- let beamSeparation = DocumentSettings.BeamSeparation * unitSize * (this.stemDir === "up" /* Up */ ? 1 : -1);
4527
+ renderer.drawLine(lx, ly, lx, ly + tipHeight, color, lineWidth);
4528
+ renderer.drawLine(rx, ry, rx, ry + tipHeight, color, lineWidth);
4529
+ });
4530
+ } else if (type === 0 /* RegularBeam */ || type === 1 /* TupletBeam */) {
4531
+ this.staffObjects.forEach((obj) => {
4462
4532
  let noteGroupPoints = obj.points.filter((p) => p.symbol instanceof ObjNoteGroup);
4533
+ let { x: lx, y: ly } = noteGroupPoints[0];
4534
+ let { x: rx, y: ry } = noteGroupPoints[noteGroupPoints.length - 1];
4535
+ let beamSeparation = DocumentSettings.BeamSeparation * unitSize * (stemDir === "up" /* Up */ ? 1 : -1) * (1 + 0.5 * Math.abs(Math.atan2(ry - ly, rx - lx)));
4463
4536
  for (let i = 0; i < noteGroupPoints.length - 1; i++) {
4464
- let left = noteGroupPoints[i];
4465
- let right = noteGroupPoints[i + 1];
4466
- if (!(left.symbol instanceof ObjNoteGroup && right.symbol instanceof ObjNoteGroup)) {
4467
- continue;
4468
- }
4469
- let leftBeamCount = left.symbol.getRightBeamCount();
4470
- let rightBeamCount = right.symbol.getLeftBeamCount();
4471
- let lx = left.x;
4472
- let ly = left.y;
4473
- let rx = right.x;
4474
- let ry = right.y;
4475
- let dy = beamSeparation * (1 + 0.5 * Math.abs(Math.atan2(ry - ly, rx - lx)));
4537
+ let { x: lx2, y: ly2, symbol: lsymbol } = noteGroupPoints[i];
4538
+ let { x: rx2, y: ry2, symbol: rsymbol } = noteGroupPoints[i + 1];
4539
+ let leftBeamCount = lsymbol.getRightBeamCount();
4540
+ let rightBeamCount = rsymbol.getLeftBeamCount();
4476
4541
  for (let beamId = 0; beamId < Math.max(leftBeamCount, rightBeamCount); beamId++) {
4477
4542
  if (beamId < leftBeamCount && beamId < rightBeamCount) {
4478
- renderer.drawLine(lx, ly, rx, ry, color, beamThickness);
4543
+ renderer.drawLine(lx2, ly2, rx2, ry2, color, beamThickness);
4479
4544
  } else if (leftBeamCount > rightBeamCount) {
4480
- renderer.drawPartialLine(lx, ly, rx, ry, 0, 0.25, color, beamThickness);
4545
+ renderer.drawPartialLine(lx2, ly2, rx2, ry2, 0, 0.25, color, beamThickness);
4481
4546
  } else if (rightBeamCount > leftBeamCount) {
4482
- renderer.drawPartialLine(lx, ly, rx, ry, 0.75, 1, color, beamThickness);
4547
+ renderer.drawPartialLine(lx2, ly2, rx2, ry2, 0.75, 1, color, beamThickness);
4483
4548
  }
4484
- ly += dy;
4485
- ry += dy;
4549
+ ly2 += beamSeparation;
4550
+ ry2 += beamSeparation;
4486
4551
  }
4487
4552
  }
4488
- }
4489
- if (obj.tupletNumber) {
4490
- obj.tupletNumber.draw(renderer);
4491
- }
4553
+ });
4554
+ }
4555
+ this.staffObjects.forEach((obj) => {
4556
+ var _a;
4557
+ return (_a = obj.tupletNumber) == null ? void 0 : _a.draw(renderer);
4492
4558
  });
4493
4559
  }
4494
4560
  setBeamCounts() {
@@ -5913,18 +5979,15 @@ var _ObjMeasure = class _ObjMeasure extends MusicObject {
5913
5979
  getLyricsObjects(line, vpos, verse) {
5914
5980
  let vposMap = this.lyricsObjectsCache.get(line);
5915
5981
  if (vposMap === void 0) {
5916
- vposMap = /* @__PURE__ */ new Map();
5917
- this.lyricsObjectsCache.set(line, vposMap);
5982
+ this.lyricsObjectsCache.set(line, vposMap = /* @__PURE__ */ new Map());
5918
5983
  }
5919
5984
  let verseMap = vposMap.get(vpos);
5920
5985
  if (verseMap === void 0) {
5921
- verseMap = /* @__PURE__ */ new Map();
5922
- vposMap.set(vpos, verseMap);
5986
+ vposMap.set(vpos, verseMap = /* @__PURE__ */ new Map());
5923
5987
  }
5924
5988
  let lyricsArr = verseMap.get(verse);
5925
5989
  if (lyricsArr === void 0) {
5926
- lyricsArr = [];
5927
- verseMap.set(verse, lyricsArr);
5990
+ verseMap.set(verse, lyricsArr = []);
5928
5991
  }
5929
5992
  return lyricsArr;
5930
5993
  }
@@ -6051,22 +6114,24 @@ var _ObjMeasure = class _ObjMeasure extends MusicObject {
6051
6114
  if (beamGroupSize.length > 1) {
6052
6115
  beamGroupSizeList.unshift([Utils12.Math.sum(beamGroupSize)]);
6053
6116
  }
6054
- let beamsCreated = false;
6117
+ let beamCreated = false;
6055
6118
  let groupStartTicksSave = groupStartTicks;
6056
- while (beamGroupSizeList.length > 0 && !beamsCreated) {
6119
+ while (beamGroupSizeList.length > 0 && !beamCreated) {
6057
6120
  let beamGroupSize2 = beamGroupSizeList.shift();
6058
6121
  groupStartTicks = groupStartTicksSave;
6059
6122
  beamGroupSize2.forEach((beamGroupSize3) => {
6060
6123
  let beamGroupTicks = beamGroupSize3 * NoteLengthProps5.get("8n").ticks;
6124
+ let groupEndTicks = groupStartTicks + beamGroupTicks;
6061
6125
  let groupSymbols = symbols.filter((symbol) => {
6062
6126
  let symbolStartTicks = upBeatStartTicks + symbol.col.positionTicks;
6063
- let symbolTicks = symbol.rhythmProps.ticks;
6064
- return symbolStartTicks >= groupStartTicks && symbolStartTicks + symbolTicks <= groupStartTicks + beamGroupTicks;
6127
+ let symbolEndTicks = symbolStartTicks + symbol.rhythmProps.ticks;
6128
+ return symbolStartTicks >= groupStartTicks && symbolEndTicks <= groupEndTicks;
6065
6129
  });
6066
- let groupNotesTicks = Utils12.Math.sum(groupSymbols.map((sym) => sym.rhythmProps.ticks));
6067
- if (groupNotesTicks === beamGroupTicks && groupSymbols.every((n) => n instanceof ObjNoteGroup) && (groupSymbols.every((n) => n.rhythmProps.flagCount === 1) || beamGroupSizeList.length === 0)) {
6068
- ObjBeamGroup.createBeam(groupSymbols);
6069
- beamsCreated = true;
6130
+ let groupSymbolsTicks = Utils12.Math.sum(groupSymbols.map((sym) => sym.rhythmProps.ticks));
6131
+ if (groupSymbolsTicks === beamGroupTicks && groupSymbols.every((n) => n instanceof ObjNoteGroup) && (groupSymbols.every((n) => n.rhythmProps.flagCount === 1) || beamGroupSizeList.length === 0)) {
6132
+ if (ObjBeamGroup.createBeam(groupSymbols)) {
6133
+ beamCreated = true;
6134
+ }
6070
6135
  }
6071
6136
  groupStartTicks += beamGroupTicks;
6072
6137
  });
@@ -1,4 +1,4 @@
1
- import { N as Note, A as Accidental } from './note-eA2xPPiG.js';
1
+ import { N as Note, A as Accidental } from './note-CgCIBwvR.js';
2
2
 
3
3
  /** Mode enum. */
4
4
  declare enum Mode {
@@ -1,9 +1,9 @@
1
- import { N as Note } from '../note-eA2xPPiG.js';
2
- export { A as Accidental, d as DefaultGuitarNoteLabel, D as DefaultPitchNotation, G as GuitarNoteLabel, e as GuitarNoteLabelList, a as NoteLetter, P as ParsedNote, b as PitchNotation, c as PitchNotationList, S as SymbolSet, g as getPitchNotationName, f as validateGuitarNoteLabel, v as validatePitchNotation } from '../note-eA2xPPiG.js';
3
- import { D as Degree } from '../scale-DGx3tJH4.js';
4
- export { b as Interval, I as IntervalDirection, a as IntervalQuality, c as Scale, d as ScaleFactory, S as ScaleType, i as getDefaultScale, h as getScale, e as getScaleFactory, g as getScaleFactoryList, v as validateIntervalQuality, f as validateScaleType } from '../scale-DGx3tJH4.js';
5
- export { D as DefaultHandedness, a as DefaultTuningName, H as Handedness, T as TuningNameList, g as getTuningStrings, v as validateHandedness, b as validateTuningName } from '../guitar-CaZJDA05.js';
6
- export { A as AccidentalType, B as BeamGrouping, K as KeySignature, M as Mode, N as NoteLength, j as NoteLengthProps, i as NoteLengthStr, R as RhythmProps, d as Tempo, b as TimeSignature, a as TimeSignatureString, T as TimeSignatures, m as Tuplet, k as TupletRatio, h as alterTempoSpeed, g as getDefaultKeySignature, e as getDefaultTempo, c as getDefaultTimeSignature, f as getTempoString, v as validateNoteLength, l as validateTupletRatio } from '../tempo-GrstpD9G.js';
1
+ import { N as Note } from '../note-CgCIBwvR.js';
2
+ export { A as Accidental, d as DefaultGuitarNoteLabel, D as DefaultPitchNotation, G as GuitarNoteLabel, e as GuitarNoteLabelList, a as NoteLetter, P as ParsedNote, b as PitchNotation, c as PitchNotationList, S as SymbolSet, g as getPitchNotationName, f as validateGuitarNoteLabel, v as validatePitchNotation } from '../note-CgCIBwvR.js';
3
+ import { D as Degree } from '../scale-CBW4eTz7.js';
4
+ export { b as Interval, I as IntervalDirection, a as IntervalQuality, c as Scale, d as ScaleFactory, S as ScaleType, i as getDefaultScale, h as getScale, e as getScaleFactory, g as getScaleFactoryList, v as validateIntervalQuality, f as validateScaleType } from '../scale-CBW4eTz7.js';
5
+ export { D as DefaultHandedness, a as DefaultTuningName, H as Handedness, T as TuningNameList, g as getTuningStrings, v as validateHandedness, b as validateTuningName } from '../guitar-BsSayRsH.js';
6
+ export { A as AccidentalType, B as BeamGrouping, K as KeySignature, M as Mode, N as NoteLength, j as NoteLengthProps, i as NoteLengthStr, R as RhythmProps, d as Tempo, b as TimeSignature, a as TimeSignatureString, T as TimeSignatures, m as Tuplet, k as TupletRatio, h as alterTempoSpeed, g as getDefaultKeySignature, e as getDefaultTempo, c as getDefaultTimeSignature, f as getTempoString, v as validateNoteLength, l as validateTupletRatio } from '../tempo-DMt3iwz9.js';
7
7
 
8
8
  /** Chord info type. */
9
9
  type ChordInfo = {
@@ -1,4 +1,4 @@
1
- /* WebMusicScore v5.1.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
1
+ /* WebMusicScore v5.2.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,4 +1,4 @@
1
- /* WebMusicScore v5.1.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
1
+ /* WebMusicScore v5.2.0 | (c) 2023 PahkaSoft | MIT License | Includes: Tone.js (MIT License) */
2
2
  import {
3
3
  NoteLength,
4
4
  NoteLengthProps,
@@ -6,10 +6,10 @@ import {
6
6
  Tuplet,
7
7
  validateNoteLength,
8
8
  validateTupletRatio
9
- } from "../chunk-QVYFIK3L.mjs";
9
+ } from "../chunk-XUGM7SCC.mjs";
10
10
  import {
11
11
  __publicField
12
- } from "../chunk-2EQHSQWO.mjs";
12
+ } from "../chunk-LC5JMIVF.mjs";
13
13
 
14
14
  // src/theory/chord.ts
15
15
  import { Utils as Utils6 } from "@tspro/ts-utils-lib";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tspro/web-music-score",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "author": "PahkaSoft",
5
5
  "license": "MIT",
6
6
  "private": false,