web-music-score 6.0.0-pre.2 → 6.0.0-pre.4

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 (35) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/audio/index.d.ts +1 -1
  3. package/dist/audio/index.js +12 -2
  4. package/dist/audio/index.mjs +4 -4
  5. package/dist/audio-cg/index.js +1 -1
  6. package/dist/audio-cg/index.mjs +4 -4
  7. package/dist/audio-synth/index.js +1 -1
  8. package/dist/audio-synth/index.mjs +4 -4
  9. package/dist/{chunk-3L3RBNBV.mjs → chunk-6BEFVAAS.mjs} +3 -3
  10. package/dist/{chunk-7PNMM2PM.mjs → chunk-DVKR62RS.mjs} +14 -4
  11. package/dist/{chunk-5W6ROWBC.mjs → chunk-GNCSH24V.mjs} +2 -2
  12. package/dist/{chunk-OXLTN43T.mjs → chunk-GNFDJFUO.mjs} +2 -2
  13. package/dist/{chunk-5P4O5YX2.mjs → chunk-KFBULED3.mjs} +3 -3
  14. package/dist/{chunk-GNFWJCFN.mjs → chunk-UAVXEHYM.mjs} +4 -4
  15. package/dist/core/index.js +1830 -3
  16. package/dist/core/index.mjs +90 -4
  17. package/dist/iife/audio-cg.js +1 -1
  18. package/dist/iife/index.js +92 -12
  19. package/dist/{music-objects-CiIS8yPn.d.ts → music-objects-ChAdqdR8.d.ts} +74 -4
  20. package/dist/{note-CJuq5aBy.d.ts → note-RVXvpfyV.d.ts} +1 -1
  21. package/dist/pieces/index.d.ts +3 -3
  22. package/dist/pieces/index.js +1 -1
  23. package/dist/pieces/index.mjs +2 -2
  24. package/dist/react-ui/index.d.ts +6 -3
  25. package/dist/react-ui/index.js +43 -10
  26. package/dist/react-ui/index.mjs +44 -11
  27. package/dist/{scale-DxGqFxlv.d.ts → scale-B1M10_fu.d.ts} +2 -2
  28. package/dist/score/index.d.ts +6 -54
  29. package/dist/score/index.js +709 -597
  30. package/dist/score/index.mjs +700 -599
  31. package/dist/{tempo-pCAa6qgo.d.ts → tempo-D-JF-8b_.d.ts} +1 -1
  32. package/dist/theory/index.d.ts +5 -5
  33. package/dist/theory/index.js +12 -2
  34. package/dist/theory/index.mjs +4 -4
  35. package/package.json +5 -4
@@ -1,12 +1,12 @@
1
- /* WebMusicScore v6.0.0-pre.2 | (c) 2023-2025 Stefan Brockmann | MIT License | Includes: Tone.js (MIT License), Color Name to Code (MIT License) */
1
+ /* WebMusicScore v6.0.0-pre.4 | (c) 2023-2025 Stefan Brockmann | MIT License | Includes: Tone.js (MIT License), Color Name to Code (MIT License) */
2
2
  import {
3
3
  MusicError
4
- } from "../chunk-5P4O5YX2.mjs";
4
+ } from "../chunk-KFBULED3.mjs";
5
5
  import {
6
6
  NoteLengthProps,
7
7
  RhythmProps,
8
8
  validateNoteLength
9
- } from "../chunk-GNFWJCFN.mjs";
9
+ } from "../chunk-UAVXEHYM.mjs";
10
10
  import {
11
11
  AnchoredRect,
12
12
  BiMap,
@@ -20,105 +20,12 @@ import {
20
20
  device_exports,
21
21
  guard_exports,
22
22
  utils_exports
23
- } from "../chunk-7PNMM2PM.mjs";
23
+ } from "../chunk-DVKR62RS.mjs";
24
24
  import {
25
25
  __publicField,
26
26
  __spreadProps,
27
27
  __spreadValues
28
- } from "../chunk-OXLTN43T.mjs";
29
-
30
- // src/score/engine/settings.ts
31
- var DebugSettings = {
32
- DrawDebugRects: false,
33
- DisableBeams: false
34
- };
35
- var DocumentSettings = {
36
- DocumentScale: 1,
37
- MinStaffWidth: 75,
38
- MinColumnsWidth: 10,
39
- ColumnWidthScale: 1.7,
40
- PostMeasureBreakWidth: 10,
41
- NoteDotSpace: 0.5,
42
- NoteAccSpace: 0.5,
43
- NoteHeadWidth: 2,
44
- NoteHeadHeight: 1.3,
45
- DiamondNoteHeadSize: 1.8,
46
- DotSize: 0.8,
47
- StemHeight: 7,
48
- // One octave
49
- FlagWidth: 1.5,
50
- FlagHeight: 4,
51
- FlagSeparation: 2,
52
- BeamSeparation: 1.25,
53
- BeamAngleFactor: 0.5,
54
- BeamThickness: 4,
55
- RestDotSpace: 0.5,
56
- LedgerLineWidth: 3.6,
57
- StubTieLength: 5,
58
- StaffHeight: 8,
59
- TabHeight: 20
60
- };
61
- var DocumentColor = {
62
- HilightStaffPos: "#55cc55",
63
- HilightObject: "#55cc55",
64
- PlayCursor: "#44aa44",
65
- Background: "white",
66
- Header_Title: "black",
67
- Header_Composer: "black",
68
- Header_Arranger: "black",
69
- RowGroup_Instrument: "black",
70
- RowGroup_Frame: "black",
71
- Staff_Frame: "black",
72
- Staff_Note: "black",
73
- Staff_Rest: "black",
74
- Staff_Connective: "black",
75
- Staff_Signature_Clef: "black",
76
- Staff_Signature_Key: "black",
77
- Staff_Signature_Time: "black",
78
- Staff_Signature_Tempo: "black",
79
- Staff_Signature_MeasureNum: "black",
80
- Staff_Element_Fermata: "black",
81
- Staff_Element_Annotation: "black",
82
- Staff_Element_Navigation: "black",
83
- Staff_Element_Label: "black",
84
- Tab_Frame: "black",
85
- Tab_Note: "black",
86
- Tab_Rest: "black",
87
- Tab_Connective: "black",
88
- Tab_Tuning: "black",
89
- //Tab_Signature_Clef: "black",
90
- //Tab_Signature_Key: "black",
91
- Tab_Signature_Time: "black",
92
- Tab_Signature_Tempo: "black",
93
- Tab_Signature_MeasureNum: "black",
94
- Tab_Element_Fermata: "black",
95
- Tab_Element_Annotation: "black",
96
- Tab_Element_Navigation: "black",
97
- Tab_Element_Label: "black"
98
- };
99
-
100
- // src/score/pub/color.ts
101
- function eq(a, b) {
102
- return a.toLocaleLowerCase() === b.toLocaleLowerCase();
103
- }
104
- function setColor(color, ...colorAttrs) {
105
- const setBacground = colorAttrs.length === 1 && eq(colorAttrs[0], "background");
106
- const setAllColors = colorAttrs.length === 0;
107
- if (eq(color, ""))
108
- color = setBacground ? "white" : "black";
109
- let noMatch = true;
110
- for (const key in DocumentColor) {
111
- const keyAttrs = key.split("_");
112
- const isColorMatch = colorAttrs.length > 0 && colorAttrs.every((a) => keyAttrs.some((b) => eq(a, b)));
113
- const isBgColorMatch = keyAttrs.length === 1 && eq(keyAttrs[0], "background");
114
- if (setAllColors && !isBgColorMatch || isColorMatch) {
115
- DocumentColor[key] = color;
116
- noMatch = false;
117
- }
118
- }
119
- if (noMatch)
120
- console.error(`Color attrs ${utils_exports.Str.stringify(colorAttrs)} did not match any color.`);
121
- }
28
+ } from "../chunk-GNFDJFUO.mjs";
122
29
 
123
30
  // src/score/pub/types.ts
124
31
  var StaffPreset = /* @__PURE__ */ ((StaffPreset2) => {
@@ -399,394 +306,40 @@ import { Note as Note9 } from "web-music-score/theory";
399
306
  // src/score/engine/obj-staff-and-tab.ts
400
307
  import { getTuningStrings, Note as Note8, validateTuningName } from "web-music-score/theory";
401
308
 
402
- // node_modules/color-name-to-code/dist/color-name.enum.js
403
- var ColorName;
404
- (function(ColorName2) {
405
- ColorName2["AliceBlue"] = "aliceblue";
406
- ColorName2["AntiqueWhite"] = "antiquewhite";
407
- ColorName2["Aqua"] = "aqua";
408
- ColorName2["Aquamarine"] = "aquamarine";
409
- ColorName2["Azure"] = "azure";
410
- ColorName2["Beige"] = "beige";
411
- ColorName2["Bisque"] = "bisque";
412
- ColorName2["Black"] = "black";
413
- ColorName2["BlanchedAlmond"] = "blanchedalmond";
414
- ColorName2["Blue"] = "blue";
415
- ColorName2["BlueViolet"] = "blueviolet";
416
- ColorName2["Brown"] = "brown";
417
- ColorName2["BurlyWood"] = "burlywood";
418
- ColorName2["CadetBlue"] = "cadetblue";
419
- ColorName2["Chartreuse"] = "chartreuse";
420
- ColorName2["Chocolate"] = "chocolate";
421
- ColorName2["Coral"] = "coral";
422
- ColorName2["CornflowerBlue"] = "cornflowerblue";
423
- ColorName2["CornSilk"] = "cornsilk";
424
- ColorName2["Crimson"] = "crimson";
425
- ColorName2["Cyan"] = "cyan";
426
- ColorName2["DarkBlue"] = "darkblue";
427
- ColorName2["DarkCyan"] = "darkcyan";
428
- ColorName2["DarkGoldenRod"] = "darkgoldenrod";
429
- ColorName2["DarkGray"] = "darkgray";
430
- ColorName2["DarkGreen"] = "darkgreen";
431
- ColorName2["DarkGrey"] = "darkgrey";
432
- ColorName2["DarkKhaki"] = "darkkhaki";
433
- ColorName2["DarkMagenta"] = "darkmagenta";
434
- ColorName2["DarkOliveGreen"] = "darkolivegreen";
435
- ColorName2["DarkOrange"] = "darkorange";
436
- ColorName2["DarkOrchid"] = "darkorchid";
437
- ColorName2["DarkRed"] = "darkred";
438
- ColorName2["DarkSalmon"] = "darksalmon";
439
- ColorName2["DarkSeaGreen"] = "darkseagreen";
440
- ColorName2["DarkSlateBlue"] = "darkslateblue";
441
- ColorName2["DarkSlateGray"] = "darkslategray";
442
- ColorName2["DarkSlateGrey"] = "darkslategrey";
443
- ColorName2["DarkTurquoise"] = "darkturquoise";
444
- ColorName2["DarkViolet"] = "darkviolet";
445
- ColorName2["DeepPink"] = "deeppink";
446
- ColorName2["DeepSkyBlue"] = "deepskyblue";
447
- ColorName2["DimGray"] = "dimgray";
448
- ColorName2["DimGrey"] = "dimgrey";
449
- ColorName2["DodgerBlue"] = "dodgerblue";
450
- ColorName2["FireBrick"] = "firebrick";
451
- ColorName2["FloralWhite"] = "floralwhite";
452
- ColorName2["ForestGreen"] = "forestgreen";
453
- ColorName2["Fuchsia"] = "fuchsia";
454
- ColorName2["Gainsboro"] = "gainsboro";
455
- ColorName2["GhostWhite"] = "ghostwhite";
456
- ColorName2["Gold"] = "gold";
457
- ColorName2["GoldenRod"] = "goldenrod";
458
- ColorName2["Gray"] = "gray";
459
- ColorName2["Green"] = "green";
460
- ColorName2["GreenYellow"] = "greenyellow";
461
- ColorName2["Grey"] = "grey";
462
- ColorName2["Honeydew"] = "honeydew";
463
- ColorName2["HotPink"] = "hotpink";
464
- ColorName2["IndianRed"] = "indianred";
465
- ColorName2["Indigo"] = "indigo";
466
- ColorName2["Ivory"] = "ivory";
467
- ColorName2["Khaki"] = "khaki";
468
- ColorName2["Lavender"] = "lavender";
469
- ColorName2["LavenderBlush"] = "lavenderblush";
470
- ColorName2["LawnGreen"] = "lawngreen";
471
- ColorName2["LemonChiffon"] = "lemonchiffon";
472
- ColorName2["LightBlue"] = "lightblue";
473
- ColorName2["LightCoral"] = "lightcoral";
474
- ColorName2["LightCyan"] = "lightcyan";
475
- ColorName2["LightGoldenRodYellow"] = "lightgoldenrodyellow";
476
- ColorName2["LightGray"] = "lightgray";
477
- ColorName2["LightGreen"] = "lightgreen";
478
- ColorName2["LightGrey"] = "lightgrey";
479
- ColorName2["LightPink"] = "lightpink";
480
- ColorName2["LightSalmon"] = "lightsalmon";
481
- ColorName2["LightSeaGreen"] = "lightseagreen";
482
- ColorName2["LightSkyBlue"] = "lightskyblue";
483
- ColorName2["LightSlateGray"] = "lightslategray";
484
- ColorName2["LightSlateGrey"] = "lightslategrey";
485
- ColorName2["LightSteelBlue"] = "lightsteelblue";
486
- ColorName2["LightYellow"] = "lightyellow";
487
- ColorName2["Lime"] = "lime";
488
- ColorName2["LimeGreen"] = "limegreen";
489
- ColorName2["Linen"] = "linen";
490
- ColorName2["Magenta"] = "magenta";
491
- ColorName2["Maroon"] = "maroon";
492
- ColorName2["MediumAquamarine"] = "mediumaquamarine";
493
- ColorName2["MediumBlue"] = "mediumblue";
494
- ColorName2["MediumOrchid"] = "mediumorchid";
495
- ColorName2["MediumPurple"] = "mediumpurple";
496
- ColorName2["MediumSeaGreen"] = "mediumseagreen";
497
- ColorName2["MediumSlateBlue"] = "mediumslateblue";
498
- ColorName2["MediumSpringGreen"] = "mediumspringgreen";
499
- ColorName2["MediumTurquoise"] = "mediumturquoise";
500
- ColorName2["MediumVioletRed"] = "mediumvioletred";
501
- ColorName2["MidnightBlue"] = "midnightblue";
502
- ColorName2["MintCream"] = "mintcream";
503
- ColorName2["MistyRose"] = "mistyrose";
504
- ColorName2["Moccasin"] = "moccasin";
505
- ColorName2["NavajoWhite"] = "navajowhite";
506
- ColorName2["Navy"] = "navy";
507
- ColorName2["OldLace"] = "oldlace";
508
- ColorName2["Olive"] = "olive";
509
- ColorName2["OliveDrab"] = "olivedrab";
510
- ColorName2["Orange"] = "orange";
511
- ColorName2["OrangeRed"] = "orangered";
512
- ColorName2["Orchid"] = "orchid";
513
- ColorName2["PaleGoldenRod"] = "palegoldenrod";
514
- ColorName2["PaleGreen"] = "palegreen";
515
- ColorName2["PaleTurquoise"] = "paleturquoise";
516
- ColorName2["PaleVioletRed"] = "palevioletred";
517
- ColorName2["PapayaWhip"] = "papayawhip";
518
- ColorName2["PeachPuff"] = "peachpuff";
519
- ColorName2["Peru"] = "peru";
520
- ColorName2["Pink"] = "pink";
521
- ColorName2["Plum"] = "plum";
522
- ColorName2["PowderBlue"] = "powderblue";
523
- ColorName2["Purple"] = "purple";
524
- ColorName2["RebeccaPurple"] = "rebeccapurple";
525
- ColorName2["Red"] = "red";
526
- ColorName2["RosyBrown"] = "rosybrown";
527
- ColorName2["RoyalBlue"] = "royalblue";
528
- ColorName2["SaddleBrown"] = "saddlebrown";
529
- ColorName2["Salmon"] = "salmon";
530
- ColorName2["SandyBrown"] = "sandybrown";
531
- ColorName2["SeaGreen"] = "seagreen";
532
- ColorName2["SeaShell"] = "seashell";
533
- ColorName2["Sienna"] = "sienna";
534
- ColorName2["Silver"] = "silver";
535
- ColorName2["SkyBlue"] = "skyblue";
536
- ColorName2["SlateBlue"] = "slateblue";
537
- ColorName2["SlateGray"] = "slategray";
538
- ColorName2["SlateGrey"] = "slategrey";
539
- ColorName2["Snow"] = "snow";
540
- ColorName2["SpringGreen"] = "springgreen";
541
- ColorName2["SteelBlue"] = "steelblue";
542
- ColorName2["Tan"] = "tan";
543
- ColorName2["Teal"] = "teal";
544
- ColorName2["Thistle"] = "thistle";
545
- ColorName2["Tomato"] = "tomato";
546
- ColorName2["Turquoise"] = "turquoise";
547
- ColorName2["Violet"] = "violet";
548
- ColorName2["Wheat"] = "wheat";
549
- ColorName2["White"] = "white";
550
- ColorName2["WhiteSmoke"] = "whitesmoke";
551
- ColorName2["Yellow"] = "yellow";
552
- ColorName2["YellowGreen"] = "yellowgreen";
553
- })(ColorName = ColorName || (ColorName = {}));
309
+ // src/score/engine/settings.ts
310
+ var DebugSettings = {
311
+ DrawDebugRects: false,
312
+ DisableBeams: false
313
+ };
314
+ var DocumentSettings = {
315
+ DocumentScale: 1,
316
+ MinStaffWidth: 75,
317
+ MinColumnsWidth: 10,
318
+ ColumnWidthScale: 1.7,
319
+ PostMeasureBreakWidth: 10,
320
+ NoteDotSpace: 0.5,
321
+ NoteAccSpace: 0.5,
322
+ NoteHeadWidth: 2,
323
+ NoteHeadHeight: 1.3,
324
+ DiamondNoteHeadSize: 1.8,
325
+ DotSize: 0.8,
326
+ StemHeight: 7,
327
+ // One octave
328
+ FlagWidth: 1.5,
329
+ FlagHeight: 4,
330
+ FlagSeparation: 2,
331
+ BeamSeparation: 1.25,
332
+ BeamAngleFactor: 0.5,
333
+ BeamThickness: 4,
334
+ RestDotSpace: 0.5,
335
+ LedgerLineWidth: 3.6,
336
+ StubTieLength: 5,
337
+ StaffHeight: 8,
338
+ TabHeight: 20
339
+ };
554
340
 
555
- // node_modules/color-name-to-code/dist/color-code-format.enum.js
556
- var ColorCodeFormat;
557
- (function(ColorCodeFormat2) {
558
- ColorCodeFormat2["Hex"] = "hex";
559
- ColorCodeFormat2["RGB"] = "rgb";
560
- ColorCodeFormat2["Array"] = "array";
561
- })(ColorCodeFormat = ColorCodeFormat || (ColorCodeFormat = {}));
562
-
563
- // node_modules/color-name/index.js
564
- var colors = {
565
- aliceblue: [240, 248, 255],
566
- antiquewhite: [250, 235, 215],
567
- aqua: [0, 255, 255],
568
- aquamarine: [127, 255, 212],
569
- azure: [240, 255, 255],
570
- beige: [245, 245, 220],
571
- bisque: [255, 228, 196],
572
- black: [0, 0, 0],
573
- blanchedalmond: [255, 235, 205],
574
- blue: [0, 0, 255],
575
- blueviolet: [138, 43, 226],
576
- brown: [165, 42, 42],
577
- burlywood: [222, 184, 135],
578
- cadetblue: [95, 158, 160],
579
- chartreuse: [127, 255, 0],
580
- chocolate: [210, 105, 30],
581
- coral: [255, 127, 80],
582
- cornflowerblue: [100, 149, 237],
583
- cornsilk: [255, 248, 220],
584
- crimson: [220, 20, 60],
585
- cyan: [0, 255, 255],
586
- darkblue: [0, 0, 139],
587
- darkcyan: [0, 139, 139],
588
- darkgoldenrod: [184, 134, 11],
589
- darkgray: [169, 169, 169],
590
- darkgreen: [0, 100, 0],
591
- darkgrey: [169, 169, 169],
592
- darkkhaki: [189, 183, 107],
593
- darkmagenta: [139, 0, 139],
594
- darkolivegreen: [85, 107, 47],
595
- darkorange: [255, 140, 0],
596
- darkorchid: [153, 50, 204],
597
- darkred: [139, 0, 0],
598
- darksalmon: [233, 150, 122],
599
- darkseagreen: [143, 188, 143],
600
- darkslateblue: [72, 61, 139],
601
- darkslategray: [47, 79, 79],
602
- darkslategrey: [47, 79, 79],
603
- darkturquoise: [0, 206, 209],
604
- darkviolet: [148, 0, 211],
605
- deeppink: [255, 20, 147],
606
- deepskyblue: [0, 191, 255],
607
- dimgray: [105, 105, 105],
608
- dimgrey: [105, 105, 105],
609
- dodgerblue: [30, 144, 255],
610
- firebrick: [178, 34, 34],
611
- floralwhite: [255, 250, 240],
612
- forestgreen: [34, 139, 34],
613
- fuchsia: [255, 0, 255],
614
- gainsboro: [220, 220, 220],
615
- ghostwhite: [248, 248, 255],
616
- gold: [255, 215, 0],
617
- goldenrod: [218, 165, 32],
618
- gray: [128, 128, 128],
619
- green: [0, 128, 0],
620
- greenyellow: [173, 255, 47],
621
- grey: [128, 128, 128],
622
- honeydew: [240, 255, 240],
623
- hotpink: [255, 105, 180],
624
- indianred: [205, 92, 92],
625
- indigo: [75, 0, 130],
626
- ivory: [255, 255, 240],
627
- khaki: [240, 230, 140],
628
- lavender: [230, 230, 250],
629
- lavenderblush: [255, 240, 245],
630
- lawngreen: [124, 252, 0],
631
- lemonchiffon: [255, 250, 205],
632
- lightblue: [173, 216, 230],
633
- lightcoral: [240, 128, 128],
634
- lightcyan: [224, 255, 255],
635
- lightgoldenrodyellow: [250, 250, 210],
636
- lightgray: [211, 211, 211],
637
- lightgreen: [144, 238, 144],
638
- lightgrey: [211, 211, 211],
639
- lightpink: [255, 182, 193],
640
- lightsalmon: [255, 160, 122],
641
- lightseagreen: [32, 178, 170],
642
- lightskyblue: [135, 206, 250],
643
- lightslategray: [119, 136, 153],
644
- lightslategrey: [119, 136, 153],
645
- lightsteelblue: [176, 196, 222],
646
- lightyellow: [255, 255, 224],
647
- lime: [0, 255, 0],
648
- limegreen: [50, 205, 50],
649
- linen: [250, 240, 230],
650
- magenta: [255, 0, 255],
651
- maroon: [128, 0, 0],
652
- mediumaquamarine: [102, 205, 170],
653
- mediumblue: [0, 0, 205],
654
- mediumorchid: [186, 85, 211],
655
- mediumpurple: [147, 112, 219],
656
- mediumseagreen: [60, 179, 113],
657
- mediumslateblue: [123, 104, 238],
658
- mediumspringgreen: [0, 250, 154],
659
- mediumturquoise: [72, 209, 204],
660
- mediumvioletred: [199, 21, 133],
661
- midnightblue: [25, 25, 112],
662
- mintcream: [245, 255, 250],
663
- mistyrose: [255, 228, 225],
664
- moccasin: [255, 228, 181],
665
- navajowhite: [255, 222, 173],
666
- navy: [0, 0, 128],
667
- oldlace: [253, 245, 230],
668
- olive: [128, 128, 0],
669
- olivedrab: [107, 142, 35],
670
- orange: [255, 165, 0],
671
- orangered: [255, 69, 0],
672
- orchid: [218, 112, 214],
673
- palegoldenrod: [238, 232, 170],
674
- palegreen: [152, 251, 152],
675
- paleturquoise: [175, 238, 238],
676
- palevioletred: [219, 112, 147],
677
- papayawhip: [255, 239, 213],
678
- peachpuff: [255, 218, 185],
679
- peru: [205, 133, 63],
680
- pink: [255, 192, 203],
681
- plum: [221, 160, 221],
682
- powderblue: [176, 224, 230],
683
- purple: [128, 0, 128],
684
- rebeccapurple: [102, 51, 153],
685
- red: [255, 0, 0],
686
- rosybrown: [188, 143, 143],
687
- royalblue: [65, 105, 225],
688
- saddlebrown: [139, 69, 19],
689
- salmon: [250, 128, 114],
690
- sandybrown: [244, 164, 96],
691
- seagreen: [46, 139, 87],
692
- seashell: [255, 245, 238],
693
- sienna: [160, 82, 45],
694
- silver: [192, 192, 192],
695
- skyblue: [135, 206, 235],
696
- slateblue: [106, 90, 205],
697
- slategray: [112, 128, 144],
698
- slategrey: [112, 128, 144],
699
- snow: [255, 250, 250],
700
- springgreen: [0, 255, 127],
701
- steelblue: [70, 130, 180],
702
- tan: [210, 180, 140],
703
- teal: [0, 128, 128],
704
- thistle: [216, 191, 216],
705
- tomato: [255, 99, 71],
706
- turquoise: [64, 224, 208],
707
- violet: [238, 130, 238],
708
- wheat: [245, 222, 179],
709
- white: [255, 255, 255],
710
- whitesmoke: [245, 245, 245],
711
- yellow: [255, 255, 0],
712
- yellowgreen: [154, 205, 50]
713
- };
714
- for (const key in colors) Object.freeze(colors[key]);
715
- var color_name_default = Object.freeze(colors);
716
-
717
- // node_modules/color-name-to-code/dist/color-names.js
718
- var colorNames = color_name_default;
719
-
720
- // node_modules/color-name-to-code/dist/color-array-to-hex.js
721
- var colorArrayToHexDefaultOptions = {
722
- hash: true,
723
- lowercase: false,
724
- short: false
725
- };
726
- function colorArrayToHex(arr, partialOptions) {
727
- const options = __spreadValues(__spreadValues({}, colorArrayToHexDefaultOptions), partialOptions);
728
- const { hash, lowercase, short } = options;
729
- let hex = arr.map((num) => {
730
- let str = num.toString(16);
731
- str = str.length === 1 ? `0${str}` : str;
732
- return str;
733
- }).join("");
734
- if (short) {
735
- const chars = [...hex];
736
- if (chars[0] === chars[1] && chars[2] === chars[3] && chars[4] === chars[5]) {
737
- hex = `${chars[0]}${chars[2]}${chars[4]}`;
738
- }
739
- }
740
- hex = lowercase ? hex.toLowerCase() : hex.toUpperCase();
741
- if (hash) {
742
- hex = `#${hex}`;
743
- }
744
- return hex;
745
- }
746
-
747
- // node_modules/color-name-to-code/dist/color-array-to-rgb.js
748
- function colorArrayToRGB(arr, alpha = 1) {
749
- alpha = Math.min(1, Math.max(0, alpha));
750
- if (alpha < 1) {
751
- return `rgba(${arr[0]}, ${arr[1]}, ${arr[2]}, ${alpha})`;
752
- }
753
- return `rgb(${arr[0]}, ${arr[1]}, ${arr[2]})`;
754
- }
755
-
756
- // node_modules/color-name-to-code/dist/color-name-to-code.js
757
- var colorNameToCodeDefaultOptions = __spreadProps(__spreadValues({}, colorArrayToHexDefaultOptions), {
758
- fallback: true,
759
- alpha: 1,
760
- format: ColorCodeFormat.Hex
761
- });
762
- function colorNameToCode(value, partialOptions = {}) {
763
- const options = __spreadValues(__spreadValues({}, colorNameToCodeDefaultOptions), partialOptions);
764
- const { fallback, format, hash, lowercase, short, alpha } = options;
765
- value = `${value}`;
766
- const colorName = value.toLowerCase().replaceAll(/[^a-z]/g, "");
767
- let colorArray = colorNames[colorName];
768
- if (!colorArray) {
769
- if (!fallback) {
770
- throw new Error(`no matching color found for '${value}'`);
771
- }
772
- const hex = value.toLowerCase().replaceAll(/[^\da-f]/g, "");
773
- colorArray = (hex.length <= 3 ? [hex.slice(0, 1).repeat(2), hex.slice(1, 2).repeat(2), hex.slice(2, 3).repeat(2)] : [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)]).map((str) => Number.parseInt(str.length < 2 ? `${"0".repeat(2 - str.length)}${str}` : str, 16));
774
- }
775
- switch (format) {
776
- case ColorCodeFormat.Array: {
777
- return [...colorArray];
778
- }
779
- case ColorCodeFormat.RGB: {
780
- return colorArrayToRGB(colorArray, alpha);
781
- }
782
- default: {
783
- return colorArrayToHex(colorArray, { hash, lowercase, short });
784
- }
785
- }
786
- }
787
-
788
- // src/score/engine/assets/G-clef.png
789
- var G_clef_default = "data:image/png;base64,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TTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NDA3ODVjMzYtNDAxZC00YTZlLTkxODctMDQ1NTI4MmM0ZGY2IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhiZTJkYzc1LTVlYjQtNDk0Yy1iNWRlLWQ2MzZkNzZhNjI2YiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmU3YWE0MWNhLTNiYjMtNGU5Yi05NDQxLTllNTNmZTJiZjM5ZiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjg2NDA4NjA5MzE2NDM4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzOjA2OjEwVDE3OjUwOjA5KzAzOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMzowNjoxMFQxNzo1MDowOSswMzowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjI3MzY2YmY0LWVkZDMtNDE5OC05NjJhLWU5ZTM5MTBlNThiZSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wOC0yMlQwMjo1NTozNiIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NjVlMTM3OS0wZDlmLTQ5ODItYWQ3MC05MzhjOWMzOWE0ZjMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjItMDktMTFUMTY6MzU6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTBmYmEwYTMtOTI5Yi00NTRlLThjNGMtOGVkOGM4YWJhZGRjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA2LTEwVDE3OjUwOjA5Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ppn4NIQAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnBgoOMgm5WlWBAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAACHtJREFUeNrtnXuQVmMcxz+77cauTWUpbGSVu2w3BpnUEBq3chkmBjGayG1GBuNWLtUgw5SJkBkjl4QKg1wyQyarK0lRSlstU20bWam9+OM8O3P6vc8553nOe97tnO18Z84f57zP7XvOc/ndnueFfQx5e6neUmAI0B3oDPwD/AJ8Dvzcml5we+Al4D+gyeOaB1S0BrLHAut9iLqv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";
341
+ // src/score/engine/assets/G-clef.png
342
+ var G_clef_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAACWCAYAAACCe+v6AAADHXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja7ZZRcu0mDIbfWUWXgCSExHIwmJnu4C6/Pxg7J2kyTdv7GJhjsJCF0CfZJ5y//hzhDzRK5iGpeS45R7RUUuGKicerHetKMa3ratL2Gr2Xh5L3AkMkU/O6LbzlJ+SY074vexO69W9D94QqZvq2UOuWH+/lxzbI/tHQ9kDo2jn2/cA2JLw9Std92x7l4vbuaH2fGYqXyN9+SYyzZrKEa+JolgvmzjEZ4tmno6NxWYb0CugjuO9vVYZPfApJxFUkXV7K/IlUjBlXrAYokhhuFMK5UFbgI1DCBXha9kY1PsF8jc1bjL5o3zlWxCbjnMov1J7xQ97k/HnePLOdBg81z3tB3mON+Rk/lZPehu4Fefbh1529PTu/k4vE9BqK8Ip7jO5jHRqnqCkjFnkf6j7KmkHvmFFcT2V0izkgax2T2Qu6xxobcqrHhko7MC/EoDsoUadKg841NmpwMfHJhpG5BZYldEAq3GQmQ5qdBpsU6eLImHblkPDjC61ty9qukcceYieoMsEY4ZH/3MN3FceYtUQU/YoT0gJ+8axOeBEJ+OcANTCgsYOqK8B3/9gm18lMV5gdB6zxCJeJQ+ktuWSBFigqxgsyWd8GECJsrXCGBARiJlHK8MiYjQiBdACqcJ0l8QECpModTnISyYCD6sDeeMZoqbLyJcZbVVJAsWYUrYNQBayUFPljyZFDVUWTqmY1dS1as+RZeTlbnq/namLJ1LIZ3tlWrLp4cvXs5u7Fa+EieH1rQZ0WL6XUik0rLFc8XaFQ68GHHOnQIx92+FHCURvSp6WmLTdr3kqrnbt0FHjP3br30utJJ1LpTKee+bTTz3LWgVQbMtLQkYeF4aOM+lCjXbYf+7+gRpsaL1JT0R5qkJrdJmi+TnQyAzFOBOAGaiCGxJ7MolNKPMlNZvgeoSqU4aROOJ0mMRBMJ7EOethtcoHr7+EWzBc3/r/kwkT3TXJ/5/YZtT6/Em0Ru8pwBjUKqg/rp1f2Oj+vX47hnxS+O/4Y+jH0Y+jrcYwROv51hb8AKbCqdGIdCl0AAAGFaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBzFX1O1UqoOdhBxyFCd7OAH0rFUsQgWSluhVQeTS7+gSUOS4uIouBYc/FisOrg46+rgKgiCHyCuLk6KLlLi/5JCi1gPjvvx7t7j7h0gNCpMNXuigKpZRioeE7O5VdH3ij74MYgpRCRm6on0YgZdx9c9PHy9C/Os7uf+HANK3mSARySOMt2wiDeI5zYtnfM+cZCVJIX4nHjSoAsSP3JddvmNc9FhgWcGjUxqnjhILBY7WO5gVjJU4lnikKJqlC9kXVY4b3FWKzXWuid/YSCvraS5TnMMcSwhgSREyKihjAoshGnVSDGRov1YF/+o40+SSyZXGYwcC6hCheT4wf/gd7dmYWbaTQrEgN4X2/4YB3y7QLNu29/Htt08AbzPwJXW9lcbQOST9HpbCx0BQ9vAxXVbk/eAyx1g5EmXDMmRvDSFQgF4P6NvygHDt4B/ze2ttY/TByBDXS3fAAeHwESRste7vLu/s7d/z7T6+wEMNXLkxtwRywAADzRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NDA3ODVjMzYtNDAxZC00YTZlLTkxODctMDQ1NTI4MmM0ZGY2IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhiZTJkYzc1LTVlYjQtNDk0Yy1iNWRlLWQ2MzZkNzZhNjI2YiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmU3YWE0MWNhLTNiYjMtNGU5Yi05NDQxLTllNTNmZTJiZjM5ZiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjg2NDA4NjA5MzE2NDM4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzOjA2OjEwVDE3OjUwOjA5KzAzOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMzowNjoxMFQxNzo1MDowOSswMzowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjI3MzY2YmY0LWVkZDMtNDE5OC05NjJhLWU5ZTM5MTBlNThiZSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wOC0yMlQwMjo1NTozNiIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NjVlMTM3OS0wZDlmLTQ5ODItYWQ3MC05MzhjOWMzOWE0ZjMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjItMDktMTFUMTY6MzU6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTBmYmEwYTMtOTI5Yi00NTRlLThjNGMtOGVkOGM4YWJhZGRjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA2LTEwVDE3OjUwOjA5Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ppn4NIQAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnBgoOMgm5WlWBAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAACHtJREFUeNrtnXuQVmMcxz+77cauTWUpbGSVu2w3BpnUEBq3chkmBjGayG1GBuNWLtUgw5SJkBkjl4QKg1wyQyarK0lRSlstU20bWam9+OM8O3P6vc8553nOe97tnO18Z84f57zP7XvOc/ndnueFfQx5e6neUmAI0B3oDPwD/AJ8Dvzcml5we+Al4D+gyeOaB1S0BrLHAut9iLqv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";
790
343
 
791
344
  // src/score/engine/assets/F-clef.png
792
345
  var F_clef_default = "data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo0MDc4NWMzNi00MDFkLTRhNmUtOTE4Ny0wNDU1MjgyYzRkZjYiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzg3YjYxN2YtMjg1MS00YzhlLTg2MTYtZWM3NGMwYzYwMWVlIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZTdhYTQxY2EtM2JiMy00ZTliLTk0NDEtOWU1M2ZlMmJmMzlmIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODY2MTM5NDcxOTU2ODAiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjM6MDY6MTNUMDI6NTI6MjUrMDM6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIzOjA2OjEzVDAyOjUyOjI1KzAzOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjczNjZiZjQtZWRkMy00MTk4LTk2MmEtZTllMzkxMGU1OGJlIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA4LTIyVDAyOjU1OjM2Ii8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjk2NWUxMzc5LTBkOWYtNDk4Mi1hZDcwLTkzOGM5YzM5YTRmMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wOS0xMVQxNjozNTowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMGZiYTBhMy05MjliLTQ1NGUtOGM0Yy04ZWQ4YzhhYmFkZGMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMDYtMTBUMTc6NTA6MDkiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDBmYjM4YTMtZjZiMi00NjQ1LTliMTYtMjlhNWE0ODZlMjhhIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA2LTEzVDAyOjUyOjI3Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PsIRrtIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfnBgwXNBsqJURsAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAABF9JREFUeNrtmluIF1Ucxz9/E8P1VnnJ9dJWC4Frmq2JJmqolGEILoQvK2gZeXlRCSm1Fx9UEsJQERWsXhRftECs0Gq70EK9ZHlbFyHbds3VVXFX91+7664P81tYhpnfmft//st84TzMzDm/8/vOnPO7nYEMGTJkyJAhQ4YMGSJBLkJZw4FyYAIwDHgU+A9oAxqBv4C7xfyySoBlwKfAFaAb6DG0euAzoAoYXCxEnwH2A60eCGrtFrALGJNWokNEwY6QRO2tFXgPGJAmss8DlyImam/fASPTQHaeGJueBFod8FQhrfSLwM+ynDX8L1/oV+BP4LZY58eBUUAlMB94ycPSvQTMERmJ4jGgwYPh2Qg84VFmGbAP6DTI/aoQS/lzg1JfA2MDyn4ZuGaQvyZJspUGv3oKGBhyjmeBJmWOmxLMJIITiiIXIgwaZgFdylxbDeNHANXAZmAVUBpEiScNe2xRxC/3Y2WuRmUlLRHD1rd/HljvV4F3FAVqYlhNo4B7Pl/wdPEMbmOq/ShwRBH0Vkxb6LAy536fW64HuOpn8vOKoLKYCC9Q5rzs0L/JQxDjyYPkgHYXAW0xGslByrLuFuPUFw0eCI92mmiAQ4LgZoEbYyTcAZxVPsJk271ag7x6cWueCLvhfsyu8LzybKLtersUF9ywxe2BnXBnAZOUJuXZeNv1OSki3LLdzwPrgONuguw+7g7wAHjEoW+vEagAXgeelr1yUSZoCUn4hvJsqMO9byRaWyLGtFkiwOtBJnYzBKcVg/ZuSMIrlHl3RrWMnFK1OqX/q8oXOAisDqFLVxL7xonw9yHk7Q5RoxpuyLdjI3wmhLzBwMqAY0ck4SGcCNeKIQqKOTF84RtxEu4BPgohc2QM467HSRjgqBL5mBDUPU1Rnl1JwqBNUuJqrW0M+OLdYuk8Cdas38Rf4b3FR0HP/nLdZNYaioKbxSVuA6ZGQfoNvNWlO6VvEKxW5O5yGbNc4ml7ZrUtCtLjgGMSdjop9Q+wMIT8GoXwKw79ZxrKUG9r+a8flMoyr5AA4ybwo1QgggYHpZJ6Ou3Ta5IpddvufwEsVWQ2xFisCI1Nypf6RMmsIql4JI0S8bFuSs9UvmCgikeh8b6i8C/KuKOYD+VShzGSwLsprRnByYYYoSqNhE8qCv/kYfxrYjT7jmuPIC+PBWsVsl1YRzBeE45qqWGtwjo1SR0WoZ8a7KAfYa5h7/2OVaPuF1gqtS83srclpi565IAP0c+b7wOz+wPZckOc3Jt0LC52oiXABx7y6VasGnfRYgiwwRAu9raGqPLXQmAGcADvvyN+m9bgXnP4i4E9wN8+KiJ5WQG5QilumnioJP9lwHPANKw/fF7A+fxJw2ms/y9SFdiPBf4Vn9hJNL8T/iFxbyoxgej+m6zBOtnLpXlvhiXcDOyVJV8UCEL4KnBI/OnAtBP0q+ADMTq/SfshrdUFr4TzwJdY9d57WIdYzRIk1GMdeXSQIUOGDBmSwUMtd8u2ArdcUAAAAABJRU5ErkJggg==";
@@ -798,14 +351,6 @@ var ImageData = new UniMap([
798
351
  ]);
799
352
  var getImageData = (asset) => ImageData.getOrDefault(asset, "");
800
353
  var ImageCache = new BiMap();
801
- function colorNameToRGBA(name, alpha = 1) {
802
- const hex = colorNameToCode(name).replace("#", "");
803
- const r = parseInt(hex.slice(0, 2), 16);
804
- const g = parseInt(hex.slice(2, 4), 16);
805
- const b = parseInt(hex.slice(4, 6), 16);
806
- const a = Math.round(alpha * 255);
807
- return [r, g, b, a];
808
- }
809
354
  function staffPosEquals(a, b) {
810
355
  if (!a && !b) return true;
811
356
  else if (!a || !b) return false;
@@ -827,6 +372,7 @@ var RenderContext = class {
827
372
  __publicField(this, "canvas");
828
373
  __publicField(this, "ctx");
829
374
  __publicField(this, "mdoc");
375
+ __publicField(this, "paint", Paint.default);
830
376
  __publicField(this, "cursorRect");
831
377
  __publicField(this, "mousePos");
832
378
  // Mouse coord in document space
@@ -879,12 +425,13 @@ var RenderContext = class {
879
425
  }
880
426
  onImageLoaded(data) {
881
427
  if (data.loaded || !data.img) return;
882
- if (data.colorized || data.color === "") {
428
+ const color = this.paint.getColor(data.color);
429
+ if (data.colorized || color === "" || color === "black" || color === "#000" || color === "#0000" || color === "#000000" || color === "#00000000") {
883
430
  this.forceDraw();
884
431
  data.loaded = true;
885
432
  return;
886
433
  }
887
- const [nr, ng, nb, na] = colorNameToRGBA(data.color);
434
+ const [nr, ng, nb, na] = Paint.colorNameToRGBA(color);
888
435
  const threshold = 40;
889
436
  if (typeof document === "undefined") {
890
437
  console.error("Failed to colorize image: document is undefined.");
@@ -934,6 +481,12 @@ var RenderContext = class {
934
481
  mdoc.getMusicObject().setRenderContext(this);
935
482
  }
936
483
  }
484
+ setPaint(paint) {
485
+ this.paint = paint != null ? paint : Paint.default;
486
+ }
487
+ getPaint() {
488
+ return this.paint;
489
+ }
937
490
  setCanvas(canvas) {
938
491
  var _a, _b;
939
492
  if (this.canvas !== canvas) {
@@ -1086,7 +639,7 @@ var RenderContext = class {
1086
639
  if (!staff) {
1087
640
  return;
1088
641
  }
1089
- this.fillColor(DocumentColor.HilightStaffPos);
642
+ this.fillColor(this.paint.colors["hilight.staffpos"]);
1090
643
  this.fillRect(staff.row.getRect().left, staff.getDiatonicIdY(diatonicId) - unitSize, staff.row.getRect().width, 2 * unitSize);
1091
644
  if (mousePos !== void 0) {
1092
645
  this.drawLedgerLines(staff, diatonicId, mousePos.x);
@@ -1098,13 +651,13 @@ var RenderContext = class {
1098
651
  return;
1099
652
  }
1100
653
  let rect = hilightedObj.getRect();
1101
- this.lineColor(DocumentColor.HilightObject);
654
+ this.lineColor(this.paint.colors["hilight.object"]);
1102
655
  this.strokeRect(rect.left, rect.top, rect.width, rect.height);
1103
656
  }
1104
657
  drawPlayCursor() {
1105
658
  let { cursorRect: r } = this;
1106
659
  if (r) {
1107
- this.color(DocumentColor.PlayCursor).lineWidth(2).strokeLine(r.centerX, r.top, r.centerX, r.bottom);
660
+ this.color(this.paint.colors["play.cursor"]).lineWidth(2).strokeLine(r.centerX, r.top, r.centerX, r.bottom);
1108
661
  }
1109
662
  }
1110
663
  txFromScreenCoord(screenCoord) {
@@ -1115,7 +668,7 @@ var RenderContext = class {
1115
668
  }
1116
669
  clearCanvas() {
1117
670
  if (this.ctx) {
1118
- this.ctx.canvas.style.background = DocumentColor.Background;
671
+ this.ctx.canvas.style.background = this.getPaint().colors["background"];
1119
672
  this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
1120
673
  }
1121
674
  }
@@ -1259,15 +812,16 @@ var RenderContext = class {
1259
812
  this.stroke();
1260
813
  }
1261
814
  color(color) {
1262
- if (this.ctx) this.ctx.strokeStyle = this.ctx.fillStyle = color;
815
+ if (this.ctx)
816
+ this.ctx.strokeStyle = this.ctx.fillStyle = this.paint.getColor(color);
1263
817
  return this;
1264
818
  }
1265
819
  lineColor(color) {
1266
- if (this.ctx) this.ctx.strokeStyle = color;
820
+ if (this.ctx) this.ctx.strokeStyle = this.paint.getColor(color);
1267
821
  return this;
1268
822
  }
1269
823
  fillColor(color) {
1270
- if (this.ctx) this.ctx.fillStyle = color;
824
+ if (this.ctx) this.ctx.fillStyle = this.paint.getColor(color);
1271
825
  return this;
1272
826
  }
1273
827
  lineWidth(lineWidth) {
@@ -1735,7 +1289,7 @@ var ObjStaffSignature = class extends MusicObject {
1735
1289
  }
1736
1290
  updateClefImage(ctx, showClef) {
1737
1291
  if (showClef) {
1738
- let color = DocumentColor.Staff_Signature_Clef;
1292
+ let color = ctx.getPaint().getColor(colorKey("staff.signature.clef"));
1739
1293
  if (["black", "#000", "#000000"].includes(color))
1740
1294
  color = "";
1741
1295
  let img = ctx.getImageAsset(this.staff.clefImageAsset, color);
@@ -1747,7 +1301,7 @@ var ObjStaffSignature = class extends MusicObject {
1747
1301
  }
1748
1302
  updateMeasureNumber(showMeasureNumber) {
1749
1303
  if (showMeasureNumber) {
1750
- let color = DocumentColor.Staff_Signature_MeasureNum;
1304
+ let color = colorKey("staff.signature.measurenum");
1751
1305
  let text = this.measure.getMeasureNumber().toString();
1752
1306
  this.measureNumber = new ObjText(this, { text, color }, 0, 1);
1753
1307
  } else {
@@ -1757,7 +1311,7 @@ var ObjStaffSignature = class extends MusicObject {
1757
1311
  updateKeySignature(showKeySignature) {
1758
1312
  if (showKeySignature) {
1759
1313
  let { measure } = this;
1760
- let color = DocumentColor.Staff_Signature_Key;
1314
+ let color = colorKey("staff.signature.key");
1761
1315
  let prevMeasure = measure.getPrevMeasure();
1762
1316
  let prevKeySignature = prevMeasure ? prevMeasure.getKeySignature() : void 0;
1763
1317
  let newKeySignature = measure.getKeySignature();
@@ -1779,7 +1333,7 @@ var ObjStaffSignature = class extends MusicObject {
1779
1333
  updateTimeSignature(showTimeSignature) {
1780
1334
  if (showTimeSignature) {
1781
1335
  let timeSignature = this.measure.getTimeSignature();
1782
- let color = DocumentColor.Staff_Signature_Time;
1336
+ let color = colorKey("staff.signature.time");
1783
1337
  let beatCount = timeSignature.beatCount.toString();
1784
1338
  this.beatCountText = new ObjText(this, { text: beatCount, color, scale: 1.4 }, 0.5, 0.5);
1785
1339
  let beatSize = timeSignature.beatSize.toString();
@@ -1790,7 +1344,7 @@ var ObjStaffSignature = class extends MusicObject {
1790
1344
  }
1791
1345
  updateTempo(showTempo) {
1792
1346
  if (showTempo) {
1793
- let color = DocumentColor.Staff_Signature_Tempo;
1347
+ let color = colorKey("staff.signature.tempo");
1794
1348
  let text = getTempoString(this.measure.getTempo());
1795
1349
  this.tempoText = new ObjText(this, { text, color }, 0.5, 1);
1796
1350
  } else {
@@ -2002,7 +1556,7 @@ var ObjTabSignature = class extends MusicObject {
2002
1556
  }
2003
1557
  updateMeasureNumber(showMeasureNumber) {
2004
1558
  if (showMeasureNumber) {
2005
- let color = DocumentColor.Tab_Signature_MeasureNum;
1559
+ let color = colorKey("tab.signature.measurenum");
2006
1560
  let text = this.measure.getMeasureNumber().toString();
2007
1561
  this.measureNumber = new ObjText(this, { text, color }, 0, 1);
2008
1562
  } else {
@@ -2012,7 +1566,7 @@ var ObjTabSignature = class extends MusicObject {
2012
1566
  updateTimeSignature(showTimeSignature) {
2013
1567
  if (showTimeSignature) {
2014
1568
  let timeSignature = this.measure.getTimeSignature();
2015
- let color = DocumentColor.Tab_Signature_Time;
1569
+ let color = colorKey("tab.signature.time");
2016
1570
  let beatCount = timeSignature.beatCount.toString();
2017
1571
  this.beatCountText = new ObjText(this, { text: beatCount, color, scale: 1.4 }, 0.5, 0.5);
2018
1572
  let beatSize = timeSignature.beatSize.toString();
@@ -2023,7 +1577,7 @@ var ObjTabSignature = class extends MusicObject {
2023
1577
  }
2024
1578
  updateTempo(showTempo) {
2025
1579
  if (showTempo) {
2026
- let color = DocumentColor.Tab_Signature_Tempo;
1580
+ let color = colorKey("tab.signature.tempo");
2027
1581
  let text = getTempoString(this.measure.getTempo());
2028
1582
  this.tempoText = new ObjText(this, { text, color }, 0, 1);
2029
1583
  } else {
@@ -2256,7 +1810,7 @@ var _ObjRest = class _ObjRest extends MusicObject {
2256
1810
  }
2257
1811
  this.runningDiatonicId = this.setDiatonicId;
2258
1812
  this.runningStemDir = "up" /* Up */;
2259
- this.color = (_c = options == null ? void 0 : options.color) != null ? _c : DocumentColor.Staff_Rest;
1813
+ this.color = (_c = options == null ? void 0 : options.color) != null ? _c : colorKey("staff.rest");
2260
1814
  this.hide = (_d = options == null ? void 0 : options.hide) != null ? _d : false;
2261
1815
  this.oldStyleTriplet = tupletRatio === void 0 && NoteLengthProps2.get(noteLength).isTriplet;
2262
1816
  this.rhythmProps = RhythmProps2.get(noteLength, void 0, (tupletRatio != null ? tupletRatio : this.oldStyleTriplet) ? Tuplet.Triplet : void 0);
@@ -2572,7 +2126,7 @@ var ObjNoteGroup = class _ObjNoteGroup extends MusicObject {
2572
2126
  this.runningDiatonicId = this.setDiatonicId;
2573
2127
  this.runningStemDir = "up" /* Up */;
2574
2128
  this.runningStringNumbers = [];
2575
- this.color = (_a = options == null ? void 0 : options.color) != null ? _a : DocumentColor.Staff_Note;
2129
+ this.color = (_a = options == null ? void 0 : options.color) != null ? _a : colorKey("staff.note");
2576
2130
  this.staccato = (_b = options == null ? void 0 : options.staccato) != null ? _b : false;
2577
2131
  this.diamond = (_c = options == null ? void 0 : options.diamond) != null ? _c : false;
2578
2132
  this.arpeggio = getArpeggio(options == null ? void 0 : options.arpeggio);
@@ -2956,8 +2510,8 @@ var ObjNoteGroup = class _ObjNoteGroup extends MusicObject {
2956
2510
  return;
2957
2511
  }
2958
2512
  let obj = new ObjTabNoteGroup(tab, this);
2959
- const bgcolor = DocumentColor.Background;
2960
- const color = DocumentColor.Tab_Note;
2513
+ const bgcolor = colorKey("background");
2514
+ const color = colorKey("tab.note");
2961
2515
  this.notes.forEach((note, noteIndex) => {
2962
2516
  let stringNumber = this.runningStringNumbers[noteIndex];
2963
2517
  if (guard_exports.isIntegerBetween(stringNumber, 1, 6)) {
@@ -3421,7 +2975,7 @@ var ObjRhythmColumn = class extends MusicObject {
3421
2975
  this.rect.offsetInPlace(dx, dy);
3422
2976
  }
3423
2977
  draw(ctx) {
3424
- ctx.color(DocumentColor.Staff_Frame);
2978
+ ctx.color(colorKey("staff.frame"));
3425
2979
  this.row.getStaves().forEach((staff) => {
3426
2980
  let minDiatonicId = this.staffMinDiatonicId.get(staff);
3427
2981
  let maxDiatonicId = this.staffMaxDiatonicId.get(staff);
@@ -5168,10 +4722,8 @@ var ObjConnective = class extends MusicObject {
5168
4722
  ctx.drawDebugRect(rect);
5169
4723
  let t = _lineWidth * 1.5;
5170
4724
  let s = _lineWidth * 0.25;
4725
+ ctx.color(this.line instanceof ObjTab ? colorKey("tab.connective") : colorKey("staff.connective"));
5171
4726
  ctx.lineWidth(1);
5172
- ctx.color(
5173
- this.line instanceof ObjTab ? DocumentColor.Tab_Connective : DocumentColor.Staff_Connective
5174
- );
5175
4727
  if (this.arcHeight === 0) {
5176
4728
  ctx.beginPath();
5177
4729
  ctx.moveTo(this.lx, this.ly);
@@ -5470,7 +5022,7 @@ var ObjTabRhythm = class extends MusicObject {
5470
5022
  let colX = sym.col.getRect().anchorX;
5471
5023
  if (sym instanceof ObjNoteGroup) {
5472
5024
  ctx.lineWidth(1);
5473
- ctx.color(DocumentColor.Tab_Note);
5025
+ ctx.color(colorKey("tab.note"));
5474
5026
  if (sym.rhythmProps.noteSize >= 2) {
5475
5027
  ctx.lineWidth(sym.rhythmProps.noteSize === 4 ? 2 : 1);
5476
5028
  ctx.strokeLine(colX, stemBottom, colX, stemTop);
@@ -5485,7 +5037,7 @@ var ObjTabRhythm = class extends MusicObject {
5485
5037
  }
5486
5038
  } else if (sym instanceof ObjRest) {
5487
5039
  ctx.lineWidth(1);
5488
- ctx.color(DocumentColor.Tab_Rest);
5040
+ ctx.color(colorKey("tab.rest"));
5489
5041
  let cx = colX;
5490
5042
  let cy = (stemTop + stemBottom) / 2;
5491
5043
  let scale = 0.65;
@@ -5506,7 +5058,7 @@ var ObjTabRhythm = class extends MusicObject {
5506
5058
  let leftBeamCount = left.hasTuplet() ? 1 : left instanceof ObjNoteGroup ? left.getRightBeamCount() : 1;
5507
5059
  let rightBeamCount = right.hasTuplet() ? 1 : right instanceof ObjNoteGroup ? right.getLeftBeamCount() : 1;
5508
5060
  let maxBeamCount = Math.max(leftBeamCount, rightBeamCount);
5509
- ctx.color(DocumentColor.Tab_Note);
5061
+ ctx.color(colorKey("tab.note"));
5510
5062
  ctx.lineWidth(2);
5511
5063
  for (let i = 0; i < maxBeamCount; i++) {
5512
5064
  let leftT = rightBeamCount > leftBeamCount && i >= leftBeamCount ? 0.75 : 0;
@@ -5522,7 +5074,7 @@ var ObjTabRhythm = class extends MusicObject {
5522
5074
  }
5523
5075
  }
5524
5076
  if (beamGroup && beamGroup.isTuplet()) {
5525
- ctx.color(DocumentColor.Tab_Note);
5077
+ ctx.color(colorKey("tab.note"));
5526
5078
  let cx = (symbols[0].col.getRect().anchorX + symbols[symbols.length - 1].col.getRect().anchorX) / 2;
5527
5079
  let text = beamGroup.getTupletRatioText();
5528
5080
  let textObj = this.tupletPartsTextObjMap.get(text);
@@ -6008,7 +5560,7 @@ var ObjMeasure = class extends MusicObject {
6008
5560
  throw new MusicError11(MusicErrorType11.Score, "Cannot add Fermata because anchor is undefined.");
6009
5561
  }
6010
5562
  this.forEachStaffGroup(staffTabOrGroups, 0 /* Above */, (line, vpos) => {
6011
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Fermata : DocumentColor.Tab_Element_Fermata;
5563
+ const color = line instanceof ObjTab ? colorKey("staff.element.fermata") : colorKey("tab.element.fermata");
6012
5564
  this.addLayoutObject(new ObjFermata(anchor, vpos, color), line, 1 /* Fermata */, vpos);
6013
5565
  });
6014
5566
  this.disableExtension();
@@ -6028,7 +5580,7 @@ var ObjMeasure = class extends MusicObject {
6028
5580
  let passages = args;
6029
5581
  addLayoutObjectProps = {
6030
5582
  createObj: (line) => {
6031
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Navigation : DocumentColor.Tab_Element_Navigation;
5583
+ const color = line instanceof ObjTab ? colorKey("staff.element.navigation") : colorKey("tab.element.navigation");
6032
5584
  return new ObjEnding(anchor, color, passages);
6033
5585
  },
6034
5586
  layoutGroupId: 4 /* Ending */,
@@ -6043,7 +5595,7 @@ var ObjMeasure = class extends MusicObject {
6043
5595
  let text = getNavigationString(navigation);
6044
5596
  addLayoutObjectProps = {
6045
5597
  createObj: (line) => {
6046
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Navigation : DocumentColor.Tab_Element_Navigation;
5598
+ const color = line instanceof ObjTab ? colorKey("staff.element.navigation") : colorKey("tab.element.navigation");
6047
5599
  return new ObjText(anchor2, { text, color }, 1, 1);
6048
5600
  },
6049
5601
  layoutGroupId: 3 /* Navigation */,
@@ -6058,7 +5610,7 @@ var ObjMeasure = class extends MusicObject {
6058
5610
  let text = getNavigationString(navigation);
6059
5611
  addLayoutObjectProps = {
6060
5612
  createObj: (line) => {
6061
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Navigation : DocumentColor.Tab_Element_Navigation;
5613
+ const color = line instanceof ObjTab ? colorKey("staff.element.navigation") : colorKey("tab.element.navigation");
6062
5614
  return new ObjText(anchor2, { text, color }, 1, 1);
6063
5615
  },
6064
5616
  layoutGroupId: 3 /* Navigation */,
@@ -6072,7 +5624,7 @@ var ObjMeasure = class extends MusicObject {
6072
5624
  let text = getNavigationString(navigation);
6073
5625
  addLayoutObjectProps = {
6074
5626
  createObj: (line) => {
6075
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Navigation : DocumentColor.Tab_Element_Navigation;
5627
+ const color = line instanceof ObjTab ? colorKey("staff.element.navigation") : colorKey("tab.element.navigation");
6076
5628
  return new ObjSpecialText(anchor2, text, color);
6077
5629
  },
6078
5630
  layoutGroupId: 3 /* Navigation */,
@@ -6085,7 +5637,7 @@ var ObjMeasure = class extends MusicObject {
6085
5637
  let text = getNavigationString(navigation);
6086
5638
  addLayoutObjectProps = {
6087
5639
  createObj: (line) => {
6088
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Navigation : DocumentColor.Tab_Element_Navigation;
5640
+ const color = line instanceof ObjTab ? colorKey("staff.element.navigation") : colorKey("tab.element.navigation");
6089
5641
  return new ObjSpecialText(anchor2, text, color);
6090
5642
  },
6091
5643
  layoutGroupId: 3 /* Navigation */,
@@ -6106,7 +5658,7 @@ var ObjMeasure = class extends MusicObject {
6106
5658
  const textProps = {
6107
5659
  text,
6108
5660
  scale: 0.8,
6109
- color: DocumentColor.Staff_Frame
5661
+ color: colorKey("staff.frame")
6110
5662
  };
6111
5663
  this.endRepeatPlayCountText = new ObjText(this, textProps, 0.5, 1);
6112
5664
  }
@@ -6152,7 +5704,7 @@ var ObjMeasure = class extends MusicObject {
6152
5704
  const anchorY = getExtensionAnchorY(linePos);
6153
5705
  this.disableExtension();
6154
5706
  this.forEachStaffGroup(staffTabOrGroups, defaultVerticalPos, (line, vpos) => {
6155
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Annotation : DocumentColor.Tab_Element_Annotation;
5707
+ const color = line instanceof ObjTab ? colorKey("tab.element.annotation") : colorKey("staff.element.annotation");
6156
5708
  textProps.color = color;
6157
5709
  let textObj = new ObjText(anchor, textProps, anchorX, anchorY);
6158
5710
  const layoutObj = this.addLayoutObject(textObj, line, layoutGroupId, vpos);
@@ -6181,7 +5733,7 @@ var ObjMeasure = class extends MusicObject {
6181
5733
  }
6182
5734
  this.disableExtension();
6183
5735
  this.forEachStaffGroup(staffTabOrGroups, defaultVerticalPos, (line, vpos) => {
6184
- const color = line instanceof ObjTab ? DocumentColor.Staff_Element_Label : DocumentColor.Tab_Element_Label;
5736
+ const color = line instanceof ObjTab ? colorKey("staff.element.label") : colorKey("tab.element.label");
6185
5737
  textProps.color = color;
6186
5738
  let textObj = new ObjText(anchor, textProps, 0.5, 1);
6187
5739
  const layoutObj = this.addLayoutObject(textObj, line, layoutGroupId, vpos);
@@ -6627,8 +6179,7 @@ var ObjMeasure = class extends MusicObject {
6627
6179
  this.row.getTabs().forEach((tab) => {
6628
6180
  for (let stringId = 0; stringId < 6; stringId++) {
6629
6181
  let note = tab.getTuningStrings()[stringId].format(PitchNotation.Helmholtz, SymbolSet.Unicode);
6630
- let color = DocumentColor.Tab_Tuning;
6631
- let obj = new ObjText(this, { text: note, scale: 0.8, color }, 1, 0.5);
6182
+ let obj = new ObjText(this, { text: note, scale: 0.8, color: colorKey("tab.tuning") }, 1, 0.5);
6632
6183
  obj.layout(ctx);
6633
6184
  obj.setRight(this.regions.tabTuning_0 * 0.8);
6634
6185
  obj.setCenterY(tab.getStringY(stringId));
@@ -6651,7 +6202,7 @@ var ObjMeasure = class extends MusicObject {
6651
6202
  this.regions.padding_3 = padding;
6652
6203
  this.regions.columnsMin_4 = Math.max(
6653
6204
  DocumentSettings.MinColumnsWidth * unitSize,
6654
- this.columns.map((col) => col.getRect().width).reduce((acc, cur) => acc + cur)
6205
+ this.columns.map((col) => col.getRect().width).reduce((acc, cur) => acc + cur, 0)
6655
6206
  );
6656
6207
  this.regions.padding_5 = padding;
6657
6208
  this.regions.rightBarLine_6 = this.barLineRight.getRect().width;
@@ -6781,11 +6332,11 @@ var ObjMeasure = class extends MusicObject {
6781
6332
  this.row.getNotationLines().forEach((line) => {
6782
6333
  if (line instanceof ObjStaff) {
6783
6334
  for (let p = line.bottomLineDiatonicId; p <= line.topLineDiatonicId; p += 2) {
6784
- drawLine(line.getDiatonicIdY(p), DocumentColor.Staff_Frame);
6335
+ drawLine(line.getDiatonicIdY(p), colorKey("staff.frame"));
6785
6336
  }
6786
6337
  } else if (line instanceof ObjTab) {
6787
6338
  for (let stringId = 0; stringId < 6; stringId++) {
6788
- drawLine(line.getStringY(stringId), DocumentColor.Tab_Frame);
6339
+ drawLine(line.getStringY(stringId), colorKey("tab.frame"));
6789
6340
  }
6790
6341
  }
6791
6342
  });
@@ -6796,7 +6347,7 @@ var ObjMeasure = class extends MusicObject {
6796
6347
  const left2 = this.getStaffLineLeft();
6797
6348
  const top = tab.getTopLineY();
6798
6349
  const bottom = tab.getBottomLineY();
6799
- ctx.color(DocumentColor.Tab_Frame).lineWidth(1).strokeLine(left2, top, left2, bottom);
6350
+ ctx.color(colorKey("tab.frame")).lineWidth(1).strokeLine(left2, top, left2, bottom);
6800
6351
  });
6801
6352
  }
6802
6353
  this.signatures.forEach((signature) => signature.draw(ctx));
@@ -7031,7 +6582,7 @@ var ObjNotationLine6 = class extends MusicObject {
7031
6582
  }
7032
6583
  }
7033
6584
  drawVerticalLine(ctx, left, width, isSystemBarLine = false) {
7034
- ctx.color(this.getConfig().type === "tab" ? DocumentColor.Tab_Frame : DocumentColor.Staff_Frame);
6585
+ ctx.color(this.getConfig().type === "tab" ? colorKey("tab.frame") : colorKey("staff.frame"));
7035
6586
  const i = this.row.getNotationLines().indexOf(this);
7036
6587
  const nextLine = i >= 0 ? this.row.getNotationLines()[i + 1] : void 0;
7037
6588
  const isGroupLine = this.getRowGroup().lines.length > 1;
@@ -7324,7 +6875,7 @@ var ObjScoreRowGroup = class extends MusicObject {
7324
6875
  __publicField(this, "instrText");
7325
6876
  __publicField(this, "braceRect", new AnchoredRect());
7326
6877
  __publicField(this, "mi");
7327
- const color = DocumentColor.RowGroup_Instrument;
6878
+ const color = colorKey("rowgroup.instrument");
7328
6879
  const instr = parseInstr((_a = lines[0].getConfig().instrument) != null ? _a : "");
7329
6880
  this.instrument = instr.instrName;
7330
6881
  this.hasBrace = instr.hideBrace ? false : this.hasInstrument && lines.length >= 2;
@@ -7379,7 +6930,7 @@ var ObjScoreRowGroup = class extends MusicObject {
7379
6930
  this.instrText.draw(ctx);
7380
6931
  if (this.hasBrace) {
7381
6932
  const r = this.braceRect;
7382
- ctx.color(DocumentColor.RowGroup_Frame).lineWidth(1).drawBracket(r, "{");
6933
+ ctx.color(colorKey("rowgroup.frame")).lineWidth(1).drawBracket(r, "{");
7383
6934
  }
7384
6935
  }
7385
6936
  };
@@ -7757,12 +7308,9 @@ var ObjHeader = class extends MusicObject {
7757
7308
  __publicField(this, "arrangerText");
7758
7309
  __publicField(this, "mi");
7759
7310
  this.mi = new MHeader(this);
7760
- const titleColor = DocumentColor.Header_Title;
7761
- const compColor = DocumentColor.Header_Composer;
7762
- const arrColor = DocumentColor.Header_Arranger;
7763
- this.titleText = this.title ? new ObjText(this, { text: this.title, color: titleColor, scale: 2 }, 0.5, 0) : void 0;
7764
- this.composerText = this.composer ? new ObjText(this, { text: this.composer, color: compColor }, 1, 0) : void 0;
7765
- this.arrangerText = this.arranger ? new ObjText(this, { text: "Arr.: " + this.arranger, color: arrColor }, 1, 0) : void 0;
7311
+ this.titleText = this.title ? new ObjText(this, { text: this.title, color: colorKey("header.title"), scale: 2 }, 0.5, 0) : void 0;
7312
+ this.composerText = this.composer ? new ObjText(this, { text: this.composer, color: colorKey("header.composer") }, 1, 0) : void 0;
7313
+ this.arrangerText = this.arranger ? new ObjText(this, { text: "Arr.: " + this.arranger, color: colorKey("header.arranger") }, 1, 0) : void 0;
7766
7314
  }
7767
7315
  getMusicInterface() {
7768
7316
  return this.mi;
@@ -8263,6 +7811,7 @@ var _DocumentBuilder = class _DocumentBuilder {
8263
7811
  * @returns - Music document.
8264
7812
  */
8265
7813
  getDocument() {
7814
+ this.getMeasure();
8266
7815
  return this.doc.getMusicInterface();
8267
7816
  }
8268
7817
  /**
@@ -9719,58 +9268,599 @@ var MExtensionLine = _MExtensionLine;
9719
9268
 
9720
9269
  // src/score/pub/music-interface.ts
9721
9270
  import { MusicError as MusicError19, MusicErrorType as MusicErrorType19 } from "web-music-score/core";
9722
- function assertArg3(condition, argName, argValue) {
9723
- if (!condition) {
9724
- throw new MusicError19(MusicErrorType19.Score, `Invalid arg: ${argName} = ${argValue}`);
9725
- }
9726
- }
9727
- function require_t(t, message) {
9728
- if (t === void 0 || t === null) {
9729
- throw new TypeError(message);
9730
- } else {
9731
- return t;
9732
- }
9733
- }
9734
- var _MPlayer = class _MPlayer {
9735
- /**
9736
- * Create new music player.
9737
- * @param doc - Music document to play.
9738
- * @param playStateChangeListener - Play state change listener.
9739
- */
9740
- constructor(doc, playStateChangeListener) {
9741
- __publicField(this, "player");
9742
- assertArg3(doc instanceof MDocument2, "doc", doc);
9743
- assertArg3(guard_exports.isFunctionOrUndefined(playStateChangeListener), "playStateChangeListener", playStateChangeListener);
9744
- this.player = new Player();
9745
- this.player.setDocument(doc.getMusicObject());
9746
- this.player.setCursorPositionChangeListener((cursorRect) => {
9747
- doc.getMusicObject().updateCursorRect(cursorRect);
9748
- });
9749
- if (playStateChangeListener) {
9750
- this.player.setPlayStateChnageListener(playStateChangeListener);
9751
- }
9752
- }
9753
- /**
9754
- * Stop all playing.
9755
- */
9756
- static stopAll() {
9757
- this.currentlyPlaying.forEach((p) => p.stop());
9758
- Audio2.stop();
9759
- }
9760
- /**
9761
- * Playe attached document.
9762
- * @returns - This player instance.
9763
- */
9764
- play() {
9765
- _MPlayer.currentlyPlaying.add(this);
9766
- this.player.play();
9767
- return this;
9768
- }
9769
- /**
9770
- * Pause playback of attached document.
9771
- * @returns - This player instance.
9772
- */
9773
- pause() {
9271
+
9272
+ // node_modules/color-name-to-code/dist/color-name.enum.js
9273
+ var ColorName;
9274
+ (function(ColorName2) {
9275
+ ColorName2["AliceBlue"] = "aliceblue";
9276
+ ColorName2["AntiqueWhite"] = "antiquewhite";
9277
+ ColorName2["Aqua"] = "aqua";
9278
+ ColorName2["Aquamarine"] = "aquamarine";
9279
+ ColorName2["Azure"] = "azure";
9280
+ ColorName2["Beige"] = "beige";
9281
+ ColorName2["Bisque"] = "bisque";
9282
+ ColorName2["Black"] = "black";
9283
+ ColorName2["BlanchedAlmond"] = "blanchedalmond";
9284
+ ColorName2["Blue"] = "blue";
9285
+ ColorName2["BlueViolet"] = "blueviolet";
9286
+ ColorName2["Brown"] = "brown";
9287
+ ColorName2["BurlyWood"] = "burlywood";
9288
+ ColorName2["CadetBlue"] = "cadetblue";
9289
+ ColorName2["Chartreuse"] = "chartreuse";
9290
+ ColorName2["Chocolate"] = "chocolate";
9291
+ ColorName2["Coral"] = "coral";
9292
+ ColorName2["CornflowerBlue"] = "cornflowerblue";
9293
+ ColorName2["CornSilk"] = "cornsilk";
9294
+ ColorName2["Crimson"] = "crimson";
9295
+ ColorName2["Cyan"] = "cyan";
9296
+ ColorName2["DarkBlue"] = "darkblue";
9297
+ ColorName2["DarkCyan"] = "darkcyan";
9298
+ ColorName2["DarkGoldenRod"] = "darkgoldenrod";
9299
+ ColorName2["DarkGray"] = "darkgray";
9300
+ ColorName2["DarkGreen"] = "darkgreen";
9301
+ ColorName2["DarkGrey"] = "darkgrey";
9302
+ ColorName2["DarkKhaki"] = "darkkhaki";
9303
+ ColorName2["DarkMagenta"] = "darkmagenta";
9304
+ ColorName2["DarkOliveGreen"] = "darkolivegreen";
9305
+ ColorName2["DarkOrange"] = "darkorange";
9306
+ ColorName2["DarkOrchid"] = "darkorchid";
9307
+ ColorName2["DarkRed"] = "darkred";
9308
+ ColorName2["DarkSalmon"] = "darksalmon";
9309
+ ColorName2["DarkSeaGreen"] = "darkseagreen";
9310
+ ColorName2["DarkSlateBlue"] = "darkslateblue";
9311
+ ColorName2["DarkSlateGray"] = "darkslategray";
9312
+ ColorName2["DarkSlateGrey"] = "darkslategrey";
9313
+ ColorName2["DarkTurquoise"] = "darkturquoise";
9314
+ ColorName2["DarkViolet"] = "darkviolet";
9315
+ ColorName2["DeepPink"] = "deeppink";
9316
+ ColorName2["DeepSkyBlue"] = "deepskyblue";
9317
+ ColorName2["DimGray"] = "dimgray";
9318
+ ColorName2["DimGrey"] = "dimgrey";
9319
+ ColorName2["DodgerBlue"] = "dodgerblue";
9320
+ ColorName2["FireBrick"] = "firebrick";
9321
+ ColorName2["FloralWhite"] = "floralwhite";
9322
+ ColorName2["ForestGreen"] = "forestgreen";
9323
+ ColorName2["Fuchsia"] = "fuchsia";
9324
+ ColorName2["Gainsboro"] = "gainsboro";
9325
+ ColorName2["GhostWhite"] = "ghostwhite";
9326
+ ColorName2["Gold"] = "gold";
9327
+ ColorName2["GoldenRod"] = "goldenrod";
9328
+ ColorName2["Gray"] = "gray";
9329
+ ColorName2["Green"] = "green";
9330
+ ColorName2["GreenYellow"] = "greenyellow";
9331
+ ColorName2["Grey"] = "grey";
9332
+ ColorName2["Honeydew"] = "honeydew";
9333
+ ColorName2["HotPink"] = "hotpink";
9334
+ ColorName2["IndianRed"] = "indianred";
9335
+ ColorName2["Indigo"] = "indigo";
9336
+ ColorName2["Ivory"] = "ivory";
9337
+ ColorName2["Khaki"] = "khaki";
9338
+ ColorName2["Lavender"] = "lavender";
9339
+ ColorName2["LavenderBlush"] = "lavenderblush";
9340
+ ColorName2["LawnGreen"] = "lawngreen";
9341
+ ColorName2["LemonChiffon"] = "lemonchiffon";
9342
+ ColorName2["LightBlue"] = "lightblue";
9343
+ ColorName2["LightCoral"] = "lightcoral";
9344
+ ColorName2["LightCyan"] = "lightcyan";
9345
+ ColorName2["LightGoldenRodYellow"] = "lightgoldenrodyellow";
9346
+ ColorName2["LightGray"] = "lightgray";
9347
+ ColorName2["LightGreen"] = "lightgreen";
9348
+ ColorName2["LightGrey"] = "lightgrey";
9349
+ ColorName2["LightPink"] = "lightpink";
9350
+ ColorName2["LightSalmon"] = "lightsalmon";
9351
+ ColorName2["LightSeaGreen"] = "lightseagreen";
9352
+ ColorName2["LightSkyBlue"] = "lightskyblue";
9353
+ ColorName2["LightSlateGray"] = "lightslategray";
9354
+ ColorName2["LightSlateGrey"] = "lightslategrey";
9355
+ ColorName2["LightSteelBlue"] = "lightsteelblue";
9356
+ ColorName2["LightYellow"] = "lightyellow";
9357
+ ColorName2["Lime"] = "lime";
9358
+ ColorName2["LimeGreen"] = "limegreen";
9359
+ ColorName2["Linen"] = "linen";
9360
+ ColorName2["Magenta"] = "magenta";
9361
+ ColorName2["Maroon"] = "maroon";
9362
+ ColorName2["MediumAquamarine"] = "mediumaquamarine";
9363
+ ColorName2["MediumBlue"] = "mediumblue";
9364
+ ColorName2["MediumOrchid"] = "mediumorchid";
9365
+ ColorName2["MediumPurple"] = "mediumpurple";
9366
+ ColorName2["MediumSeaGreen"] = "mediumseagreen";
9367
+ ColorName2["MediumSlateBlue"] = "mediumslateblue";
9368
+ ColorName2["MediumSpringGreen"] = "mediumspringgreen";
9369
+ ColorName2["MediumTurquoise"] = "mediumturquoise";
9370
+ ColorName2["MediumVioletRed"] = "mediumvioletred";
9371
+ ColorName2["MidnightBlue"] = "midnightblue";
9372
+ ColorName2["MintCream"] = "mintcream";
9373
+ ColorName2["MistyRose"] = "mistyrose";
9374
+ ColorName2["Moccasin"] = "moccasin";
9375
+ ColorName2["NavajoWhite"] = "navajowhite";
9376
+ ColorName2["Navy"] = "navy";
9377
+ ColorName2["OldLace"] = "oldlace";
9378
+ ColorName2["Olive"] = "olive";
9379
+ ColorName2["OliveDrab"] = "olivedrab";
9380
+ ColorName2["Orange"] = "orange";
9381
+ ColorName2["OrangeRed"] = "orangered";
9382
+ ColorName2["Orchid"] = "orchid";
9383
+ ColorName2["PaleGoldenRod"] = "palegoldenrod";
9384
+ ColorName2["PaleGreen"] = "palegreen";
9385
+ ColorName2["PaleTurquoise"] = "paleturquoise";
9386
+ ColorName2["PaleVioletRed"] = "palevioletred";
9387
+ ColorName2["PapayaWhip"] = "papayawhip";
9388
+ ColorName2["PeachPuff"] = "peachpuff";
9389
+ ColorName2["Peru"] = "peru";
9390
+ ColorName2["Pink"] = "pink";
9391
+ ColorName2["Plum"] = "plum";
9392
+ ColorName2["PowderBlue"] = "powderblue";
9393
+ ColorName2["Purple"] = "purple";
9394
+ ColorName2["RebeccaPurple"] = "rebeccapurple";
9395
+ ColorName2["Red"] = "red";
9396
+ ColorName2["RosyBrown"] = "rosybrown";
9397
+ ColorName2["RoyalBlue"] = "royalblue";
9398
+ ColorName2["SaddleBrown"] = "saddlebrown";
9399
+ ColorName2["Salmon"] = "salmon";
9400
+ ColorName2["SandyBrown"] = "sandybrown";
9401
+ ColorName2["SeaGreen"] = "seagreen";
9402
+ ColorName2["SeaShell"] = "seashell";
9403
+ ColorName2["Sienna"] = "sienna";
9404
+ ColorName2["Silver"] = "silver";
9405
+ ColorName2["SkyBlue"] = "skyblue";
9406
+ ColorName2["SlateBlue"] = "slateblue";
9407
+ ColorName2["SlateGray"] = "slategray";
9408
+ ColorName2["SlateGrey"] = "slategrey";
9409
+ ColorName2["Snow"] = "snow";
9410
+ ColorName2["SpringGreen"] = "springgreen";
9411
+ ColorName2["SteelBlue"] = "steelblue";
9412
+ ColorName2["Tan"] = "tan";
9413
+ ColorName2["Teal"] = "teal";
9414
+ ColorName2["Thistle"] = "thistle";
9415
+ ColorName2["Tomato"] = "tomato";
9416
+ ColorName2["Turquoise"] = "turquoise";
9417
+ ColorName2["Violet"] = "violet";
9418
+ ColorName2["Wheat"] = "wheat";
9419
+ ColorName2["White"] = "white";
9420
+ ColorName2["WhiteSmoke"] = "whitesmoke";
9421
+ ColorName2["Yellow"] = "yellow";
9422
+ ColorName2["YellowGreen"] = "yellowgreen";
9423
+ })(ColorName = ColorName || (ColorName = {}));
9424
+
9425
+ // node_modules/color-name-to-code/dist/color-code-format.enum.js
9426
+ var ColorCodeFormat;
9427
+ (function(ColorCodeFormat2) {
9428
+ ColorCodeFormat2["Hex"] = "hex";
9429
+ ColorCodeFormat2["RGB"] = "rgb";
9430
+ ColorCodeFormat2["Array"] = "array";
9431
+ })(ColorCodeFormat = ColorCodeFormat || (ColorCodeFormat = {}));
9432
+
9433
+ // node_modules/color-name/index.js
9434
+ var colors = {
9435
+ aliceblue: [240, 248, 255],
9436
+ antiquewhite: [250, 235, 215],
9437
+ aqua: [0, 255, 255],
9438
+ aquamarine: [127, 255, 212],
9439
+ azure: [240, 255, 255],
9440
+ beige: [245, 245, 220],
9441
+ bisque: [255, 228, 196],
9442
+ black: [0, 0, 0],
9443
+ blanchedalmond: [255, 235, 205],
9444
+ blue: [0, 0, 255],
9445
+ blueviolet: [138, 43, 226],
9446
+ brown: [165, 42, 42],
9447
+ burlywood: [222, 184, 135],
9448
+ cadetblue: [95, 158, 160],
9449
+ chartreuse: [127, 255, 0],
9450
+ chocolate: [210, 105, 30],
9451
+ coral: [255, 127, 80],
9452
+ cornflowerblue: [100, 149, 237],
9453
+ cornsilk: [255, 248, 220],
9454
+ crimson: [220, 20, 60],
9455
+ cyan: [0, 255, 255],
9456
+ darkblue: [0, 0, 139],
9457
+ darkcyan: [0, 139, 139],
9458
+ darkgoldenrod: [184, 134, 11],
9459
+ darkgray: [169, 169, 169],
9460
+ darkgreen: [0, 100, 0],
9461
+ darkgrey: [169, 169, 169],
9462
+ darkkhaki: [189, 183, 107],
9463
+ darkmagenta: [139, 0, 139],
9464
+ darkolivegreen: [85, 107, 47],
9465
+ darkorange: [255, 140, 0],
9466
+ darkorchid: [153, 50, 204],
9467
+ darkred: [139, 0, 0],
9468
+ darksalmon: [233, 150, 122],
9469
+ darkseagreen: [143, 188, 143],
9470
+ darkslateblue: [72, 61, 139],
9471
+ darkslategray: [47, 79, 79],
9472
+ darkslategrey: [47, 79, 79],
9473
+ darkturquoise: [0, 206, 209],
9474
+ darkviolet: [148, 0, 211],
9475
+ deeppink: [255, 20, 147],
9476
+ deepskyblue: [0, 191, 255],
9477
+ dimgray: [105, 105, 105],
9478
+ dimgrey: [105, 105, 105],
9479
+ dodgerblue: [30, 144, 255],
9480
+ firebrick: [178, 34, 34],
9481
+ floralwhite: [255, 250, 240],
9482
+ forestgreen: [34, 139, 34],
9483
+ fuchsia: [255, 0, 255],
9484
+ gainsboro: [220, 220, 220],
9485
+ ghostwhite: [248, 248, 255],
9486
+ gold: [255, 215, 0],
9487
+ goldenrod: [218, 165, 32],
9488
+ gray: [128, 128, 128],
9489
+ green: [0, 128, 0],
9490
+ greenyellow: [173, 255, 47],
9491
+ grey: [128, 128, 128],
9492
+ honeydew: [240, 255, 240],
9493
+ hotpink: [255, 105, 180],
9494
+ indianred: [205, 92, 92],
9495
+ indigo: [75, 0, 130],
9496
+ ivory: [255, 255, 240],
9497
+ khaki: [240, 230, 140],
9498
+ lavender: [230, 230, 250],
9499
+ lavenderblush: [255, 240, 245],
9500
+ lawngreen: [124, 252, 0],
9501
+ lemonchiffon: [255, 250, 205],
9502
+ lightblue: [173, 216, 230],
9503
+ lightcoral: [240, 128, 128],
9504
+ lightcyan: [224, 255, 255],
9505
+ lightgoldenrodyellow: [250, 250, 210],
9506
+ lightgray: [211, 211, 211],
9507
+ lightgreen: [144, 238, 144],
9508
+ lightgrey: [211, 211, 211],
9509
+ lightpink: [255, 182, 193],
9510
+ lightsalmon: [255, 160, 122],
9511
+ lightseagreen: [32, 178, 170],
9512
+ lightskyblue: [135, 206, 250],
9513
+ lightslategray: [119, 136, 153],
9514
+ lightslategrey: [119, 136, 153],
9515
+ lightsteelblue: [176, 196, 222],
9516
+ lightyellow: [255, 255, 224],
9517
+ lime: [0, 255, 0],
9518
+ limegreen: [50, 205, 50],
9519
+ linen: [250, 240, 230],
9520
+ magenta: [255, 0, 255],
9521
+ maroon: [128, 0, 0],
9522
+ mediumaquamarine: [102, 205, 170],
9523
+ mediumblue: [0, 0, 205],
9524
+ mediumorchid: [186, 85, 211],
9525
+ mediumpurple: [147, 112, 219],
9526
+ mediumseagreen: [60, 179, 113],
9527
+ mediumslateblue: [123, 104, 238],
9528
+ mediumspringgreen: [0, 250, 154],
9529
+ mediumturquoise: [72, 209, 204],
9530
+ mediumvioletred: [199, 21, 133],
9531
+ midnightblue: [25, 25, 112],
9532
+ mintcream: [245, 255, 250],
9533
+ mistyrose: [255, 228, 225],
9534
+ moccasin: [255, 228, 181],
9535
+ navajowhite: [255, 222, 173],
9536
+ navy: [0, 0, 128],
9537
+ oldlace: [253, 245, 230],
9538
+ olive: [128, 128, 0],
9539
+ olivedrab: [107, 142, 35],
9540
+ orange: [255, 165, 0],
9541
+ orangered: [255, 69, 0],
9542
+ orchid: [218, 112, 214],
9543
+ palegoldenrod: [238, 232, 170],
9544
+ palegreen: [152, 251, 152],
9545
+ paleturquoise: [175, 238, 238],
9546
+ palevioletred: [219, 112, 147],
9547
+ papayawhip: [255, 239, 213],
9548
+ peachpuff: [255, 218, 185],
9549
+ peru: [205, 133, 63],
9550
+ pink: [255, 192, 203],
9551
+ plum: [221, 160, 221],
9552
+ powderblue: [176, 224, 230],
9553
+ purple: [128, 0, 128],
9554
+ rebeccapurple: [102, 51, 153],
9555
+ red: [255, 0, 0],
9556
+ rosybrown: [188, 143, 143],
9557
+ royalblue: [65, 105, 225],
9558
+ saddlebrown: [139, 69, 19],
9559
+ salmon: [250, 128, 114],
9560
+ sandybrown: [244, 164, 96],
9561
+ seagreen: [46, 139, 87],
9562
+ seashell: [255, 245, 238],
9563
+ sienna: [160, 82, 45],
9564
+ silver: [192, 192, 192],
9565
+ skyblue: [135, 206, 235],
9566
+ slateblue: [106, 90, 205],
9567
+ slategray: [112, 128, 144],
9568
+ slategrey: [112, 128, 144],
9569
+ snow: [255, 250, 250],
9570
+ springgreen: [0, 255, 127],
9571
+ steelblue: [70, 130, 180],
9572
+ tan: [210, 180, 140],
9573
+ teal: [0, 128, 128],
9574
+ thistle: [216, 191, 216],
9575
+ tomato: [255, 99, 71],
9576
+ turquoise: [64, 224, 208],
9577
+ violet: [238, 130, 238],
9578
+ wheat: [245, 222, 179],
9579
+ white: [255, 255, 255],
9580
+ whitesmoke: [245, 245, 245],
9581
+ yellow: [255, 255, 0],
9582
+ yellowgreen: [154, 205, 50]
9583
+ };
9584
+ for (const key in colors) Object.freeze(colors[key]);
9585
+ var color_name_default = Object.freeze(colors);
9586
+
9587
+ // node_modules/color-name-to-code/dist/color-names.js
9588
+ var colorNames = color_name_default;
9589
+
9590
+ // node_modules/color-name-to-code/dist/color-array-to-hex.js
9591
+ var colorArrayToHexDefaultOptions = {
9592
+ hash: true,
9593
+ lowercase: false,
9594
+ short: false
9595
+ };
9596
+ function colorArrayToHex(arr, partialOptions) {
9597
+ const options = __spreadValues(__spreadValues({}, colorArrayToHexDefaultOptions), partialOptions);
9598
+ const { hash, lowercase, short } = options;
9599
+ let hex = arr.map((num) => {
9600
+ let str = num.toString(16);
9601
+ str = str.length === 1 ? `0${str}` : str;
9602
+ return str;
9603
+ }).join("");
9604
+ if (short) {
9605
+ const chars = [...hex];
9606
+ if (chars[0] === chars[1] && chars[2] === chars[3] && chars[4] === chars[5]) {
9607
+ hex = `${chars[0]}${chars[2]}${chars[4]}`;
9608
+ }
9609
+ }
9610
+ hex = lowercase ? hex.toLowerCase() : hex.toUpperCase();
9611
+ if (hash) {
9612
+ hex = `#${hex}`;
9613
+ }
9614
+ return hex;
9615
+ }
9616
+
9617
+ // node_modules/color-name-to-code/dist/color-array-to-rgb.js
9618
+ function colorArrayToRGB(arr, alpha = 1) {
9619
+ alpha = Math.min(1, Math.max(0, alpha));
9620
+ if (alpha < 1) {
9621
+ return `rgba(${arr[0]}, ${arr[1]}, ${arr[2]}, ${alpha})`;
9622
+ }
9623
+ return `rgb(${arr[0]}, ${arr[1]}, ${arr[2]})`;
9624
+ }
9625
+
9626
+ // node_modules/color-name-to-code/dist/color-name-to-code.js
9627
+ var colorNameToCodeDefaultOptions = __spreadProps(__spreadValues({}, colorArrayToHexDefaultOptions), {
9628
+ fallback: true,
9629
+ alpha: 1,
9630
+ format: ColorCodeFormat.Hex
9631
+ });
9632
+ function colorNameToCode(value, partialOptions = {}) {
9633
+ const options = __spreadValues(__spreadValues({}, colorNameToCodeDefaultOptions), partialOptions);
9634
+ const { fallback, format, hash, lowercase, short, alpha } = options;
9635
+ value = `${value}`;
9636
+ const colorName = value.toLowerCase().replaceAll(/[^a-z]/g, "");
9637
+ let colorArray = colorNames[colorName];
9638
+ if (!colorArray) {
9639
+ if (!fallback) {
9640
+ throw new Error(`no matching color found for '${value}'`);
9641
+ }
9642
+ const hex = value.toLowerCase().replaceAll(/[^\da-f]/g, "");
9643
+ colorArray = (hex.length <= 3 ? [hex.slice(0, 1).repeat(2), hex.slice(1, 2).repeat(2), hex.slice(2, 3).repeat(2)] : [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)]).map((str) => Number.parseInt(str.length < 2 ? `${"0".repeat(2 - str.length)}${str}` : str, 16));
9644
+ }
9645
+ switch (format) {
9646
+ case ColorCodeFormat.Array: {
9647
+ return [...colorArray];
9648
+ }
9649
+ case ColorCodeFormat.RGB: {
9650
+ return colorArrayToRGB(colorArray, alpha);
9651
+ }
9652
+ default: {
9653
+ return colorArrayToHex(colorArray, { hash, lowercase, short });
9654
+ }
9655
+ }
9656
+ }
9657
+
9658
+ // src/score/pub/paint.ts
9659
+ var norm = (s) => s.toLowerCase();
9660
+ function colorKey(colorKey2) {
9661
+ return colorKey2;
9662
+ }
9663
+ var _Paint = class _Paint {
9664
+ constructor() {
9665
+ __publicField(this, "colors", {
9666
+ "hilight.staffpos": "#55cc55",
9667
+ "hilight.object": "#55cc55",
9668
+ "play.cursor": "#44aa44",
9669
+ "background": "white",
9670
+ "header.title": "black",
9671
+ "header.composer": "black",
9672
+ "header.arranger": "black",
9673
+ "rowgroup.instrument": "black",
9674
+ "rowgroup.frame": "black",
9675
+ "staff.frame": "black",
9676
+ "staff.note": "black",
9677
+ "staff.rest": "black",
9678
+ "staff.lyrics": "black",
9679
+ "staff.connective": "black",
9680
+ "staff.signature.clef": "black",
9681
+ "staff.signature.key": "black",
9682
+ "staff.signature.time": "black",
9683
+ "staff.signature.tempo": "black",
9684
+ "staff.signature.measurenum": "black",
9685
+ "staff.element.fermata": "black",
9686
+ "staff.element.annotation": "black",
9687
+ "staff.element.navigation": "black",
9688
+ "staff.element.label": "black",
9689
+ "tab.frame": "black",
9690
+ "tab.note": "black",
9691
+ "tab.rest": "black",
9692
+ "tab.lyrics": "black",
9693
+ "tab.connective": "black",
9694
+ "tab.tuning": "black",
9695
+ "tab.signature.clef": "black",
9696
+ // not needed
9697
+ "tab.signature.key": "black",
9698
+ // not needed
9699
+ "tab.signature.time": "black",
9700
+ "tab.signature.tempo": "black",
9701
+ "tab.signature.measurenum": "black",
9702
+ "tab.element.fermata": "black",
9703
+ "tab.element.annotation": "black",
9704
+ "tab.element.navigation": "black",
9705
+ "tab.element.label": "black"
9706
+ });
9707
+ }
9708
+ /**
9709
+ * Set color of any score document element. Use combination of color key parts to set color of specific elements.
9710
+ * ```ts
9711
+ * setColor("all", "red"); // Set color of everything except background.
9712
+ * setColor("staff", "red"); // Set color of all staff elements.
9713
+ * setColor(["staff", "signature"], "red"); // Set color of all staff signature elements.
9714
+ * setColor(["staff", "signature", "key"], "red"); // Set color of staff key signature.
9715
+ * setColor(["staff", "signature", "time"], "red"); // Set color of staff time signature.
9716
+ * setColor("staff.signature.time", "red"); // Set color of staff time signature.
9717
+ * // etc.
9718
+ * ```
9719
+ *
9720
+ * @param colorKeyOrParts - Color key parts to set color for.
9721
+ * @param color - Color (HTML color code e.g. "green", "#AA6644", etc.)
9722
+ */
9723
+ setColor(colorKeyOrParts, color) {
9724
+ if (colorKeyOrParts === "all") {
9725
+ for (const key of Object.keys(this.colors)) {
9726
+ if (key !== "background" && key !== "hilight.object" && key !== "hilight.staffpos" && key !== "play.cursor")
9727
+ this.colors[key] = color || "black";
9728
+ }
9729
+ return;
9730
+ }
9731
+ const isBackground = typeof colorKeyOrParts === "string" && norm(colorKeyOrParts) === "background" || guard_exports.isArray(colorKeyOrParts) && colorKeyOrParts.length === 1 && norm(colorKeyOrParts[0]) === "background";
9732
+ const finalColor = color || (isBackground ? "white" : "black");
9733
+ if (isBackground) {
9734
+ this.colors.background = finalColor;
9735
+ return;
9736
+ }
9737
+ if (typeof colorKeyOrParts === "string" && colorKeyOrParts in this.colors) {
9738
+ this.colors[colorKeyOrParts] = finalColor;
9739
+ return;
9740
+ }
9741
+ const colorKeyParts = guard_exports.isArray(colorKeyOrParts) ? colorKeyOrParts : colorKeyOrParts.split(".");
9742
+ if (colorKeyParts.length === 0)
9743
+ return;
9744
+ const normalizedParts = colorKeyParts.map(norm);
9745
+ let matched = false;
9746
+ for (const key of Object.keys(this.colors)) {
9747
+ const parts = key.split(".").map(norm);
9748
+ const match = normalizedParts.every((a) => parts.includes(a));
9749
+ if (match) {
9750
+ this.colors[key] = finalColor;
9751
+ matched = true;
9752
+ }
9753
+ }
9754
+ if (!matched) {
9755
+ console.error(
9756
+ `Color attrs ${utils_exports.Str.stringify(colorKeyParts)} did not match any color.`
9757
+ );
9758
+ }
9759
+ }
9760
+ /**
9761
+ * Get color.
9762
+ * @param colorKeyOrColor - ColorKey or color.
9763
+ * @returns - Color value (e.g. "white" or "#FFFFFF").
9764
+ */
9765
+ getColor(colorKeyOrColor) {
9766
+ var _a;
9767
+ return (_a = this.colors[colorKeyOrColor]) != null ? _a : colorKeyOrColor;
9768
+ }
9769
+ /**
9770
+ * Get color code.
9771
+ * @param colorKeyOrColor - ColorKey or color.
9772
+ * @returns - Color code (e.g. "#FFFFFF").
9773
+ */
9774
+ getColorCode(colorKeyOrColor) {
9775
+ return _Paint.colorNameToCode(this.getColor(colorKeyOrColor));
9776
+ }
9777
+ /**
9778
+ * Get color RGBA.
9779
+ * @param colorKeyOrColor - ColorKey or color.
9780
+ * @returns - Color RGBA (e.g. [1, 1, 1, 1]).
9781
+ */
9782
+ getColorRGBA(colorKeyOrColor) {
9783
+ return _Paint.colorNameToRGBA(this.getColor(colorKeyOrColor));
9784
+ }
9785
+ /**
9786
+ * Convert color name to color code.
9787
+ * @param colorName - Color name (e.g. "white").
9788
+ * @returns - Color code (e.g. "#FFFFFF")
9789
+ */
9790
+ static colorNameToCode(colorName) {
9791
+ return colorNameToCode(colorName);
9792
+ }
9793
+ /**
9794
+ * Convert color name ro RGBA.
9795
+ * @param colorName - Color name (e.g. "white").
9796
+ * @param alpha - Alpha value 0..1 (default is 1).
9797
+ * @returns - RGBA (e.g. [1, 1, 1, 1]).
9798
+ */
9799
+ static colorNameToRGBA(colorName, alpha = 1) {
9800
+ const hex = colorNameToCode(colorName).replace("#", "");
9801
+ const r = parseInt(hex.slice(0, 2), 16);
9802
+ const g = parseInt(hex.slice(2, 4), 16);
9803
+ const b = parseInt(hex.slice(4, 6), 16);
9804
+ const a = Math.round(alpha * 255);
9805
+ return [r, g, b, a];
9806
+ }
9807
+ };
9808
+ __publicField(_Paint, "default", new _Paint());
9809
+ var Paint = _Paint;
9810
+
9811
+ // src/score/pub/music-interface.ts
9812
+ function assertArg3(condition, argName, argValue) {
9813
+ if (!condition) {
9814
+ throw new MusicError19(MusicErrorType19.Score, `Invalid arg: ${argName} = ${argValue}`);
9815
+ }
9816
+ }
9817
+ function require_t(t, message) {
9818
+ if (t === void 0 || t === null) {
9819
+ throw new TypeError(message);
9820
+ } else {
9821
+ return t;
9822
+ }
9823
+ }
9824
+ var _MPlayer = class _MPlayer {
9825
+ /**
9826
+ * Create new music player.
9827
+ * @param doc - Music document to play.
9828
+ * @param playStateChangeListener - Play state change listener.
9829
+ */
9830
+ constructor(doc, playStateChangeListener) {
9831
+ __publicField(this, "player");
9832
+ assertArg3(doc instanceof MDocument2, "doc", doc);
9833
+ assertArg3(guard_exports.isFunctionOrUndefined(playStateChangeListener), "playStateChangeListener", playStateChangeListener);
9834
+ this.player = new Player();
9835
+ this.player.setDocument(doc.getMusicObject());
9836
+ this.player.setCursorPositionChangeListener((cursorRect) => {
9837
+ doc.getMusicObject().updateCursorRect(cursorRect);
9838
+ });
9839
+ if (playStateChangeListener) {
9840
+ this.player.setPlayStateChnageListener(playStateChangeListener);
9841
+ }
9842
+ }
9843
+ /**
9844
+ * Stop all playing.
9845
+ */
9846
+ static stopAll() {
9847
+ this.currentlyPlaying.forEach((p) => p.stop());
9848
+ Audio2.stop();
9849
+ }
9850
+ /**
9851
+ * Playe attached document.
9852
+ * @returns - This player instance.
9853
+ */
9854
+ play() {
9855
+ _MPlayer.currentlyPlaying.add(this);
9856
+ this.player.play();
9857
+ return this;
9858
+ }
9859
+ /**
9860
+ * Pause playback of attached document.
9861
+ * @returns - This player instance.
9862
+ */
9863
+ pause() {
9774
9864
  this.player.pause();
9775
9865
  return this;
9776
9866
  }
@@ -9794,6 +9884,16 @@ var MRenderContext2 = class {
9794
9884
  __publicField(this, "ctx");
9795
9885
  this.ctx = new RenderContext(this);
9796
9886
  }
9887
+ /**
9888
+ * Set Paint for this render context.
9889
+ * @param paint - Paint.
9890
+ * @returns - This render context instance.
9891
+ */
9892
+ setPaint(paint) {
9893
+ assertArg3(guard_exports.isUndefined(paint) || paint instanceof Paint, "paint", paint);
9894
+ this.ctx.setPaint(paint);
9895
+ return this;
9896
+ }
9797
9897
  /**
9798
9898
  * Attach music document to this render context.
9799
9899
  * @param doc - Music document.
@@ -10069,6 +10169,7 @@ export {
10069
10169
  MusicInterface5 as MusicInterface,
10070
10170
  Navigation,
10071
10171
  NoteAnchor,
10172
+ Paint,
10072
10173
  PlayState,
10073
10174
  ScoreEvent,
10074
10175
  ScoreObjectEvent,
@@ -10078,13 +10179,13 @@ export {
10078
10179
  TempoAnnotation,
10079
10180
  TieType,
10080
10181
  VerticalPosition,
10182
+ colorKey,
10081
10183
  getStringNumbers,
10082
10184
  getVerseNumbers,
10083
10185
  getVoiceIds,
10084
10186
  isStringNumber,
10085
10187
  isVerseNumber,
10086
10188
  isVoiceId,
10087
- setColor,
10088
10189
  validateStringNumber,
10089
10190
  validateVerseNumber,
10090
10191
  validateVoiceId