@viritura/score-engine 0.2.1-next.47 → 0.2.1-next.49

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.
package/dist/index.js CHANGED
@@ -2265,9 +2265,9 @@ function interpolateBeatAnchors(bounds, beat, endX) {
2265
2265
 
2266
2266
  // packages/score-engine/src/buildInfo.ts
2267
2267
  init_define_import_meta_env();
2268
- var PACKAGE_VERSION = "0.2.1-next.47", BUNDLE_WORKER_FILE = "score-engine.worker.js";
2268
+ var PACKAGE_VERSION = "0.2.1-next.49", BUNDLE_WORKER_FILE = "score-engine.worker.js";
2269
2269
  function buildCommit() {
2270
- return "78ae5d80a2cd938fb7b991f4bdebebbc72b18896";
2270
+ return "64fa84f3cf8ed55a83bb113ee0808b72ea32c059";
2271
2271
  }
2272
2272
  function bundledAssetBase() {
2273
2273
  let moduleUrl = import.meta.url;
@@ -2661,8 +2661,8 @@ init_define_import_meta_env();
2661
2661
  init_define_import_meta_env();
2662
2662
  function parseGlobalCaesura(raw) {
2663
2663
  if (raw === void 0) return {};
2664
- let { shape, marks, ...attributes } = raw, caesura = { ...attributes };
2665
- if (shape !== void 0 && (caesura.style = shape), marks !== void 0) {
2664
+ let { shape: shape2, marks, ...attributes } = raw, caesura = { ...attributes };
2665
+ if (shape2 !== void 0 && (caesura.style = shape2), marks !== void 0) {
2666
2666
  if (marks !== 1 && marks !== 2) throw new Error("Global caesura marks must be 1 or 2");
2667
2667
  caesura.marks = marks;
2668
2668
  }
@@ -10703,7 +10703,7 @@ function validate423(data, { instancePath = "", parentData, parentDataProperty,
10703
10703
  return validate423.errors = vErrors, errors === 0;
10704
10704
  }
10705
10705
  validate423.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
10706
- var schema399 = { type: "object", description: "A gradual tempo change (ritardando / accelerando) playback curve. MNX has no gradual-tempo field, so Viritura models the playback ramp as a vendor extension on the global measure where it begins. The tempo ramps linearly in BPM from the tempo active at `position` (or `startBpm` if given) to `endBpm` at `end`. This is playback data only; the printed 'rit.'/'accel.' text is an ordinary text-expression.", required: ["position", "end", "endBpm"], properties: { position: { $ref: "#/$defs/rhythmic-position", description: "Start position within this measure." }, end: { $ref: "#/$defs/measure-rhythmic-position", description: "End position (may reference a later measure)." }, endBpm: { type: "number", exclusiveMinimum: 0, description: "Quarter-note BPM reached at the end of the ramp." }, startBpm: { type: "number", exclusiveMinimum: 0, description: "Optional start BPM (quarter-note). Defaults to the tempo active at `position`." }, kind: { type: "string", enum: ["rit", "accel"], description: "Optional classification. Cosmetic only; the BPM direction determines the audible behavior." } }, additionalProperties: !1 };
10706
+ var schema399 = { type: "object", description: "A native tempo ramp over musical beats. Exactly one target is required: absolute quarter-note endBpm or endRatio times the starting tempo. An omitted curve means linear. Optional printed text is an independently engraved systemText entry referenced by systemTextId.", required: ["position", "end"], oneOf: [{ required: ["endBpm"], not: { required: ["endRatio"] } }, { required: ["endRatio"], not: { required: ["endBpm"] } }], properties: { position: { $ref: "#/$defs/rhythmic-position", description: "Start position within this measure." }, end: { $ref: "#/$defs/measure-rhythmic-position", description: "End position (may reference a later measure)." }, endBpm: { type: "number", exclusiveMinimum: 0, description: "Quarter-note BPM reached at the end of the ramp." }, endRatio: { type: "number", exclusiveMinimum: 0, description: "Target multiplier of the tempo at the ramp start; 0.8 means 80%." }, curve: { type: "string", enum: ["linear", "early", "late", "smooth"] }, systemTextId: { type: "string", minLength: 1, description: "Identity of the ramp's optional printed system text in this measure." }, startBpm: { type: "number", exclusiveMinimum: 0, description: "Optional start BPM (quarter-note). Defaults to the tempo active at `position`." }, kind: { type: "string", enum: ["rit", "accel"], description: "Optional classification. Cosmetic only; the BPM direction determines the audible behavior." } }, additionalProperties: !1 };
10707
10707
  function validate427(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
10708
10708
  let vErrors = null, errors = 0, evaluated0 = validate427.evaluated;
10709
10709
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
@@ -10774,103 +10774,180 @@ function validate427(data, { instancePath = "", parentData, parentDataProperty,
10774
10774
  validate427.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
10775
10775
  function validate426(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
10776
10776
  let vErrors = null, errors = 0, evaluated0 = validate426.evaluated;
10777
- if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
10778
- if (data.position === void 0) {
10779
- let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "position" }, message: "must have required property 'position'" };
10777
+ evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0);
10778
+ let _errs1 = errors, valid0 = !1, passing0 = null, _errs2 = errors, _errs3 = errors, _errs4 = errors;
10779
+ if (data && typeof data == "object" && !Array.isArray(data)) {
10780
+ let missing0;
10781
+ if (data.endRatio === void 0 && (missing0 = "endRatio")) {
10782
+ let err0 = {};
10780
10783
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
10781
10784
  }
10782
- if (data.end === void 0) {
10783
- let err1 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "end" }, message: "must have required property 'end'" };
10784
- vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
10785
+ }
10786
+ var valid1 = _errs4 === errors;
10787
+ if (valid1) {
10788
+ let err1 = { instancePath, schemaPath: "#/oneOf/0/not", keyword: "not", params: {}, message: "must NOT be valid" };
10789
+ vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
10790
+ } else
10791
+ errors = _errs3, vErrors !== null && (_errs3 ? vErrors.length = _errs3 : vErrors = null);
10792
+ if (data && typeof data == "object" && !Array.isArray(data) && data.endBpm === void 0) {
10793
+ let err2 = { instancePath, schemaPath: "#/oneOf/0/required", keyword: "required", params: { missingProperty: "endBpm" }, message: "must have required property 'endBpm'" };
10794
+ vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
10795
+ }
10796
+ var _valid0 = _errs2 === errors;
10797
+ _valid0 && (valid0 = !0, passing0 = 0);
10798
+ let _errs5 = errors, _errs6 = errors, _errs7 = errors;
10799
+ if (data && typeof data == "object" && !Array.isArray(data)) {
10800
+ let missing1;
10801
+ if (data.endBpm === void 0 && (missing1 = "endBpm")) {
10802
+ let err3 = {};
10803
+ vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
10785
10804
  }
10786
- if (data.endBpm === void 0) {
10787
- let err2 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "endBpm" }, message: "must have required property 'endBpm'" };
10788
- vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
10805
+ }
10806
+ var valid2 = _errs7 === errors;
10807
+ if (valid2) {
10808
+ let err4 = { instancePath, schemaPath: "#/oneOf/1/not", keyword: "not", params: {}, message: "must NOT be valid" };
10809
+ vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
10810
+ } else
10811
+ errors = _errs6, vErrors !== null && (_errs6 ? vErrors.length = _errs6 : vErrors = null);
10812
+ if (data && typeof data == "object" && !Array.isArray(data) && data.endRatio === void 0) {
10813
+ let err5 = { instancePath, schemaPath: "#/oneOf/1/required", keyword: "required", params: { missingProperty: "endRatio" }, message: "must have required property 'endRatio'" };
10814
+ vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
10815
+ }
10816
+ var _valid0 = _errs5 === errors;
10817
+ if (_valid0 && valid0 ? (valid0 = !1, passing0 = [passing0, 1]) : _valid0 && (valid0 = !0, passing0 = 1), valid0)
10818
+ errors = _errs1, vErrors !== null && (_errs1 ? vErrors.length = _errs1 : vErrors = null);
10819
+ else {
10820
+ let err6 = { instancePath, schemaPath: "#/oneOf", keyword: "oneOf", params: { passingSchemas: passing0 }, message: "must match exactly one schema in oneOf" };
10821
+ vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
10822
+ }
10823
+ if (data && typeof data == "object" && !Array.isArray(data)) {
10824
+ if (data.position === void 0) {
10825
+ let err7 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "position" }, message: "must have required property 'position'" };
10826
+ vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
10827
+ }
10828
+ if (data.end === void 0) {
10829
+ let err8 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "end" }, message: "must have required property 'end'" };
10830
+ vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
10789
10831
  }
10790
10832
  for (let key0 in data)
10791
- if (!(key0 === "position" || key0 === "end" || key0 === "endBpm" || key0 === "startBpm" || key0 === "kind")) {
10792
- let err3 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
10793
- vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
10833
+ if (!(key0 === "position" || key0 === "end" || key0 === "endBpm" || key0 === "endRatio" || key0 === "curve" || key0 === "systemTextId" || key0 === "startBpm" || key0 === "kind")) {
10834
+ let err9 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
10835
+ vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
10794
10836
  }
10795
10837
  if (data.position !== void 0) {
10796
10838
  let data0 = data.position;
10797
10839
  if (data0 && typeof data0 == "object" && !Array.isArray(data0)) {
10798
10840
  if (data0.fraction === void 0) {
10799
- let err4 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/required", keyword: "required", params: { missingProperty: "fraction" }, message: "must have required property 'fraction'" };
10800
- vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
10841
+ let err10 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/required", keyword: "required", params: { missingProperty: "fraction" }, message: "must have required property 'fraction'" };
10842
+ vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
10801
10843
  }
10802
10844
  for (let key1 in data0)
10803
10845
  if (key1 !== "fraction") {
10804
- let err5 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" };
10805
- vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
10846
+ let err11 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" };
10847
+ vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
10806
10848
  }
10807
10849
  if (data0.fraction !== void 0) {
10808
10850
  let data1 = data0.fraction;
10809
10851
  if (Array.isArray(data1)) {
10810
10852
  if (data1.length > 2) {
10811
- let err6 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/maxItems", keyword: "maxItems", params: { limit: 2 }, message: "must NOT have more than 2 items" };
10812
- vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
10853
+ let err12 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/maxItems", keyword: "maxItems", params: { limit: 2 }, message: "must NOT have more than 2 items" };
10854
+ vErrors === null ? vErrors = [err12] : vErrors.push(err12), errors++;
10813
10855
  }
10814
10856
  if (data1.length < 2) {
10815
- let err7 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/minItems", keyword: "minItems", params: { limit: 2 }, message: "must NOT have fewer than 2 items" };
10816
- vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
10857
+ let err13 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/minItems", keyword: "minItems", params: { limit: 2 }, message: "must NOT have fewer than 2 items" };
10858
+ vErrors === null ? vErrors = [err13] : vErrors.push(err13), errors++;
10817
10859
  }
10818
10860
  let len0 = data1.length;
10819
10861
  for (let i0 = 0; i0 < len0; i0++) {
10820
10862
  let data2 = data1[i0];
10821
10863
  if (!(typeof data2 == "number" && !(data2 % 1) && !isNaN(data2))) {
10822
- let err8 = { instancePath: instancePath + "/position/fraction/" + i0, schemaPath: "#/$defs/rhythmic-position/properties/fraction/items/type", keyword: "type", params: { type: "integer" }, message: "must be integer" };
10823
- vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
10864
+ let err14 = { instancePath: instancePath + "/position/fraction/" + i0, schemaPath: "#/$defs/rhythmic-position/properties/fraction/items/type", keyword: "type", params: { type: "integer" }, message: "must be integer" };
10865
+ vErrors === null ? vErrors = [err14] : vErrors.push(err14), errors++;
10824
10866
  }
10825
10867
  }
10826
10868
  } else {
10827
- let err9 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/type", keyword: "type", params: { type: "array" }, message: "must be array" };
10828
- vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
10869
+ let err15 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/type", keyword: "type", params: { type: "array" }, message: "must be array" };
10870
+ vErrors === null ? vErrors = [err15] : vErrors.push(err15), errors++;
10829
10871
  }
10830
10872
  }
10831
10873
  } else {
10832
- let err10 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/type", keyword: "type", params: { type: "object" }, message: "must be object" };
10833
- vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
10874
+ let err16 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/type", keyword: "type", params: { type: "object" }, message: "must be object" };
10875
+ vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
10834
10876
  }
10835
10877
  }
10836
10878
  if (data.end !== void 0 && (validate427(data.end, { instancePath: instancePath + "/end", parentData: data, parentDataProperty: "end", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate427.errors : vErrors.concat(validate427.errors), errors = vErrors.length)), data.endBpm !== void 0) {
10837
10879
  let data4 = data.endBpm;
10838
10880
  if (typeof data4 == "number") {
10839
10881
  if (data4 <= 0 || isNaN(data4)) {
10840
- let err11 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
10841
- vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
10882
+ let err17 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
10883
+ vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
10842
10884
  }
10843
10885
  } else {
10844
- let err12 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
10845
- vErrors === null ? vErrors = [err12] : vErrors.push(err12), errors++;
10886
+ let err18 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
10887
+ vErrors === null ? vErrors = [err18] : vErrors.push(err18), errors++;
10846
10888
  }
10847
10889
  }
10848
- if (data.startBpm !== void 0) {
10849
- let data5 = data.startBpm;
10890
+ if (data.endRatio !== void 0) {
10891
+ let data5 = data.endRatio;
10850
10892
  if (typeof data5 == "number") {
10851
10893
  if (data5 <= 0 || isNaN(data5)) {
10852
- let err13 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
10853
- vErrors === null ? vErrors = [err13] : vErrors.push(err13), errors++;
10894
+ let err19 = { instancePath: instancePath + "/endRatio", schemaPath: "#/properties/endRatio/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
10895
+ vErrors === null ? vErrors = [err19] : vErrors.push(err19), errors++;
10854
10896
  }
10855
10897
  } else {
10856
- let err14 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
10857
- vErrors === null ? vErrors = [err14] : vErrors.push(err14), errors++;
10898
+ let err20 = { instancePath: instancePath + "/endRatio", schemaPath: "#/properties/endRatio/type", keyword: "type", params: { type: "number" }, message: "must be number" };
10899
+ vErrors === null ? vErrors = [err20] : vErrors.push(err20), errors++;
10858
10900
  }
10859
10901
  }
10860
- if (data.kind !== void 0) {
10861
- let data6 = data.kind;
10902
+ if (data.curve !== void 0) {
10903
+ let data6 = data.curve;
10862
10904
  if (typeof data6 != "string") {
10863
- let err15 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/type", keyword: "type", params: { type: "string" }, message: "must be string" };
10864
- vErrors === null ? vErrors = [err15] : vErrors.push(err15), errors++;
10905
+ let err21 = { instancePath: instancePath + "/curve", schemaPath: "#/properties/curve/type", keyword: "type", params: { type: "string" }, message: "must be string" };
10906
+ vErrors === null ? vErrors = [err21] : vErrors.push(err21), errors++;
10865
10907
  }
10866
- if (!(data6 === "rit" || data6 === "accel")) {
10867
- let err16 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/enum", keyword: "enum", params: { allowedValues: schema399.properties.kind.enum }, message: "must be equal to one of the allowed values" };
10868
- vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
10908
+ if (!(data6 === "linear" || data6 === "early" || data6 === "late" || data6 === "smooth")) {
10909
+ let err22 = { instancePath: instancePath + "/curve", schemaPath: "#/properties/curve/enum", keyword: "enum", params: { allowedValues: schema399.properties.curve.enum }, message: "must be equal to one of the allowed values" };
10910
+ vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
10911
+ }
10912
+ }
10913
+ if (data.systemTextId !== void 0) {
10914
+ let data7 = data.systemTextId;
10915
+ if (typeof data7 == "string") {
10916
+ if (func5(data7) < 1) {
10917
+ let err23 = { instancePath: instancePath + "/systemTextId", schemaPath: "#/properties/systemTextId/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" };
10918
+ vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
10919
+ }
10920
+ } else {
10921
+ let err24 = { instancePath: instancePath + "/systemTextId", schemaPath: "#/properties/systemTextId/type", keyword: "type", params: { type: "string" }, message: "must be string" };
10922
+ vErrors === null ? vErrors = [err24] : vErrors.push(err24), errors++;
10923
+ }
10924
+ }
10925
+ if (data.startBpm !== void 0) {
10926
+ let data8 = data.startBpm;
10927
+ if (typeof data8 == "number") {
10928
+ if (data8 <= 0 || isNaN(data8)) {
10929
+ let err25 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
10930
+ vErrors === null ? vErrors = [err25] : vErrors.push(err25), errors++;
10931
+ }
10932
+ } else {
10933
+ let err26 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
10934
+ vErrors === null ? vErrors = [err26] : vErrors.push(err26), errors++;
10935
+ }
10936
+ }
10937
+ if (data.kind !== void 0) {
10938
+ let data9 = data.kind;
10939
+ if (typeof data9 != "string") {
10940
+ let err27 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/type", keyword: "type", params: { type: "string" }, message: "must be string" };
10941
+ vErrors === null ? vErrors = [err27] : vErrors.push(err27), errors++;
10942
+ }
10943
+ if (!(data9 === "rit" || data9 === "accel")) {
10944
+ let err28 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/enum", keyword: "enum", params: { allowedValues: schema399.properties.kind.enum }, message: "must be equal to one of the allowed values" };
10945
+ vErrors === null ? vErrors = [err28] : vErrors.push(err28), errors++;
10869
10946
  }
10870
10947
  }
10871
10948
  } else {
10872
- let err17 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
10873
- vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
10949
+ let err29 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
10950
+ vErrors === null ? vErrors = [err29] : vErrors.push(err29), errors++;
10874
10951
  }
10875
10952
  return validate426.errors = vErrors, errors === 0;
10876
10953
  }
@@ -11482,9 +11559,190 @@ function validate436(data, { instancePath = "", parentData, parentDataProperty,
11482
11559
  return validate436.errors = vErrors, evaluated0.props = props0, errors === 0;
11483
11560
  }
11484
11561
  validate436.evaluated = { dynamicProps: !0, dynamicItems: !1 };
11485
- var schema415 = { type: "object", description: "Viritura vendor extensions on an MNX part object (the `_x.viritura` dict on a part). Carries instrument identity so the editor and audio engine can resolve a part to a stable instrument without fuzzy name matching, plus its spatial-audio stage placement.", properties: { instrumentId: { type: "string", description: "MusicXML standard sound ID identifying the part's instrument (e.g. 'wind.flutes.flute', 'wind.reed.clarinet.bflat'). With `instruments`, this is the initial instrument's ID." }, instruments: { type: "object", description: "Provisional: instruments this part can switch between, keyed by a document-local key referenced by `initialInstrument` and part-measure `instrumentChanges`.", minProperties: 1, additionalProperties: { $ref: "#/$defs/instrument-definition" } }, initialInstrument: { type: "string", minLength: 1, description: "Key into `instruments` for the instrument active at the start of the part. Required when `instruments` is present." }, midiProgram: { type: "integer", minimum: 0, maximum: 127, description: "General-MIDI program (0..127). Used directly by the audio engine." }, family: { type: "string", description: "Instrument family for spatial placement / catalog routing." }, spatial: { $ref: "#/$defs/stage-position", description: "Spatial-audio stage position in concert-hall meters, persisted from Play mode so a user's instrument arrangement survives reload." }, chordSymbolVisibility: { type: "string", enum: ["auto", "show", "hide"], description: "Source-part display policy for the score-wide harmony track. Unset or auto uses automatic placement; show or hide explicitly controls this part. This is not a layout-staff or per-chord switch." } }, additionalProperties: !1 };
11486
- function validate438(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11487
- let vErrors = null, errors = 0, evaluated0 = validate438.evaluated;
11562
+ var gradualTempo = validate437;
11563
+ function validate437(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11564
+ let vErrors = null, errors = 0, evaluated0 = validate437.evaluated;
11565
+ evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0);
11566
+ let _errs1 = errors, valid0 = !1, passing0 = null, _errs2 = errors, _errs3 = errors, _errs4 = errors;
11567
+ if (data && typeof data == "object" && !Array.isArray(data)) {
11568
+ let missing0;
11569
+ if (data.endRatio === void 0 && (missing0 = "endRatio")) {
11570
+ let err0 = {};
11571
+ vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
11572
+ }
11573
+ }
11574
+ var valid1 = _errs4 === errors;
11575
+ if (valid1) {
11576
+ let err1 = { instancePath, schemaPath: "#/oneOf/0/not", keyword: "not", params: {}, message: "must NOT be valid" };
11577
+ vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
11578
+ } else
11579
+ errors = _errs3, vErrors !== null && (_errs3 ? vErrors.length = _errs3 : vErrors = null);
11580
+ if (data && typeof data == "object" && !Array.isArray(data) && data.endBpm === void 0) {
11581
+ let err2 = { instancePath, schemaPath: "#/oneOf/0/required", keyword: "required", params: { missingProperty: "endBpm" }, message: "must have required property 'endBpm'" };
11582
+ vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
11583
+ }
11584
+ var _valid0 = _errs2 === errors;
11585
+ _valid0 && (valid0 = !0, passing0 = 0);
11586
+ let _errs5 = errors, _errs6 = errors, _errs7 = errors;
11587
+ if (data && typeof data == "object" && !Array.isArray(data)) {
11588
+ let missing1;
11589
+ if (data.endBpm === void 0 && (missing1 = "endBpm")) {
11590
+ let err3 = {};
11591
+ vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
11592
+ }
11593
+ }
11594
+ var valid2 = _errs7 === errors;
11595
+ if (valid2) {
11596
+ let err4 = { instancePath, schemaPath: "#/oneOf/1/not", keyword: "not", params: {}, message: "must NOT be valid" };
11597
+ vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
11598
+ } else
11599
+ errors = _errs6, vErrors !== null && (_errs6 ? vErrors.length = _errs6 : vErrors = null);
11600
+ if (data && typeof data == "object" && !Array.isArray(data) && data.endRatio === void 0) {
11601
+ let err5 = { instancePath, schemaPath: "#/oneOf/1/required", keyword: "required", params: { missingProperty: "endRatio" }, message: "must have required property 'endRatio'" };
11602
+ vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
11603
+ }
11604
+ var _valid0 = _errs5 === errors;
11605
+ if (_valid0 && valid0 ? (valid0 = !1, passing0 = [passing0, 1]) : _valid0 && (valid0 = !0, passing0 = 1), valid0)
11606
+ errors = _errs1, vErrors !== null && (_errs1 ? vErrors.length = _errs1 : vErrors = null);
11607
+ else {
11608
+ let err6 = { instancePath, schemaPath: "#/oneOf", keyword: "oneOf", params: { passingSchemas: passing0 }, message: "must match exactly one schema in oneOf" };
11609
+ vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
11610
+ }
11611
+ if (data && typeof data == "object" && !Array.isArray(data)) {
11612
+ if (data.position === void 0) {
11613
+ let err7 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "position" }, message: "must have required property 'position'" };
11614
+ vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
11615
+ }
11616
+ if (data.end === void 0) {
11617
+ let err8 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "end" }, message: "must have required property 'end'" };
11618
+ vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
11619
+ }
11620
+ for (let key0 in data)
11621
+ if (!(key0 === "position" || key0 === "end" || key0 === "endBpm" || key0 === "endRatio" || key0 === "curve" || key0 === "systemTextId" || key0 === "startBpm" || key0 === "kind")) {
11622
+ let err9 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
11623
+ vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
11624
+ }
11625
+ if (data.position !== void 0) {
11626
+ let data0 = data.position;
11627
+ if (data0 && typeof data0 == "object" && !Array.isArray(data0)) {
11628
+ if (data0.fraction === void 0) {
11629
+ let err10 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/required", keyword: "required", params: { missingProperty: "fraction" }, message: "must have required property 'fraction'" };
11630
+ vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
11631
+ }
11632
+ for (let key1 in data0)
11633
+ if (key1 !== "fraction") {
11634
+ let err11 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key1 }, message: "must NOT have additional properties" };
11635
+ vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
11636
+ }
11637
+ if (data0.fraction !== void 0) {
11638
+ let data1 = data0.fraction;
11639
+ if (Array.isArray(data1)) {
11640
+ if (data1.length > 2) {
11641
+ let err12 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/maxItems", keyword: "maxItems", params: { limit: 2 }, message: "must NOT have more than 2 items" };
11642
+ vErrors === null ? vErrors = [err12] : vErrors.push(err12), errors++;
11643
+ }
11644
+ if (data1.length < 2) {
11645
+ let err13 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/minItems", keyword: "minItems", params: { limit: 2 }, message: "must NOT have fewer than 2 items" };
11646
+ vErrors === null ? vErrors = [err13] : vErrors.push(err13), errors++;
11647
+ }
11648
+ let len0 = data1.length;
11649
+ for (let i0 = 0; i0 < len0; i0++) {
11650
+ let data2 = data1[i0];
11651
+ if (!(typeof data2 == "number" && !(data2 % 1) && !isNaN(data2))) {
11652
+ let err14 = { instancePath: instancePath + "/position/fraction/" + i0, schemaPath: "#/$defs/rhythmic-position/properties/fraction/items/type", keyword: "type", params: { type: "integer" }, message: "must be integer" };
11653
+ vErrors === null ? vErrors = [err14] : vErrors.push(err14), errors++;
11654
+ }
11655
+ }
11656
+ } else {
11657
+ let err15 = { instancePath: instancePath + "/position/fraction", schemaPath: "#/$defs/rhythmic-position/properties/fraction/type", keyword: "type", params: { type: "array" }, message: "must be array" };
11658
+ vErrors === null ? vErrors = [err15] : vErrors.push(err15), errors++;
11659
+ }
11660
+ }
11661
+ } else {
11662
+ let err16 = { instancePath: instancePath + "/position", schemaPath: "#/$defs/rhythmic-position/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11663
+ vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
11664
+ }
11665
+ }
11666
+ if (data.end !== void 0 && (validate427(data.end, { instancePath: instancePath + "/end", parentData: data, parentDataProperty: "end", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate427.errors : vErrors.concat(validate427.errors), errors = vErrors.length)), data.endBpm !== void 0) {
11667
+ let data4 = data.endBpm;
11668
+ if (typeof data4 == "number") {
11669
+ if (data4 <= 0 || isNaN(data4)) {
11670
+ let err17 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
11671
+ vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
11672
+ }
11673
+ } else {
11674
+ let err18 = { instancePath: instancePath + "/endBpm", schemaPath: "#/properties/endBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
11675
+ vErrors === null ? vErrors = [err18] : vErrors.push(err18), errors++;
11676
+ }
11677
+ }
11678
+ if (data.endRatio !== void 0) {
11679
+ let data5 = data.endRatio;
11680
+ if (typeof data5 == "number") {
11681
+ if (data5 <= 0 || isNaN(data5)) {
11682
+ let err19 = { instancePath: instancePath + "/endRatio", schemaPath: "#/properties/endRatio/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
11683
+ vErrors === null ? vErrors = [err19] : vErrors.push(err19), errors++;
11684
+ }
11685
+ } else {
11686
+ let err20 = { instancePath: instancePath + "/endRatio", schemaPath: "#/properties/endRatio/type", keyword: "type", params: { type: "number" }, message: "must be number" };
11687
+ vErrors === null ? vErrors = [err20] : vErrors.push(err20), errors++;
11688
+ }
11689
+ }
11690
+ if (data.curve !== void 0) {
11691
+ let data6 = data.curve;
11692
+ if (typeof data6 != "string") {
11693
+ let err21 = { instancePath: instancePath + "/curve", schemaPath: "#/properties/curve/type", keyword: "type", params: { type: "string" }, message: "must be string" };
11694
+ vErrors === null ? vErrors = [err21] : vErrors.push(err21), errors++;
11695
+ }
11696
+ if (!(data6 === "linear" || data6 === "early" || data6 === "late" || data6 === "smooth")) {
11697
+ let err22 = { instancePath: instancePath + "/curve", schemaPath: "#/properties/curve/enum", keyword: "enum", params: { allowedValues: schema399.properties.curve.enum }, message: "must be equal to one of the allowed values" };
11698
+ vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
11699
+ }
11700
+ }
11701
+ if (data.systemTextId !== void 0) {
11702
+ let data7 = data.systemTextId;
11703
+ if (typeof data7 == "string") {
11704
+ if (func5(data7) < 1) {
11705
+ let err23 = { instancePath: instancePath + "/systemTextId", schemaPath: "#/properties/systemTextId/minLength", keyword: "minLength", params: { limit: 1 }, message: "must NOT have fewer than 1 characters" };
11706
+ vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
11707
+ }
11708
+ } else {
11709
+ let err24 = { instancePath: instancePath + "/systemTextId", schemaPath: "#/properties/systemTextId/type", keyword: "type", params: { type: "string" }, message: "must be string" };
11710
+ vErrors === null ? vErrors = [err24] : vErrors.push(err24), errors++;
11711
+ }
11712
+ }
11713
+ if (data.startBpm !== void 0) {
11714
+ let data8 = data.startBpm;
11715
+ if (typeof data8 == "number") {
11716
+ if (data8 <= 0 || isNaN(data8)) {
11717
+ let err25 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/exclusiveMinimum", keyword: "exclusiveMinimum", params: { comparison: ">", limit: 0 }, message: "must be > 0" };
11718
+ vErrors === null ? vErrors = [err25] : vErrors.push(err25), errors++;
11719
+ }
11720
+ } else {
11721
+ let err26 = { instancePath: instancePath + "/startBpm", schemaPath: "#/properties/startBpm/type", keyword: "type", params: { type: "number" }, message: "must be number" };
11722
+ vErrors === null ? vErrors = [err26] : vErrors.push(err26), errors++;
11723
+ }
11724
+ }
11725
+ if (data.kind !== void 0) {
11726
+ let data9 = data.kind;
11727
+ if (typeof data9 != "string") {
11728
+ let err27 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/type", keyword: "type", params: { type: "string" }, message: "must be string" };
11729
+ vErrors === null ? vErrors = [err27] : vErrors.push(err27), errors++;
11730
+ }
11731
+ if (!(data9 === "rit" || data9 === "accel")) {
11732
+ let err28 = { instancePath: instancePath + "/kind", schemaPath: "#/properties/kind/enum", keyword: "enum", params: { allowedValues: schema399.properties.kind.enum }, message: "must be equal to one of the allowed values" };
11733
+ vErrors === null ? vErrors = [err28] : vErrors.push(err28), errors++;
11734
+ }
11735
+ }
11736
+ } else {
11737
+ let err29 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11738
+ vErrors === null ? vErrors = [err29] : vErrors.push(err29), errors++;
11739
+ }
11740
+ return validate437.errors = vErrors, errors === 0;
11741
+ }
11742
+ validate437.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11743
+ var schema417 = { type: "object", description: "Viritura vendor extensions on an MNX part object (the `_x.viritura` dict on a part). Carries instrument identity so the editor and audio engine can resolve a part to a stable instrument without fuzzy name matching, plus its spatial-audio stage placement.", properties: { instrumentId: { type: "string", description: "MusicXML standard sound ID identifying the part's instrument (e.g. 'wind.flutes.flute', 'wind.reed.clarinet.bflat'). With `instruments`, this is the initial instrument's ID." }, instruments: { type: "object", description: "Provisional: instruments this part can switch between, keyed by a document-local key referenced by `initialInstrument` and part-measure `instrumentChanges`.", minProperties: 1, additionalProperties: { $ref: "#/$defs/instrument-definition" } }, initialInstrument: { type: "string", minLength: 1, description: "Key into `instruments` for the instrument active at the start of the part. Required when `instruments` is present." }, midiProgram: { type: "integer", minimum: 0, maximum: 127, description: "General-MIDI program (0..127). Used directly by the audio engine." }, family: { type: "string", description: "Instrument family for spatial placement / catalog routing." }, spatial: { $ref: "#/$defs/stage-position", description: "Spatial-audio stage position in concert-hall meters, persisted from Play mode so a user's instrument arrangement survives reload." }, chordSymbolVisibility: { type: "string", enum: ["auto", "show", "hide"], description: "Source-part display policy for the score-wide harmony track. Unset or auto uses automatic placement; show or hide explicitly controls this part. This is not a layout-staff or per-chord switch." } }, additionalProperties: !1 };
11744
+ function validate440(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11745
+ let vErrors = null, errors = 0, evaluated0 = validate440.evaluated;
11488
11746
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
11489
11747
  if (data.instrumentId === void 0) {
11490
11748
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "instrumentId" }, message: "must have required property 'instrumentId'" };
@@ -11599,11 +11857,11 @@ function validate438(data, { instancePath = "", parentData, parentDataProperty,
11599
11857
  let err20 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11600
11858
  vErrors === null ? vErrors = [err20] : vErrors.push(err20), errors++;
11601
11859
  }
11602
- return validate438.errors = vErrors, errors === 0;
11860
+ return validate440.errors = vErrors, errors === 0;
11603
11861
  }
11604
- validate438.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11605
- function validate437(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11606
- let vErrors = null, errors = 0, evaluated0 = validate437.evaluated;
11862
+ validate440.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11863
+ function validate439(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11864
+ let vErrors = null, errors = 0, evaluated0 = validate439.evaluated;
11607
11865
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
11608
11866
  for (let key0 in data)
11609
11867
  if (!(key0 === "instrumentId" || key0 === "instruments" || key0 === "initialInstrument" || key0 === "midiProgram" || key0 === "family" || key0 === "spatial" || key0 === "chordSymbolVisibility")) {
@@ -11622,7 +11880,7 @@ function validate437(data, { instancePath = "", parentData, parentDataProperty,
11622
11880
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
11623
11881
  }
11624
11882
  for (let key1 in data1)
11625
- validate438(data1[key1], { instancePath: instancePath + "/instruments/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data1, parentDataProperty: key1, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate438.errors : vErrors.concat(validate438.errors), errors = vErrors.length);
11883
+ validate440(data1[key1], { instancePath: instancePath + "/instruments/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"), parentData: data1, parentDataProperty: key1, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate440.errors : vErrors.concat(validate440.errors), errors = vErrors.length);
11626
11884
  } else {
11627
11885
  let err3 = { instancePath: instancePath + "/instruments", schemaPath: "#/properties/instruments/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11628
11886
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
@@ -11697,7 +11955,7 @@ function validate437(data, { instancePath = "", parentData, parentDataProperty,
11697
11955
  vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
11698
11956
  }
11699
11957
  if (!(data9 === "auto" || data9 === "show" || data9 === "hide")) {
11700
- let err17 = { instancePath: instancePath + "/chordSymbolVisibility", schemaPath: "#/properties/chordSymbolVisibility/enum", keyword: "enum", params: { allowedValues: schema415.properties.chordSymbolVisibility.enum }, message: "must be equal to one of the allowed values" };
11958
+ let err17 = { instancePath: instancePath + "/chordSymbolVisibility", schemaPath: "#/properties/chordSymbolVisibility/enum", keyword: "enum", params: { allowedValues: schema417.properties.chordSymbolVisibility.enum }, message: "must be equal to one of the allowed values" };
11701
11959
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
11702
11960
  }
11703
11961
  }
@@ -11705,12 +11963,12 @@ function validate437(data, { instancePath = "", parentData, parentDataProperty,
11705
11963
  let err18 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11706
11964
  vErrors === null ? vErrors = [err18] : vErrors.push(err18), errors++;
11707
11965
  }
11708
- return validate437.errors = vErrors, errors === 0;
11966
+ return validate439.errors = vErrors, errors === 0;
11709
11967
  }
11710
- validate437.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11711
- var schema420 = { type: "string", enum: ["normal", "x", "circleX", "diamond", "slash", "triangleUp", "triangleDown"], description: "A notehead shape. MNX has no notehead field on note, kit-note or kit-component (W3C MNX issue #249); Viritura tracks it as a vendor extension on the kit-component (per-instrument) and optionally on a pitched note (per-note override)." };
11712
- function validate440(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11713
- let vErrors = null, errors = 0, evaluated0 = validate440.evaluated;
11968
+ validate439.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11969
+ var schema422 = { type: "string", enum: ["normal", "x", "circleX", "diamond", "slash", "triangleUp", "triangleDown"], description: "A notehead shape. MNX has no notehead field on note, kit-note or kit-component (W3C MNX issue #249); Viritura tracks it as a vendor extension on the kit-component (per-instrument) and optionally on a pitched note (per-note override)." };
11970
+ function validate442(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11971
+ let vErrors = null, errors = 0, evaluated0 = validate442.evaluated;
11714
11972
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
11715
11973
  for (let key0 in data)
11716
11974
  if (!(key0 === "notehead" || key0 === "drumKit")) {
@@ -11724,7 +11982,7 @@ function validate440(data, { instancePath = "", parentData, parentDataProperty,
11724
11982
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
11725
11983
  }
11726
11984
  if (!(data0 === "normal" || data0 === "x" || data0 === "circleX" || data0 === "diamond" || data0 === "slash" || data0 === "triangleUp" || data0 === "triangleDown")) {
11727
- let err2 = { instancePath: instancePath + "/notehead", schemaPath: "#/$defs/notehead-shape/enum", keyword: "enum", params: { allowedValues: schema420.enum }, message: "must be equal to one of the allowed values" };
11985
+ let err2 = { instancePath: instancePath + "/notehead", schemaPath: "#/$defs/notehead-shape/enum", keyword: "enum", params: { allowedValues: schema422.enum }, message: "must be equal to one of the allowed values" };
11728
11986
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
11729
11987
  }
11730
11988
  }
@@ -11749,13 +12007,13 @@ function validate440(data, { instancePath = "", parentData, parentDataProperty,
11749
12007
  let err6 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11750
12008
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
11751
12009
  }
11752
- return validate440.errors = vErrors, errors === 0;
12010
+ return validate442.errors = vErrors, errors === 0;
11753
12011
  }
11754
- validate440.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11755
- var schema421 = { type: "object", description: "Viritura vendor extensions on a part measure object.", properties: { pedals: { type: "array", items: { $ref: "#/$defs/pedal" }, description: "Piano pedal markings." }, expressions: { type: "array", items: { $ref: "#/$defs/text-expression" }, description: "Text expressions and performance directions." }, condensingOverride: { type: "string", enum: ["unison", "solo1", "solo2", "amalgamate", "divisi"], description: "User-specified condensing mode override for this measure." }, groupingDisplayOverrides: { type: "array", items: { $ref: "#/$defs/staff-grouping-display-override" }, description: "Per-staff grouping-display occurrence overrides, presentation-only and taking precedence over the time signature's own occurrence override and the document house style." }, staffMeters: { type: "array", items: { $ref: "#/$defs/staff-meter-change" }, description: "Per-staff synchronous local meter changes/resets, effective from this measure onward until changed or reset. Each staff either follows the global meter (the default, no entry needed) or a declared staff-local meter that still shares the global barline grid (`sharedDuration` or `fitMeasure` synchronization). Non-aligning/independent polymeter is out of scope." }, instrumentChanges: { type: "array", items: { $ref: "#/$defs/instrument-change" }, description: "Provisional mid-part instrument and/or transposition changes, effective from their position onward until the next change. Positions within one measure must be unique." } }, additionalProperties: !1 };
11756
- var schema423 = { type: "string", enum: ["sustain", "sostenuto", "una-corda"], description: "Piano pedal type." }, schema425 = { type: "string", enum: ["text", "bracket"], description: "Pedal marking display style. 'text' shows Ped/*, 'bracket' shows a horizontal line with hooks." };
11757
- function validate442(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11758
- let vErrors = null, errors = 0, evaluated0 = validate442.evaluated;
12012
+ validate442.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12013
+ var schema423 = { type: "object", description: "Viritura vendor extensions on a part measure object.", properties: { pedals: { type: "array", items: { $ref: "#/$defs/pedal" }, description: "Piano pedal markings." }, expressions: { type: "array", items: { $ref: "#/$defs/text-expression" }, description: "Text expressions and performance directions." }, condensingOverride: { type: "string", enum: ["unison", "solo1", "solo2", "amalgamate", "divisi"], description: "User-specified condensing mode override for this measure." }, groupingDisplayOverrides: { type: "array", items: { $ref: "#/$defs/staff-grouping-display-override" }, description: "Per-staff grouping-display occurrence overrides, presentation-only and taking precedence over the time signature's own occurrence override and the document house style." }, staffMeters: { type: "array", items: { $ref: "#/$defs/staff-meter-change" }, description: "Per-staff synchronous local meter changes/resets, effective from this measure onward until changed or reset. Each staff either follows the global meter (the default, no entry needed) or a declared staff-local meter that still shares the global barline grid (`sharedDuration` or `fitMeasure` synchronization). Non-aligning/independent polymeter is out of scope." }, instrumentChanges: { type: "array", items: { $ref: "#/$defs/instrument-change" }, description: "Provisional mid-part instrument and/or transposition changes, effective from their position onward until the next change. Positions within one measure must be unique." } }, additionalProperties: !1 };
12014
+ var schema425 = { type: "string", enum: ["sustain", "sostenuto", "una-corda"], description: "Piano pedal type." }, schema427 = { type: "string", enum: ["text", "bracket"], description: "Pedal marking display style. 'text' shows Ped/*, 'bracket' shows a horizontal line with hooks." };
12015
+ function validate444(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12016
+ let vErrors = null, errors = 0, evaluated0 = validate444.evaluated;
11759
12017
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
11760
12018
  if (data.type === void 0) {
11761
12019
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "type" }, message: "must have required property 'type'" };
@@ -11781,7 +12039,7 @@ function validate442(data, { instancePath = "", parentData, parentDataProperty,
11781
12039
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
11782
12040
  }
11783
12041
  if (!(data0 === "sustain" || data0 === "sostenuto" || data0 === "una-corda")) {
11784
- let err5 = { instancePath: instancePath + "/type", schemaPath: "#/$defs/pedal-type/enum", keyword: "enum", params: { allowedValues: schema423.enum }, message: "must be equal to one of the allowed values" };
12042
+ let err5 = { instancePath: instancePath + "/type", schemaPath: "#/$defs/pedal-type/enum", keyword: "enum", params: { allowedValues: schema425.enum }, message: "must be equal to one of the allowed values" };
11785
12043
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
11786
12044
  }
11787
12045
  }
@@ -11833,7 +12091,7 @@ function validate442(data, { instancePath = "", parentData, parentDataProperty,
11833
12091
  vErrors === null ? vErrors = [err13] : vErrors.push(err13), errors++;
11834
12092
  }
11835
12093
  if (!(data5 === "text" || data5 === "bracket")) {
11836
- let err14 = { instancePath: instancePath + "/style", schemaPath: "#/$defs/pedal-line-style/enum", keyword: "enum", params: { allowedValues: schema425.enum }, message: "must be equal to one of the allowed values" };
12094
+ let err14 = { instancePath: instancePath + "/style", schemaPath: "#/$defs/pedal-line-style/enum", keyword: "enum", params: { allowedValues: schema427.enum }, message: "must be equal to one of the allowed values" };
11837
12095
  vErrors === null ? vErrors = [err14] : vErrors.push(err14), errors++;
11838
12096
  }
11839
12097
  }
@@ -11856,13 +12114,13 @@ function validate442(data, { instancePath = "", parentData, parentDataProperty,
11856
12114
  let err18 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
11857
12115
  vErrors === null ? vErrors = [err18] : vErrors.push(err18), errors++;
11858
12116
  }
11859
- return validate442.errors = vErrors, errors === 0;
12117
+ return validate444.errors = vErrors, errors === 0;
11860
12118
  }
11861
- validate442.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
11862
- var schema426 = { type: "object", description: "A text expression or direction at a rhythmic position (e.g. 'dolce', 'rit.', 'a tempo'). Rendered in italic serif font.", required: ["text", "position"], properties: { text: { $ref: "#/$defs/text-content" }, frame: { $ref: "#/$defs/staff-text-frame-presentation" }, pagePosition: { $ref: "#/$defs/text-frame-page-position" }, position: { $ref: "#/$defs/rhythmic-position", description: "Rhythmic position within the measure." }, placement: { $ref: "#/$defs/expression-placement" }, staff: { type: "integer", minimum: 1, description: "Staff number (1-based)." }, voice: { type: "string", description: "Voice name." }, manualOffset: { $ref: "#/$defs/sp-delta", description: "Manual [dx, dy] offset in spatia (sp), applied after automatic placement." }, avoidCollisions: { type: "boolean", description: "Whether automatic collision avoidance may re-flow this expression outward to clear other directions. Default (and when unset): true. Set false when the user manually places the expression (e.g. by dragging) so it stays exactly where put and others flow around it." } }, additionalProperties: !1 };
11863
- var schema430 = { type: "object", required: ["anchor", "offset"], properties: { anchor: { type: "string", enum: ["top", "right", "bottom", "left", "top-left", "top-right", "bottom-right", "bottom-left"] }, offset: { type: "object", required: ["x", "y"], properties: { x: { type: "number", description: "Horizontal offset in staff spaces; positive moves right." }, y: { type: "number", description: "Vertical offset in staff spaces; positive moves down." } }, additionalProperties: !1 } }, additionalProperties: !1 };
11864
- function validate447(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
11865
- let vErrors = null, errors = 0, evaluated0 = validate447.evaluated;
12119
+ validate444.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12120
+ var schema428 = { type: "object", description: "A text expression or direction at a rhythmic position (e.g. 'dolce', 'rit.', 'a tempo'). Rendered in italic serif font.", required: ["text", "position"], properties: { text: { $ref: "#/$defs/text-content" }, frame: { $ref: "#/$defs/staff-text-frame-presentation" }, pagePosition: { $ref: "#/$defs/text-frame-page-position" }, position: { $ref: "#/$defs/rhythmic-position", description: "Rhythmic position within the measure." }, placement: { $ref: "#/$defs/expression-placement" }, staff: { type: "integer", minimum: 1, description: "Staff number (1-based)." }, voice: { type: "string", description: "Voice name." }, manualOffset: { $ref: "#/$defs/sp-delta", description: "Manual [dx, dy] offset in spatia (sp), applied after automatic placement." }, avoidCollisions: { type: "boolean", description: "Whether automatic collision avoidance may re-flow this expression outward to clear other directions. Default (and when unset): true. Set false when the user manually places the expression (e.g. by dragging) so it stays exactly where put and others flow around it." } }, additionalProperties: !1 };
12121
+ var schema432 = { type: "object", required: ["anchor", "offset"], properties: { anchor: { type: "string", enum: ["top", "right", "bottom", "left", "top-left", "top-right", "bottom-right", "bottom-left"] }, offset: { type: "object", required: ["x", "y"], properties: { x: { type: "number", description: "Horizontal offset in staff spaces; positive moves right." }, y: { type: "number", description: "Vertical offset in staff spaces; positive moves down." } }, additionalProperties: !1 } }, additionalProperties: !1 };
12122
+ function validate449(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12123
+ let vErrors = null, errors = 0, evaluated0 = validate449.evaluated;
11866
12124
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
11867
12125
  if (data.id === void 0) {
11868
12126
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -12072,7 +12330,7 @@ function validate447(data, { instancePath = "", parentData, parentDataProperty,
12072
12330
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
12073
12331
  }
12074
12332
  if (!(data11 === "top" || data11 === "right" || data11 === "bottom" || data11 === "left" || data11 === "top-left" || data11 === "top-right" || data11 === "bottom-right" || data11 === "bottom-left")) {
12075
- let err38 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema430.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
12333
+ let err38 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema432.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
12076
12334
  vErrors === null ? vErrors = [err38] : vErrors.push(err38), errors++;
12077
12335
  }
12078
12336
  }
@@ -12243,11 +12501,11 @@ function validate447(data, { instancePath = "", parentData, parentDataProperty,
12243
12501
  let err69 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12244
12502
  vErrors === null ? vErrors = [err69] : vErrors.push(err69), errors++;
12245
12503
  }
12246
- return validate447.errors = vErrors, errors === 0;
12504
+ return validate449.errors = vErrors, errors === 0;
12247
12505
  }
12248
- validate447.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12249
- function validate445(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12250
- let vErrors = null, errors = 0, evaluated0 = validate445.evaluated;
12506
+ validate449.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12507
+ function validate447(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12508
+ let vErrors = null, errors = 0, evaluated0 = validate447.evaluated;
12251
12509
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12252
12510
  if (data.text === void 0) {
12253
12511
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "text" }, message: "must have required property 'text'" };
@@ -12258,7 +12516,7 @@ function validate445(data, { instancePath = "", parentData, parentDataProperty,
12258
12516
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
12259
12517
  }
12260
12518
  for (let key0 in data)
12261
- if (!func1.call(schema426.properties, key0)) {
12519
+ if (!func1.call(schema428.properties, key0)) {
12262
12520
  let err2 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
12263
12521
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
12264
12522
  }
@@ -12361,7 +12619,7 @@ function validate445(data, { instancePath = "", parentData, parentDataProperty,
12361
12619
  vErrors === null ? vErrors = [err20] : vErrors.push(err20), errors++;
12362
12620
  }
12363
12621
  }
12364
- if (data.pagePosition !== void 0 && (validate447(data.pagePosition, { instancePath: instancePath + "/pagePosition", parentData: data, parentDataProperty: "pagePosition", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate447.errors : vErrors.concat(validate447.errors), errors = vErrors.length)), data.position !== void 0) {
12622
+ if (data.pagePosition !== void 0 && (validate449(data.pagePosition, { instancePath: instancePath + "/pagePosition", parentData: data, parentDataProperty: "pagePosition", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate449.errors : vErrors.concat(validate449.errors), errors = vErrors.length)), data.position !== void 0) {
12365
12623
  let data11 = data.position;
12366
12624
  if (data11 && typeof data11 == "object" && !Array.isArray(data11)) {
12367
12625
  if (data11.fraction === void 0) {
@@ -12458,11 +12716,11 @@ function validate445(data, { instancePath = "", parentData, parentDataProperty,
12458
12716
  let err38 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12459
12717
  vErrors === null ? vErrors = [err38] : vErrors.push(err38), errors++;
12460
12718
  }
12461
- return validate445.errors = vErrors, errors === 0;
12719
+ return validate447.errors = vErrors, errors === 0;
12462
12720
  }
12463
- validate445.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12464
- function validate450(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12465
- let vErrors = null, errors = 0, evaluated0 = validate450.evaluated;
12721
+ validate447.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12722
+ function validate452(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12723
+ let vErrors = null, errors = 0, evaluated0 = validate452.evaluated;
12466
12724
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12467
12725
  if (data.staff === void 0) {
12468
12726
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "staff" }, message: "must have required property 'staff'" };
@@ -12503,12 +12761,12 @@ function validate450(data, { instancePath = "", parentData, parentDataProperty,
12503
12761
  let err7 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12504
12762
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
12505
12763
  }
12506
- return validate450.errors = vErrors, errors === 0;
12764
+ return validate452.errors = vErrors, errors === 0;
12507
12765
  }
12508
- validate450.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12509
- var schema440 = { type: "object", description: "A staff-local meter distinct from the global (`global.measures[].time`) meter. Semantically identical in shape to a time signature, but never engraved on other staves and never establishes the score's barline duration by itself.", required: ["count", "unit"], properties: { count: { type: "integer", minimum: 1, description: "Numerator (beats per measure) of the staff-local meter." }, unit: { type: "integer", enum: [1, 2, 4, 8, 16, 32, 64, 128], description: "Denominator (beat unit) of the staff-local meter." }, beatStructure: { type: "array", items: { type: "integer", minimum: 1 }, minItems: 1, description: "Ordered beat-group lengths in units of the staff-local meter's denominator. Values must sum to count. When omitted, Viritura resolves the conventional default structure for this count/unit, same as a global time signature." } }, additionalProperties: !1 }, schema441 = { type: "string", enum: ["sharedDuration", "fitMeasure"], description: "How a staff-local meter's measure duration relates to the global measure it shares a barline with. `sharedDuration` requires the staff-local meter's measure duration to equal the global measure's duration exactly, so ordinary written note durations already line up \u2014 no scaling. `fitMeasure` maps one complete staff-local measure onto one complete global measure by a derived exact ratio (e.g. a local 6/8 measure of two dotted-quarter pulses onto a global 2/4 measure of two quarter-note pulses), so the staff's written durations are proportionally scaled for spacing and playback while the notated meter keeps its own conventional note values." };
12510
- function validate453(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12511
- let vErrors = null, errors = 0, evaluated0 = validate453.evaluated;
12766
+ validate452.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12767
+ var schema442 = { type: "object", description: "A staff-local meter distinct from the global (`global.measures[].time`) meter. Semantically identical in shape to a time signature, but never engraved on other staves and never establishes the score's barline duration by itself.", required: ["count", "unit"], properties: { count: { type: "integer", minimum: 1, description: "Numerator (beats per measure) of the staff-local meter." }, unit: { type: "integer", enum: [1, 2, 4, 8, 16, 32, 64, 128], description: "Denominator (beat unit) of the staff-local meter." }, beatStructure: { type: "array", items: { type: "integer", minimum: 1 }, minItems: 1, description: "Ordered beat-group lengths in units of the staff-local meter's denominator. Values must sum to count. When omitted, Viritura resolves the conventional default structure for this count/unit, same as a global time signature." } }, additionalProperties: !1 }, schema443 = { type: "string", enum: ["sharedDuration", "fitMeasure"], description: "How a staff-local meter's measure duration relates to the global measure it shares a barline with. `sharedDuration` requires the staff-local meter's measure duration to equal the global measure's duration exactly, so ordinary written note durations already line up \u2014 no scaling. `fitMeasure` maps one complete staff-local measure onto one complete global measure by a derived exact ratio (e.g. a local 6/8 measure of two dotted-quarter pulses onto a global 2/4 measure of two quarter-note pulses), so the staff's written durations are proportionally scaled for spacing and playback while the notated meter keeps its own conventional note values." };
12768
+ function validate455(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12769
+ let vErrors = null, errors = 0, evaluated0 = validate455.evaluated;
12512
12770
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12513
12771
  if (data.staff === void 0) {
12514
12772
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "staff" }, message: "must have required property 'staff'" };
@@ -12572,7 +12830,7 @@ function validate453(data, { instancePath = "", parentData, parentDataProperty,
12572
12830
  vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
12573
12831
  }
12574
12832
  if (!(data3 === 1 || data3 === 2 || data3 === 4 || data3 === 8 || data3 === 16 || data3 === 32 || data3 === 64 || data3 === 128)) {
12575
- let err12 = { instancePath: instancePath + "/meter/unit", schemaPath: "#/$defs/staff-meter/properties/unit/enum", keyword: "enum", params: { allowedValues: schema440.properties.unit.enum }, message: "must be equal to one of the allowed values" };
12833
+ let err12 = { instancePath: instancePath + "/meter/unit", schemaPath: "#/$defs/staff-meter/properties/unit/enum", keyword: "enum", params: { allowedValues: schema442.properties.unit.enum }, message: "must be equal to one of the allowed values" };
12576
12834
  vErrors === null ? vErrors = [err12] : vErrors.push(err12), errors++;
12577
12835
  }
12578
12836
  }
@@ -12612,7 +12870,7 @@ function validate453(data, { instancePath = "", parentData, parentDataProperty,
12612
12870
  vErrors === null ? vErrors = [err18] : vErrors.push(err18), errors++;
12613
12871
  }
12614
12872
  if (!(data6 === "sharedDuration" || data6 === "fitMeasure")) {
12615
- let err19 = { instancePath: instancePath + "/synchronization", schemaPath: "#/$defs/staff-meter-synchronization/enum", keyword: "enum", params: { allowedValues: schema441.enum }, message: "must be equal to one of the allowed values" };
12873
+ let err19 = { instancePath: instancePath + "/synchronization", schemaPath: "#/$defs/staff-meter-synchronization/enum", keyword: "enum", params: { allowedValues: schema443.enum }, message: "must be equal to one of the allowed values" };
12616
12874
  vErrors === null ? vErrors = [err19] : vErrors.push(err19), errors++;
12617
12875
  }
12618
12876
  }
@@ -12620,14 +12878,14 @@ function validate453(data, { instancePath = "", parentData, parentDataProperty,
12620
12878
  let err20 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12621
12879
  vErrors === null ? vErrors = [err20] : vErrors.push(err20), errors++;
12622
12880
  }
12623
- return validate453.errors = vErrors, errors === 0;
12881
+ return validate455.errors = vErrors, errors === 0;
12624
12882
  }
12625
- validate453.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12626
- function validate452(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12627
- let vErrors = null, errors = 0, evaluated0 = validate452.evaluated;
12883
+ validate455.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12884
+ function validate454(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12885
+ let vErrors = null, errors = 0, evaluated0 = validate454.evaluated;
12628
12886
  evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0);
12629
12887
  let _errs0 = errors, valid0 = !1, passing0 = null, _errs1 = errors;
12630
- validate453(data, { instancePath, parentData, parentDataProperty, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate453.errors : vErrors.concat(validate453.errors), errors = vErrors.length);
12888
+ validate455(data, { instancePath, parentData, parentDataProperty, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate455.errors : vErrors.concat(validate455.errors), errors = vErrors.length);
12631
12889
  var _valid0 = _errs1 === errors;
12632
12890
  if (_valid0) {
12633
12891
  valid0 = !0, passing0 = 0;
@@ -12681,11 +12939,11 @@ function validate452(data, { instancePath = "", parentData, parentDataProperty,
12681
12939
  let err8 = { instancePath, schemaPath: "#/oneOf", keyword: "oneOf", params: { passingSchemas: passing0 }, message: "must match exactly one schema in oneOf" };
12682
12940
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
12683
12941
  }
12684
- return validate452.errors = vErrors, evaluated0.props = props0, errors === 0;
12942
+ return validate454.errors = vErrors, evaluated0.props = props0, errors === 0;
12685
12943
  }
12686
- validate452.evaluated = { dynamicProps: !0, dynamicItems: !1 };
12687
- function validate456(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12688
- let vErrors = null, errors = 0, evaluated0 = validate456.evaluated;
12944
+ validate454.evaluated = { dynamicProps: !0, dynamicItems: !1 };
12945
+ function validate458(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12946
+ let vErrors = null, errors = 0, evaluated0 = validate458.evaluated;
12689
12947
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12690
12948
  for (let key0 in data)
12691
12949
  if (!(key0 === "position" || key0 === "instrument" || key0 === "transposition" || key0 === "instruction" || key0 === "reminder")) {
@@ -12854,11 +13112,11 @@ function validate456(data, { instancePath = "", parentData, parentDataProperty,
12854
13112
  let err29 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12855
13113
  vErrors === null ? vErrors = [err29] : vErrors.push(err29), errors++;
12856
13114
  }
12857
- return validate456.errors = vErrors, errors === 0;
13115
+ return validate458.errors = vErrors, errors === 0;
12858
13116
  }
12859
- validate456.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12860
- function validate441(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12861
- let vErrors = null, errors = 0, evaluated0 = validate441.evaluated;
13117
+ validate458.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13118
+ function validate443(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13119
+ let vErrors = null, errors = 0, evaluated0 = validate443.evaluated;
12862
13120
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12863
13121
  for (let key0 in data)
12864
13122
  if (!(key0 === "pedals" || key0 === "expressions" || key0 === "condensingOverride" || key0 === "groupingDisplayOverrides" || key0 === "staffMeters" || key0 === "instrumentChanges")) {
@@ -12870,7 +13128,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12870
13128
  if (Array.isArray(data0)) {
12871
13129
  let len0 = data0.length;
12872
13130
  for (let i0 = 0; i0 < len0; i0++)
12873
- validate442(data0[i0], { instancePath: instancePath + "/pedals/" + i0, parentData: data0, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate442.errors : vErrors.concat(validate442.errors), errors = vErrors.length);
13131
+ validate444(data0[i0], { instancePath: instancePath + "/pedals/" + i0, parentData: data0, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate444.errors : vErrors.concat(validate444.errors), errors = vErrors.length);
12874
13132
  } else {
12875
13133
  let err1 = { instancePath: instancePath + "/pedals", schemaPath: "#/properties/pedals/type", keyword: "type", params: { type: "array" }, message: "must be array" };
12876
13134
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
@@ -12881,7 +13139,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12881
13139
  if (Array.isArray(data2)) {
12882
13140
  let len1 = data2.length;
12883
13141
  for (let i1 = 0; i1 < len1; i1++)
12884
- validate445(data2[i1], { instancePath: instancePath + "/expressions/" + i1, parentData: data2, parentDataProperty: i1, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate445.errors : vErrors.concat(validate445.errors), errors = vErrors.length);
13142
+ validate447(data2[i1], { instancePath: instancePath + "/expressions/" + i1, parentData: data2, parentDataProperty: i1, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate447.errors : vErrors.concat(validate447.errors), errors = vErrors.length);
12885
13143
  } else {
12886
13144
  let err2 = { instancePath: instancePath + "/expressions", schemaPath: "#/properties/expressions/type", keyword: "type", params: { type: "array" }, message: "must be array" };
12887
13145
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
@@ -12894,7 +13152,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12894
13152
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
12895
13153
  }
12896
13154
  if (!(data4 === "unison" || data4 === "solo1" || data4 === "solo2" || data4 === "amalgamate" || data4 === "divisi")) {
12897
- let err4 = { instancePath: instancePath + "/condensingOverride", schemaPath: "#/properties/condensingOverride/enum", keyword: "enum", params: { allowedValues: schema421.properties.condensingOverride.enum }, message: "must be equal to one of the allowed values" };
13155
+ let err4 = { instancePath: instancePath + "/condensingOverride", schemaPath: "#/properties/condensingOverride/enum", keyword: "enum", params: { allowedValues: schema423.properties.condensingOverride.enum }, message: "must be equal to one of the allowed values" };
12898
13156
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
12899
13157
  }
12900
13158
  }
@@ -12903,7 +13161,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12903
13161
  if (Array.isArray(data5)) {
12904
13162
  let len2 = data5.length;
12905
13163
  for (let i2 = 0; i2 < len2; i2++)
12906
- validate450(data5[i2], { instancePath: instancePath + "/groupingDisplayOverrides/" + i2, parentData: data5, parentDataProperty: i2, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate450.errors : vErrors.concat(validate450.errors), errors = vErrors.length);
13164
+ validate452(data5[i2], { instancePath: instancePath + "/groupingDisplayOverrides/" + i2, parentData: data5, parentDataProperty: i2, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate452.errors : vErrors.concat(validate452.errors), errors = vErrors.length);
12907
13165
  } else {
12908
13166
  let err5 = { instancePath: instancePath + "/groupingDisplayOverrides", schemaPath: "#/properties/groupingDisplayOverrides/type", keyword: "type", params: { type: "array" }, message: "must be array" };
12909
13167
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
@@ -12914,7 +13172,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12914
13172
  if (Array.isArray(data7)) {
12915
13173
  let len3 = data7.length;
12916
13174
  for (let i3 = 0; i3 < len3; i3++)
12917
- validate452(data7[i3], { instancePath: instancePath + "/staffMeters/" + i3, parentData: data7, parentDataProperty: i3, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate452.errors : vErrors.concat(validate452.errors), errors = vErrors.length);
13175
+ validate454(data7[i3], { instancePath: instancePath + "/staffMeters/" + i3, parentData: data7, parentDataProperty: i3, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate454.errors : vErrors.concat(validate454.errors), errors = vErrors.length);
12918
13176
  } else {
12919
13177
  let err6 = { instancePath: instancePath + "/staffMeters", schemaPath: "#/properties/staffMeters/type", keyword: "type", params: { type: "array" }, message: "must be array" };
12920
13178
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
@@ -12925,7 +13183,7 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12925
13183
  if (Array.isArray(data9)) {
12926
13184
  let len4 = data9.length;
12927
13185
  for (let i4 = 0; i4 < len4; i4++)
12928
- validate456(data9[i4], { instancePath: instancePath + "/instrumentChanges/" + i4, parentData: data9, parentDataProperty: i4, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate456.errors : vErrors.concat(validate456.errors), errors = vErrors.length);
13186
+ validate458(data9[i4], { instancePath: instancePath + "/instrumentChanges/" + i4, parentData: data9, parentDataProperty: i4, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate458.errors : vErrors.concat(validate458.errors), errors = vErrors.length);
12929
13187
  } else {
12930
13188
  let err7 = { instancePath: instancePath + "/instrumentChanges", schemaPath: "#/properties/instrumentChanges/type", keyword: "type", params: { type: "array" }, message: "must be array" };
12931
13189
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
@@ -12935,12 +13193,12 @@ function validate441(data, { instancePath = "", parentData, parentDataProperty,
12935
13193
  let err8 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12936
13194
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
12937
13195
  }
12938
- return validate441.errors = vErrors, errors === 0;
13196
+ return validate443.errors = vErrors, errors === 0;
12939
13197
  }
12940
- validate441.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
12941
- var schema449 = { type: "object", description: "Links measure-local tuplet fragments into one logical tuplet spanning barlines. The same id and ratio must be used by contiguous fragments.", required: ["id", "type"], properties: { id: { type: "string", minLength: 1, description: "Stable identity shared by every fragment of the logical tuplet." }, type: { type: "string", enum: ["start", "continue", "stop"], description: "The fragment's position within the logical tuplet." } }, additionalProperties: !1 };
12942
- function validate458(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
12943
- let vErrors = null, errors = 0, evaluated0 = validate458.evaluated;
13198
+ validate443.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13199
+ var schema451 = { type: "object", description: "Links measure-local tuplet fragments into one logical tuplet spanning barlines. The same id and ratio must be used by contiguous fragments.", required: ["id", "type"], properties: { id: { type: "string", minLength: 1, description: "Stable identity shared by every fragment of the logical tuplet." }, type: { type: "string", enum: ["start", "continue", "stop"], description: "The fragment's position within the logical tuplet." } }, additionalProperties: !1 };
13200
+ function validate460(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13201
+ let vErrors = null, errors = 0, evaluated0 = validate460.evaluated;
12944
13202
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
12945
13203
  for (let key0 in data)
12946
13204
  if (key0 !== "span") {
@@ -12982,7 +13240,7 @@ function validate458(data, { instancePath = "", parentData, parentDataProperty,
12982
13240
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
12983
13241
  }
12984
13242
  if (!(data2 === "start" || data2 === "continue" || data2 === "stop")) {
12985
- let err7 = { instancePath: instancePath + "/span/type", schemaPath: "#/$defs/tuplet-span/properties/type/enum", keyword: "enum", params: { allowedValues: schema449.properties.type.enum }, message: "must be equal to one of the allowed values" };
13243
+ let err7 = { instancePath: instancePath + "/span/type", schemaPath: "#/$defs/tuplet-span/properties/type/enum", keyword: "enum", params: { allowedValues: schema451.properties.type.enum }, message: "must be equal to one of the allowed values" };
12986
13244
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
12987
13245
  }
12988
13246
  }
@@ -12995,11 +13253,11 @@ function validate458(data, { instancePath = "", parentData, parentDataProperty,
12995
13253
  let err9 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
12996
13254
  vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
12997
13255
  }
12998
- return validate458.errors = vErrors, errors === 0;
13256
+ return validate460.errors = vErrors, errors === 0;
12999
13257
  }
13000
- validate458.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13001
- function validate459(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13002
- let vErrors = null, errors = 0, evaluated0 = validate459.evaluated;
13258
+ validate460.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13259
+ function validate461(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13260
+ let vErrors = null, errors = 0, evaluated0 = validate461.evaluated;
13003
13261
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13004
13262
  for (let key0 in data)
13005
13263
  if (key0 !== "staffLineRangeRestore") {
@@ -13014,11 +13272,11 @@ function validate459(data, { instancePath = "", parentData, parentDataProperty,
13014
13272
  let err2 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13015
13273
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13016
13274
  }
13017
- return validate459.errors = vErrors, errors === 0;
13275
+ return validate461.errors = vErrors, errors === 0;
13018
13276
  }
13019
- validate459.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13020
- function validate460(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13021
- let vErrors = null, errors = 0, evaluated0 = validate460.evaluated;
13277
+ validate461.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13278
+ function validate462(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13279
+ let vErrors = null, errors = 0, evaluated0 = validate462.evaluated;
13022
13280
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13023
13281
  for (let key0 in data)
13024
13282
  if (!(key0 === "manualOffset" || key0 === "avoidCollisions")) {
@@ -13055,12 +13313,12 @@ function validate460(data, { instancePath = "", parentData, parentDataProperty,
13055
13313
  let err6 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13056
13314
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13057
13315
  }
13058
- return validate460.errors = vErrors, errors === 0;
13316
+ return validate462.errors = vErrors, errors === 0;
13059
13317
  }
13060
- validate460.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13061
- var schema454 = { type: "object", description: "A glissando or portamento connecting this event to a target event.", required: ["target"], properties: { target: { type: "string", description: "ID of the target event." }, kind: { $ref: "#/$defs/glissando-kind", description: "Semantic kind. Default: 'glissando'." }, style: { $ref: "#/$defs/glissando-style", description: "Line style. Default: 'straight'." }, playbackType: { type: "string", enum: ["chromatic", "diatonic", "pitch-bend"], description: "Playback interpolation. Omission means diatonic for glissando and pitch-bend for portamento." }, text: { type: "string", description: "Optional text label (e.g. 'gliss.', 'port.')." }, showText: { type: "boolean", description: "Whether to display the text label. Default: true." } }, additionalProperties: !1 }, schema455 = { type: "string", enum: ["glissando", "portamento"], description: "Semantic kind of a glissando-family line." }, schema456 = { type: "string", enum: ["straight", "wavy"], description: "Glissando/portamento line style." };
13062
- function validate462(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13063
- let vErrors = null, errors = 0, evaluated0 = validate462.evaluated;
13318
+ validate462.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13319
+ var schema456 = { type: "object", description: "A glissando or portamento connecting this event to a target event.", required: ["target"], properties: { target: { type: "string", description: "ID of the target event." }, kind: { $ref: "#/$defs/glissando-kind", description: "Semantic kind. Default: 'glissando'." }, style: { $ref: "#/$defs/glissando-style", description: "Line style. Default: 'straight'." }, playbackType: { type: "string", enum: ["chromatic", "diatonic", "pitch-bend"], description: "Playback interpolation. Omission means diatonic for glissando and pitch-bend for portamento." }, text: { type: "string", description: "Optional text label (e.g. 'gliss.', 'port.')." }, showText: { type: "boolean", description: "Whether to display the text label. Default: true." } }, additionalProperties: !1 }, schema457 = { type: "string", enum: ["glissando", "portamento"], description: "Semantic kind of a glissando-family line." }, schema458 = { type: "string", enum: ["straight", "wavy"], description: "Glissando/portamento line style." };
13320
+ function validate464(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13321
+ let vErrors = null, errors = 0, evaluated0 = validate464.evaluated;
13064
13322
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13065
13323
  if (data.target === void 0) {
13066
13324
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "target" }, message: "must have required property 'target'" };
@@ -13082,7 +13340,7 @@ function validate462(data, { instancePath = "", parentData, parentDataProperty,
13082
13340
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13083
13341
  }
13084
13342
  if (!(data1 === "glissando" || data1 === "portamento")) {
13085
- let err4 = { instancePath: instancePath + "/kind", schemaPath: "#/$defs/glissando-kind/enum", keyword: "enum", params: { allowedValues: schema455.enum }, message: "must be equal to one of the allowed values" };
13343
+ let err4 = { instancePath: instancePath + "/kind", schemaPath: "#/$defs/glissando-kind/enum", keyword: "enum", params: { allowedValues: schema457.enum }, message: "must be equal to one of the allowed values" };
13086
13344
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13087
13345
  }
13088
13346
  }
@@ -13093,7 +13351,7 @@ function validate462(data, { instancePath = "", parentData, parentDataProperty,
13093
13351
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13094
13352
  }
13095
13353
  if (!(data2 === "straight" || data2 === "wavy")) {
13096
- let err6 = { instancePath: instancePath + "/style", schemaPath: "#/$defs/glissando-style/enum", keyword: "enum", params: { allowedValues: schema456.enum }, message: "must be equal to one of the allowed values" };
13354
+ let err6 = { instancePath: instancePath + "/style", schemaPath: "#/$defs/glissando-style/enum", keyword: "enum", params: { allowedValues: schema458.enum }, message: "must be equal to one of the allowed values" };
13097
13355
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13098
13356
  }
13099
13357
  }
@@ -13104,7 +13362,7 @@ function validate462(data, { instancePath = "", parentData, parentDataProperty,
13104
13362
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13105
13363
  }
13106
13364
  if (!(data3 === "chromatic" || data3 === "diatonic" || data3 === "pitch-bend")) {
13107
- let err8 = { instancePath: instancePath + "/playbackType", schemaPath: "#/properties/playbackType/enum", keyword: "enum", params: { allowedValues: schema454.properties.playbackType.enum }, message: "must be equal to one of the allowed values" };
13365
+ let err8 = { instancePath: instancePath + "/playbackType", schemaPath: "#/properties/playbackType/enum", keyword: "enum", params: { allowedValues: schema456.properties.playbackType.enum }, message: "must be equal to one of the allowed values" };
13108
13366
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
13109
13367
  }
13110
13368
  }
@@ -13120,11 +13378,11 @@ function validate462(data, { instancePath = "", parentData, parentDataProperty,
13120
13378
  let err11 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13121
13379
  vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
13122
13380
  }
13123
- return validate462.errors = vErrors, errors === 0;
13381
+ return validate464.errors = vErrors, errors === 0;
13124
13382
  }
13125
- validate462.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13126
- function validate461(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13127
- let vErrors = null, errors = 0, evaluated0 = validate461.evaluated;
13383
+ validate464.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13384
+ function validate463(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13385
+ let vErrors = null, errors = 0, evaluated0 = validate463.evaluated;
13128
13386
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13129
13387
  for (let key0 in data)
13130
13388
  if (key0 !== "glissandos") {
@@ -13136,7 +13394,7 @@ function validate461(data, { instancePath = "", parentData, parentDataProperty,
13136
13394
  if (Array.isArray(data0)) {
13137
13395
  let len0 = data0.length;
13138
13396
  for (let i0 = 0; i0 < len0; i0++)
13139
- validate462(data0[i0], { instancePath: instancePath + "/glissandos/" + i0, parentData: data0, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate462.errors : vErrors.concat(validate462.errors), errors = vErrors.length);
13397
+ validate464(data0[i0], { instancePath: instancePath + "/glissandos/" + i0, parentData: data0, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate464.errors : vErrors.concat(validate464.errors), errors = vErrors.length);
13140
13398
  } else {
13141
13399
  let err1 = { instancePath: instancePath + "/glissandos", schemaPath: "#/properties/glissandos/type", keyword: "type", params: { type: "array" }, message: "must be array" };
13142
13400
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
@@ -13146,13 +13404,13 @@ function validate461(data, { instancePath = "", parentData, parentDataProperty,
13146
13404
  let err2 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13147
13405
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13148
13406
  }
13149
- return validate461.errors = vErrors, errors === 0;
13407
+ return validate463.errors = vErrors, errors === 0;
13150
13408
  }
13151
- validate461.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13152
- var schema457 = { type: "object", description: "Viritura vendor extensions on an event-markings object.", properties: { staccatissimoWedge: { type: "object", description: "Staccatissimo wedge articulation variant (SMuFL articStaccatissimoWedge).", properties: { placement: { type: "string", enum: ["above", "below", "auto"], description: "Vertical placement relative to the staff." } }, additionalProperties: !1 }, trill: { $ref: "#/$defs/trill" }, ornaments: { type: "array", items: { $ref: "#/$defs/ornament-type" }, description: "Ornament markings (turn, mordent, etc.)." }, fingerings: { type: "array", items: { $ref: "#/$defs/fingering" }, description: "Fingering annotations." }, arpeggio: { $ref: "#/$defs/arpeggio" } }, additionalProperties: !1 }, schema460 = { type: "string", enum: ["turn", "invertedTurn", "mordent", "invertedMordent", "shortTrill", "trillMordent", "delayedTurn", "schleifer"], description: "Ornament type. Each maps to a SMuFL ornament glyph." };
13153
- var schema462 = { type: "object", description: "A rolled-chord (arpeggio) indication on a chord event: a wavy vertical line to the left of the chord. Created on MusicXML `<arpeggiate>` import and authored natively.", properties: { direction: { type: "string", enum: ["up", "down", "auto"], description: "Roll direction. Omitted means the renderer's default (upward) arpeggio." } }, additionalProperties: !1 }, schema458 = { type: "object", description: "A trill marking on a note, optionally followed by a wavy extension line.", properties: { accidental: { type: "integer", enum: [-1, 0, 1], description: "Accidental on the auxiliary note: -1 = flat, 0 = natural, 1 = sharp." }, showSymbol: { type: "boolean", description: "Whether to display the initial trill symbol. Defaults to true; set false for an extension-only line." }, extension: { $ref: "#/$defs/trill-extension" } }, additionalProperties: !1 }, schema459 = { type: "object", description: "A wavy trill-extension line from this event to a target event.", required: ["target"], properties: { target: { type: "string", description: "ID of the event where the trill-extension line ends." }, targetEdge: { type: "string", enum: ["start", "end"], description: "Which rhythmic edge of the target event ends the line. Defaults to 'start'." } }, additionalProperties: !1 };
13154
- function validate465(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13155
- let vErrors = null, errors = 0, evaluated0 = validate465.evaluated;
13409
+ validate463.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13410
+ var schema459 = { type: "object", description: "Viritura vendor extensions on an event-markings object.", properties: { staccatissimoWedge: { type: "object", description: "Staccatissimo wedge articulation variant (SMuFL articStaccatissimoWedge).", properties: { placement: { type: "string", enum: ["above", "below", "auto"], description: "Vertical placement relative to the staff." } }, additionalProperties: !1 }, trill: { $ref: "#/$defs/trill" }, ornaments: { type: "array", items: { $ref: "#/$defs/ornament-type" }, description: "Ornament markings (turn, mordent, etc.)." }, fingerings: { type: "array", items: { $ref: "#/$defs/fingering" }, description: "Fingering annotations." }, arpeggio: { $ref: "#/$defs/arpeggio" } }, additionalProperties: !1 }, schema462 = { type: "string", enum: ["turn", "invertedTurn", "mordent", "invertedMordent", "shortTrill", "trillMordent", "delayedTurn", "schleifer"], description: "Ornament type. Each maps to a SMuFL ornament glyph." };
13411
+ var schema464 = { type: "object", description: "A rolled-chord (arpeggio) indication on a chord event: a wavy vertical line to the left of the chord. Created on MusicXML `<arpeggiate>` import and authored natively.", properties: { direction: { type: "string", enum: ["up", "down", "auto"], description: "Roll direction. Omitted means the renderer's default (upward) arpeggio." } }, additionalProperties: !1 }, schema460 = { type: "object", description: "A trill marking on a note, optionally followed by a wavy extension line.", properties: { accidental: { type: "integer", enum: [-1, 0, 1], description: "Accidental on the auxiliary note: -1 = flat, 0 = natural, 1 = sharp." }, showSymbol: { type: "boolean", description: "Whether to display the initial trill symbol. Defaults to true; set false for an extension-only line." }, extension: { $ref: "#/$defs/trill-extension" } }, additionalProperties: !1 }, schema461 = { type: "object", description: "A wavy trill-extension line from this event to a target event.", required: ["target"], properties: { target: { type: "string", description: "ID of the event where the trill-extension line ends." }, targetEdge: { type: "string", enum: ["start", "end"], description: "Which rhythmic edge of the target event ends the line. Defaults to 'start'." } }, additionalProperties: !1 };
13412
+ function validate467(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13413
+ let vErrors = null, errors = 0, evaluated0 = validate467.evaluated;
13156
13414
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13157
13415
  for (let key0 in data)
13158
13416
  if (!(key0 === "accidental" || key0 === "showSymbol" || key0 === "extension")) {
@@ -13166,7 +13424,7 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13166
13424
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13167
13425
  }
13168
13426
  if (!(data0 === -1 || data0 === 0 || data0 === 1)) {
13169
- let err2 = { instancePath: instancePath + "/accidental", schemaPath: "#/properties/accidental/enum", keyword: "enum", params: { allowedValues: schema458.properties.accidental.enum }, message: "must be equal to one of the allowed values" };
13427
+ let err2 = { instancePath: instancePath + "/accidental", schemaPath: "#/properties/accidental/enum", keyword: "enum", params: { allowedValues: schema460.properties.accidental.enum }, message: "must be equal to one of the allowed values" };
13170
13428
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13171
13429
  }
13172
13430
  }
@@ -13197,7 +13455,7 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13197
13455
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13198
13456
  }
13199
13457
  if (!(data4 === "start" || data4 === "end")) {
13200
- let err8 = { instancePath: instancePath + "/extension/targetEdge", schemaPath: "#/$defs/trill-extension/properties/targetEdge/enum", keyword: "enum", params: { allowedValues: schema459.properties.targetEdge.enum }, message: "must be equal to one of the allowed values" };
13458
+ let err8 = { instancePath: instancePath + "/extension/targetEdge", schemaPath: "#/$defs/trill-extension/properties/targetEdge/enum", keyword: "enum", params: { allowedValues: schema461.properties.targetEdge.enum }, message: "must be equal to one of the allowed values" };
13201
13459
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
13202
13460
  }
13203
13461
  }
@@ -13210,11 +13468,11 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13210
13468
  let err10 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13211
13469
  vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
13212
13470
  }
13213
- return validate465.errors = vErrors, errors === 0;
13471
+ return validate467.errors = vErrors, errors === 0;
13214
13472
  }
13215
- validate465.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13216
- function validate464(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13217
- let vErrors = null, errors = 0, evaluated0 = validate464.evaluated;
13473
+ validate467.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13474
+ function validate466(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13475
+ let vErrors = null, errors = 0, evaluated0 = validate466.evaluated;
13218
13476
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13219
13477
  for (let key0 in data)
13220
13478
  if (!(key0 === "staccatissimoWedge" || key0 === "trill" || key0 === "ornaments" || key0 === "fingerings" || key0 === "arpeggio")) {
@@ -13236,7 +13494,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13236
13494
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13237
13495
  }
13238
13496
  if (!(data1 === "above" || data1 === "below" || data1 === "auto")) {
13239
- let err3 = { instancePath: instancePath + "/staccatissimoWedge/placement", schemaPath: "#/properties/staccatissimoWedge/properties/placement/enum", keyword: "enum", params: { allowedValues: schema457.properties.staccatissimoWedge.properties.placement.enum }, message: "must be equal to one of the allowed values" };
13497
+ let err3 = { instancePath: instancePath + "/staccatissimoWedge/placement", schemaPath: "#/properties/staccatissimoWedge/properties/placement/enum", keyword: "enum", params: { allowedValues: schema459.properties.staccatissimoWedge.properties.placement.enum }, message: "must be equal to one of the allowed values" };
13240
13498
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13241
13499
  }
13242
13500
  }
@@ -13245,7 +13503,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13245
13503
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13246
13504
  }
13247
13505
  }
13248
- if (data.trill !== void 0 && (validate465(data.trill, { instancePath: instancePath + "/trill", parentData: data, parentDataProperty: "trill", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate465.errors : vErrors.concat(validate465.errors), errors = vErrors.length)), data.ornaments !== void 0) {
13506
+ if (data.trill !== void 0 && (validate467(data.trill, { instancePath: instancePath + "/trill", parentData: data, parentDataProperty: "trill", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate467.errors : vErrors.concat(validate467.errors), errors = vErrors.length)), data.ornaments !== void 0) {
13249
13507
  let data3 = data.ornaments;
13250
13508
  if (Array.isArray(data3)) {
13251
13509
  let len0 = data3.length;
@@ -13256,7 +13514,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13256
13514
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13257
13515
  }
13258
13516
  if (!(data4 === "turn" || data4 === "invertedTurn" || data4 === "mordent" || data4 === "invertedMordent" || data4 === "shortTrill" || data4 === "trillMordent" || data4 === "delayedTurn" || data4 === "schleifer")) {
13259
- let err6 = { instancePath: instancePath + "/ornaments/" + i0, schemaPath: "#/$defs/ornament-type/enum", keyword: "enum", params: { allowedValues: schema460.enum }, message: "must be equal to one of the allowed values" };
13517
+ let err6 = { instancePath: instancePath + "/ornaments/" + i0, schemaPath: "#/$defs/ornament-type/enum", keyword: "enum", params: { allowedValues: schema462.enum }, message: "must be equal to one of the allowed values" };
13260
13518
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13261
13519
  }
13262
13520
  }
@@ -13323,7 +13581,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13323
13581
  vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
13324
13582
  }
13325
13583
  if (!(data9 === "up" || data9 === "down" || data9 === "auto")) {
13326
- let err17 = { instancePath: instancePath + "/arpeggio/direction", schemaPath: "#/$defs/arpeggio/properties/direction/enum", keyword: "enum", params: { allowedValues: schema462.properties.direction.enum }, message: "must be equal to one of the allowed values" };
13584
+ let err17 = { instancePath: instancePath + "/arpeggio/direction", schemaPath: "#/$defs/arpeggio/properties/direction/enum", keyword: "enum", params: { allowedValues: schema464.properties.direction.enum }, message: "must be equal to one of the allowed values" };
13327
13585
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
13328
13586
  }
13329
13587
  }
@@ -13336,11 +13594,11 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13336
13594
  let err19 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13337
13595
  vErrors === null ? vErrors = [err19] : vErrors.push(err19), errors++;
13338
13596
  }
13339
- return validate464.errors = vErrors, errors === 0;
13597
+ return validate466.errors = vErrors, errors === 0;
13340
13598
  }
13341
- validate464.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13342
- function validate467(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13343
- let vErrors = null, errors = 0, evaluated0 = validate467.evaluated;
13599
+ validate466.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13600
+ function validate469(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13601
+ let vErrors = null, errors = 0, evaluated0 = validate469.evaluated;
13344
13602
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13345
13603
  for (let key0 in data)
13346
13604
  if (key0 !== "notehead") {
@@ -13354,7 +13612,7 @@ function validate467(data, { instancePath = "", parentData, parentDataProperty,
13354
13612
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13355
13613
  }
13356
13614
  if (!(data0 === "normal" || data0 === "x" || data0 === "circleX" || data0 === "diamond" || data0 === "slash" || data0 === "triangleUp" || data0 === "triangleDown")) {
13357
- let err2 = { instancePath: instancePath + "/notehead", schemaPath: "#/$defs/notehead-shape/enum", keyword: "enum", params: { allowedValues: schema420.enum }, message: "must be equal to one of the allowed values" };
13615
+ let err2 = { instancePath: instancePath + "/notehead", schemaPath: "#/$defs/notehead-shape/enum", keyword: "enum", params: { allowedValues: schema422.enum }, message: "must be equal to one of the allowed values" };
13358
13616
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13359
13617
  }
13360
13618
  }
@@ -13362,11 +13620,11 @@ function validate467(data, { instancePath = "", parentData, parentDataProperty,
13362
13620
  let err3 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13363
13621
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13364
13622
  }
13365
- return validate467.errors = vErrors, errors === 0;
13623
+ return validate469.errors = vErrors, errors === 0;
13366
13624
  }
13367
- validate467.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13368
- function validate469(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13369
- let vErrors = null, errors = 0, evaluated0 = validate469.evaluated;
13625
+ validate469.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13626
+ function validate471(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13627
+ let vErrors = null, errors = 0, evaluated0 = validate471.evaluated;
13370
13628
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13371
13629
  for (let key0 in data)
13372
13630
  if (!(key0 === "p0" || key0 === "p1" || key0 === "p2" || key0 === "p3")) {
@@ -13465,27 +13723,27 @@ function validate469(data, { instancePath = "", parentData, parentDataProperty,
13465
13723
  let err17 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13466
13724
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
13467
13725
  }
13468
- return validate469.errors = vErrors, errors === 0;
13726
+ return validate471.errors = vErrors, errors === 0;
13469
13727
  }
13470
- validate469.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13471
- function validate468(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13472
- let vErrors = null, errors = 0, evaluated0 = validate468.evaluated;
13728
+ validate471.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13729
+ function validate470(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13730
+ let vErrors = null, errors = 0, evaluated0 = validate470.evaluated;
13473
13731
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13474
13732
  for (let key0 in data)
13475
13733
  if (key0 !== "shape") {
13476
13734
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
13477
13735
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
13478
13736
  }
13479
- data.shape !== void 0 && (validate469(data.shape, { instancePath: instancePath + "/shape", parentData: data, parentDataProperty: "shape", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate469.errors : vErrors.concat(validate469.errors), errors = vErrors.length));
13737
+ data.shape !== void 0 && (validate471(data.shape, { instancePath: instancePath + "/shape", parentData: data, parentDataProperty: "shape", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate471.errors : vErrors.concat(validate471.errors), errors = vErrors.length));
13480
13738
  } else {
13481
13739
  let err1 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13482
13740
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13483
13741
  }
13484
- return validate468.errors = vErrors, errors === 0;
13742
+ return validate470.errors = vErrors, errors === 0;
13485
13743
  }
13486
- validate468.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13487
- function validate471(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13488
- let vErrors = null, errors = 0, evaluated0 = validate471.evaluated;
13744
+ validate470.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13745
+ function validate473(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13746
+ let vErrors = null, errors = 0, evaluated0 = validate473.evaluated;
13489
13747
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13490
13748
  for (let key0 in data)
13491
13749
  if (key0 !== "derived") {
@@ -13507,11 +13765,11 @@ function validate471(data, { instancePath = "", parentData, parentDataProperty,
13507
13765
  let err3 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13508
13766
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13509
13767
  }
13510
- return validate471.errors = vErrors, errors === 0;
13768
+ return validate473.errors = vErrors, errors === 0;
13511
13769
  }
13512
- validate471.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13513
- function validate472(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13514
- let vErrors = null, errors = 0, evaluated0 = validate472.evaluated;
13770
+ validate473.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13771
+ function validate474(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13772
+ let vErrors = null, errors = 0, evaluated0 = validate474.evaluated;
13515
13773
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data))
13516
13774
  for (let key0 in data) {
13517
13775
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
@@ -13521,20 +13779,20 @@ function validate472(data, { instancePath = "", parentData, parentDataProperty,
13521
13779
  let err1 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13522
13780
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13523
13781
  }
13524
- return validate472.errors = vErrors, errors === 0;
13782
+ return validate474.errors = vErrors, errors === 0;
13525
13783
  }
13526
- validate472.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13527
- var schema490 = { type: "object", description: "A forced system or page start within otherwise automatic score flow.", required: ["measure", "kind"], properties: { measure: { type: "string", minLength: 1 }, kind: { type: "string", enum: ["system", "page"] } }, additionalProperties: !1 }, schema474 = { type: "object", properties: { width: { type: "number", exclusiveMinimum: 0 }, height: { type: "number", exclusiveMinimum: 0 }, orientation: { type: "string", enum: ["portrait", "landscape"] }, margins: { $ref: "#/$defs/page-margins" }, spatiumMm: { type: "number", exclusiveMinimum: 0 }, pageTurns: { $ref: "#/$defs/page-turn-settings" } }, additionalProperties: !1 };
13528
- var schema476 = { type: "object", required: ["enabled"], properties: { enabled: { type: "boolean" }, preset: { type: "string", enum: ["relaxed", "professional"] }, comfortableSecs: { type: "number", minimum: 0 }, vsSecs: { type: "number", minimum: 0 }, minAcceptableSecs: { type: "number", minimum: 0 }, targetFillFraction: { type: "number", minimum: 0, maximum: 1 }, minFillFraction: { type: "number", minimum: 0, maximum: 1 }, verticalJustifyThreshold: { type: "number", minimum: 0, maximum: 1 }, allowPartialPages: { type: "boolean" }, allowIntentionalBlanks: { type: "boolean" }, titlePage: { type: "string", enum: ["auto", "always", "never"] }, firstPageRecto: { type: "boolean" }, emitVsMarks: { type: "boolean" }, defaultBpm: { type: "number", exclusiveMinimum: 0 }, weights: { $ref: "#/$defs/page-turn-weights" } }, additionalProperties: !1 };
13529
- function validate475(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13530
- let vErrors = null, errors = 0, evaluated0 = validate475.evaluated;
13784
+ validate474.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13785
+ var schema492 = { type: "object", description: "A forced system or page start within otherwise automatic score flow.", required: ["measure", "kind"], properties: { measure: { type: "string", minLength: 1 }, kind: { type: "string", enum: ["system", "page"] } }, additionalProperties: !1 }, schema476 = { type: "object", properties: { width: { type: "number", exclusiveMinimum: 0 }, height: { type: "number", exclusiveMinimum: 0 }, orientation: { type: "string", enum: ["portrait", "landscape"] }, margins: { $ref: "#/$defs/page-margins" }, spatiumMm: { type: "number", exclusiveMinimum: 0 }, pageTurns: { $ref: "#/$defs/page-turn-settings" } }, additionalProperties: !1 };
13786
+ var schema478 = { type: "object", required: ["enabled"], properties: { enabled: { type: "boolean" }, preset: { type: "string", enum: ["relaxed", "professional"] }, comfortableSecs: { type: "number", minimum: 0 }, vsSecs: { type: "number", minimum: 0 }, minAcceptableSecs: { type: "number", minimum: 0 }, targetFillFraction: { type: "number", minimum: 0, maximum: 1 }, minFillFraction: { type: "number", minimum: 0, maximum: 1 }, verticalJustifyThreshold: { type: "number", minimum: 0, maximum: 1 }, allowPartialPages: { type: "boolean" }, allowIntentionalBlanks: { type: "boolean" }, titlePage: { type: "string", enum: ["auto", "always", "never"] }, firstPageRecto: { type: "boolean" }, emitVsMarks: { type: "boolean" }, defaultBpm: { type: "number", exclusiveMinimum: 0 }, weights: { $ref: "#/$defs/page-turn-weights" } }, additionalProperties: !1 };
13787
+ function validate477(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13788
+ let vErrors = null, errors = 0, evaluated0 = validate477.evaluated;
13531
13789
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13532
13790
  if (data.enabled === void 0) {
13533
13791
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "enabled" }, message: "must have required property 'enabled'" };
13534
13792
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
13535
13793
  }
13536
13794
  for (let key0 in data)
13537
- if (!func1.call(schema476.properties, key0)) {
13795
+ if (!func1.call(schema478.properties, key0)) {
13538
13796
  let err1 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
13539
13797
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13540
13798
  }
@@ -13549,7 +13807,7 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13549
13807
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13550
13808
  }
13551
13809
  if (!(data1 === "relaxed" || data1 === "professional")) {
13552
- let err4 = { instancePath: instancePath + "/preset", schemaPath: "#/properties/preset/enum", keyword: "enum", params: { allowedValues: schema476.properties.preset.enum }, message: "must be equal to one of the allowed values" };
13810
+ let err4 = { instancePath: instancePath + "/preset", schemaPath: "#/properties/preset/enum", keyword: "enum", params: { allowedValues: schema478.properties.preset.enum }, message: "must be equal to one of the allowed values" };
13553
13811
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13554
13812
  }
13555
13813
  }
@@ -13652,7 +13910,7 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13652
13910
  vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
13653
13911
  }
13654
13912
  if (!(data10 === "auto" || data10 === "always" || data10 === "never")) {
13655
- let err23 = { instancePath: instancePath + "/titlePage", schemaPath: "#/properties/titlePage/enum", keyword: "enum", params: { allowedValues: schema476.properties.titlePage.enum }, message: "must be equal to one of the allowed values" };
13913
+ let err23 = { instancePath: instancePath + "/titlePage", schemaPath: "#/properties/titlePage/enum", keyword: "enum", params: { allowedValues: schema478.properties.titlePage.enum }, message: "must be equal to one of the allowed values" };
13656
13914
  vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
13657
13915
  }
13658
13916
  }
@@ -13717,11 +13975,11 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13717
13975
  let err36 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13718
13976
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
13719
13977
  }
13720
- return validate475.errors = vErrors, errors === 0;
13978
+ return validate477.errors = vErrors, errors === 0;
13721
13979
  }
13722
- validate475.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13723
- function validate474(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13724
- let vErrors = null, errors = 0, evaluated0 = validate474.evaluated;
13980
+ validate477.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13981
+ function validate476(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13982
+ let vErrors = null, errors = 0, evaluated0 = validate476.evaluated;
13725
13983
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13726
13984
  for (let key0 in data)
13727
13985
  if (!(key0 === "width" || key0 === "height" || key0 === "orientation" || key0 === "margins" || key0 === "spatiumMm" || key0 === "pageTurns")) {
@@ -13759,7 +14017,7 @@ function validate474(data, { instancePath = "", parentData, parentDataProperty,
13759
14017
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13760
14018
  }
13761
14019
  if (!(data2 === "portrait" || data2 === "landscape")) {
13762
- let err6 = { instancePath: instancePath + "/orientation", schemaPath: "#/properties/orientation/enum", keyword: "enum", params: { allowedValues: schema474.properties.orientation.enum }, message: "must be equal to one of the allowed values" };
14020
+ let err6 = { instancePath: instancePath + "/orientation", schemaPath: "#/properties/orientation/enum", keyword: "enum", params: { allowedValues: schema476.properties.orientation.enum }, message: "must be equal to one of the allowed values" };
13763
14021
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13764
14022
  }
13765
14023
  }
@@ -13852,17 +14110,17 @@ function validate474(data, { instancePath = "", parentData, parentDataProperty,
13852
14110
  vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
13853
14111
  }
13854
14112
  }
13855
- data.pageTurns !== void 0 && (validate475(data.pageTurns, { instancePath: instancePath + "/pageTurns", parentData: data, parentDataProperty: "pageTurns", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate475.errors : vErrors.concat(validate475.errors), errors = vErrors.length));
14113
+ data.pageTurns !== void 0 && (validate477(data.pageTurns, { instancePath: instancePath + "/pageTurns", parentData: data, parentDataProperty: "pageTurns", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate477.errors : vErrors.concat(validate477.errors), errors = vErrors.length));
13856
14114
  } else {
13857
14115
  let err23 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13858
14116
  vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
13859
14117
  }
13860
- return validate474.errors = vErrors, errors === 0;
14118
+ return validate476.errors = vErrors, errors === 0;
13861
14119
  }
13862
- validate474.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13863
- var schema479 = { type: "string", enum: ["full", "short", "hidden"] };
13864
- function validate478(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13865
- let vErrors = null, errors = 0, evaluated0 = validate478.evaluated;
14120
+ validate476.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14121
+ var schema481 = { type: "string", enum: ["full", "short", "hidden"] };
14122
+ function validate480(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14123
+ let vErrors = null, errors = 0, evaluated0 = validate480.evaluated;
13866
14124
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13867
14125
  if (data.firstSystem === void 0) {
13868
14126
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "firstSystem" }, message: "must have required property 'firstSystem'" };
@@ -13884,7 +14142,7 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13884
14142
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13885
14143
  }
13886
14144
  if (!(data0 === "full" || data0 === "short" || data0 === "hidden")) {
13887
- let err4 = { instancePath: instancePath + "/firstSystem", schemaPath: "#/$defs/instrument-name-display-policy/enum", keyword: "enum", params: { allowedValues: schema479.enum }, message: "must be equal to one of the allowed values" };
14145
+ let err4 = { instancePath: instancePath + "/firstSystem", schemaPath: "#/$defs/instrument-name-display-policy/enum", keyword: "enum", params: { allowedValues: schema481.enum }, message: "must be equal to one of the allowed values" };
13888
14146
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13889
14147
  }
13890
14148
  }
@@ -13895,7 +14153,7 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13895
14153
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13896
14154
  }
13897
14155
  if (!(data1 === "full" || data1 === "short" || data1 === "hidden")) {
13898
- let err6 = { instancePath: instancePath + "/subsequentSystems", schemaPath: "#/$defs/instrument-name-display-policy/enum", keyword: "enum", params: { allowedValues: schema479.enum }, message: "must be equal to one of the allowed values" };
14156
+ let err6 = { instancePath: instancePath + "/subsequentSystems", schemaPath: "#/$defs/instrument-name-display-policy/enum", keyword: "enum", params: { allowedValues: schema481.enum }, message: "must be equal to one of the allowed values" };
13899
14157
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13900
14158
  }
13901
14159
  }
@@ -13903,12 +14161,12 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13903
14161
  let err7 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13904
14162
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13905
14163
  }
13906
- return validate478.errors = vErrors, errors === 0;
14164
+ return validate480.errors = vErrors, errors === 0;
13907
14165
  }
13908
- validate478.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13909
- var schema481 = { type: "object", required: ["id", "locator", "placement", "width", "content"], properties: { id: { type: "string", minLength: 1 }, locator: { $ref: "#/$defs/text-frame-locator" }, placement: { $ref: "#/$defs/text-frame-placement" }, width: { $ref: "#/$defs/text-frame-width" }, content: { $ref: "#/$defs/text-content" }, horizontalAlignment: { type: "string", enum: ["left", "center", "right"], description: "Horizontal alignment of the frame at its page anchor, independent of paragraph justification." }, paragraphJustification: { type: "string", enum: ["left", "center", "right", "justify"], description: "Paragraph line justification within the frame, independent of frame alignment." }, padding: { type: "number", minimum: 0, description: "Optional inset on all sides in staff spaces." }, border: { type: "string", enum: ["none", "solid"], description: "Optional frame border style." }, eraseBackground: { type: "boolean", description: "Erase underlying ink within the frame using the surface background. Omitted or false preserves underlying ink; no color is stored." }, sourceReference: { $ref: "#/$defs/text-frame-source-reference" }, staffAttachment: { $ref: "#/$defs/text-frame-staff-attachment" } }, additionalProperties: !1 };
13910
- function validate482(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13911
- let vErrors = null, errors = 0, evaluated0 = validate482.evaluated;
14166
+ validate480.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14167
+ var schema483 = { type: "object", required: ["id", "locator", "placement", "width", "content"], properties: { id: { type: "string", minLength: 1 }, locator: { $ref: "#/$defs/text-frame-locator" }, placement: { $ref: "#/$defs/text-frame-placement" }, width: { $ref: "#/$defs/text-frame-width" }, content: { $ref: "#/$defs/text-content" }, horizontalAlignment: { type: "string", enum: ["left", "center", "right"], description: "Horizontal alignment of the frame at its page anchor, independent of paragraph justification." }, paragraphJustification: { type: "string", enum: ["left", "center", "right", "justify"], description: "Paragraph line justification within the frame, independent of frame alignment." }, padding: { type: "number", minimum: 0, description: "Optional inset on all sides in staff spaces." }, border: { type: "string", enum: ["none", "solid"], description: "Optional frame border style." }, eraseBackground: { type: "boolean", description: "Erase underlying ink within the frame using the surface background. Omitted or false preserves underlying ink; no color is stored." }, sourceReference: { $ref: "#/$defs/text-frame-source-reference" }, staffAttachment: { $ref: "#/$defs/text-frame-staff-attachment" } }, additionalProperties: !1 };
14168
+ function validate484(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14169
+ let vErrors = null, errors = 0, evaluated0 = validate484.evaluated;
13912
14170
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13913
14171
  if (data.partId === void 0) {
13914
14172
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "partId" }, message: "must have required property 'partId'" };
@@ -14102,11 +14360,11 @@ function validate482(data, { instancePath = "", parentData, parentDataProperty,
14102
14360
  let err35 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14103
14361
  vErrors === null ? vErrors = [err35] : vErrors.push(err35), errors++;
14104
14362
  }
14105
- return validate482.errors = vErrors, errors === 0;
14363
+ return validate484.errors = vErrors, errors === 0;
14106
14364
  }
14107
- validate482.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14108
- function validate480(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14109
- let vErrors = null, errors = 0, evaluated0 = validate480.evaluated;
14365
+ validate484.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14366
+ function validate482(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14367
+ let vErrors = null, errors = 0, evaluated0 = validate482.evaluated;
14110
14368
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14111
14369
  if (data.id === void 0) {
14112
14370
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -14129,7 +14387,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14129
14387
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
14130
14388
  }
14131
14389
  for (let key0 in data)
14132
- if (!func1.call(schema481.properties, key0)) {
14390
+ if (!func1.call(schema483.properties, key0)) {
14133
14391
  let err5 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14134
14392
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
14135
14393
  }
@@ -14309,7 +14567,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14309
14567
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
14310
14568
  }
14311
14569
  if (!(data10 === "top" || data10 === "right" || data10 === "bottom" || data10 === "left" || data10 === "top-left" || data10 === "top-right" || data10 === "bottom-right" || data10 === "bottom-left")) {
14312
- let err37 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema430.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
14570
+ let err37 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema432.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
14313
14571
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
14314
14572
  }
14315
14573
  }
@@ -14442,7 +14700,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14442
14700
  vErrors === null ? vErrors = [err61] : vErrors.push(err61), errors++;
14443
14701
  }
14444
14702
  if (!(data20 === "left" || data20 === "center" || data20 === "right")) {
14445
- let err62 = { instancePath: instancePath + "/horizontalAlignment", schemaPath: "#/properties/horizontalAlignment/enum", keyword: "enum", params: { allowedValues: schema481.properties.horizontalAlignment.enum }, message: "must be equal to one of the allowed values" };
14703
+ let err62 = { instancePath: instancePath + "/horizontalAlignment", schemaPath: "#/properties/horizontalAlignment/enum", keyword: "enum", params: { allowedValues: schema483.properties.horizontalAlignment.enum }, message: "must be equal to one of the allowed values" };
14446
14704
  vErrors === null ? vErrors = [err62] : vErrors.push(err62), errors++;
14447
14705
  }
14448
14706
  }
@@ -14453,7 +14711,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14453
14711
  vErrors === null ? vErrors = [err63] : vErrors.push(err63), errors++;
14454
14712
  }
14455
14713
  if (!(data21 === "left" || data21 === "center" || data21 === "right" || data21 === "justify")) {
14456
- let err64 = { instancePath: instancePath + "/paragraphJustification", schemaPath: "#/properties/paragraphJustification/enum", keyword: "enum", params: { allowedValues: schema481.properties.paragraphJustification.enum }, message: "must be equal to one of the allowed values" };
14714
+ let err64 = { instancePath: instancePath + "/paragraphJustification", schemaPath: "#/properties/paragraphJustification/enum", keyword: "enum", params: { allowedValues: schema483.properties.paragraphJustification.enum }, message: "must be equal to one of the allowed values" };
14457
14715
  vErrors === null ? vErrors = [err64] : vErrors.push(err64), errors++;
14458
14716
  }
14459
14717
  }
@@ -14476,7 +14734,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14476
14734
  vErrors === null ? vErrors = [err67] : vErrors.push(err67), errors++;
14477
14735
  }
14478
14736
  if (!(data23 === "none" || data23 === "solid")) {
14479
- let err68 = { instancePath: instancePath + "/border", schemaPath: "#/properties/border/enum", keyword: "enum", params: { allowedValues: schema481.properties.border.enum }, message: "must be equal to one of the allowed values" };
14737
+ let err68 = { instancePath: instancePath + "/border", schemaPath: "#/properties/border/enum", keyword: "enum", params: { allowedValues: schema483.properties.border.enum }, message: "must be equal to one of the allowed values" };
14480
14738
  vErrors === null ? vErrors = [err68] : vErrors.push(err68), errors++;
14481
14739
  }
14482
14740
  }
@@ -14525,28 +14783,28 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14525
14783
  vErrors === null ? vErrors = [err76] : vErrors.push(err76), errors++;
14526
14784
  }
14527
14785
  }
14528
- data.staffAttachment !== void 0 && (validate482(data.staffAttachment, { instancePath: instancePath + "/staffAttachment", parentData: data, parentDataProperty: "staffAttachment", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate482.errors : vErrors.concat(validate482.errors), errors = vErrors.length));
14786
+ data.staffAttachment !== void 0 && (validate484(data.staffAttachment, { instancePath: instancePath + "/staffAttachment", parentData: data, parentDataProperty: "staffAttachment", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate484.errors : vErrors.concat(validate484.errors), errors = vErrors.length));
14529
14787
  } else {
14530
14788
  let err77 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14531
14789
  vErrors === null ? vErrors = [err77] : vErrors.push(err77), errors++;
14532
14790
  }
14533
- return validate480.errors = vErrors, errors === 0;
14791
+ return validate482.errors = vErrors, errors === 0;
14534
14792
  }
14535
- validate480.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14536
- function validate473(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14537
- let vErrors = null, errors = 0, evaluated0 = validate473.evaluated;
14793
+ validate482.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14794
+ function validate475(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14795
+ let vErrors = null, errors = 0, evaluated0 = validate475.evaluated;
14538
14796
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14539
14797
  for (let key0 in data)
14540
14798
  if (!(key0 === "pageSetup" || key0 === "instrumentNameDisplay" || key0 === "textFrames" || key0 === "layoutBreaks")) {
14541
14799
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14542
14800
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
14543
14801
  }
14544
- if (data.pageSetup !== void 0 && (validate474(data.pageSetup, { instancePath: instancePath + "/pageSetup", parentData: data, parentDataProperty: "pageSetup", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate474.errors : vErrors.concat(validate474.errors), errors = vErrors.length)), data.instrumentNameDisplay !== void 0 && (validate478(data.instrumentNameDisplay, { instancePath: instancePath + "/instrumentNameDisplay", parentData: data, parentDataProperty: "instrumentNameDisplay", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate478.errors : vErrors.concat(validate478.errors), errors = vErrors.length)), data.textFrames !== void 0) {
14802
+ if (data.pageSetup !== void 0 && (validate476(data.pageSetup, { instancePath: instancePath + "/pageSetup", parentData: data, parentDataProperty: "pageSetup", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate476.errors : vErrors.concat(validate476.errors), errors = vErrors.length)), data.instrumentNameDisplay !== void 0 && (validate480(data.instrumentNameDisplay, { instancePath: instancePath + "/instrumentNameDisplay", parentData: data, parentDataProperty: "instrumentNameDisplay", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate480.errors : vErrors.concat(validate480.errors), errors = vErrors.length)), data.textFrames !== void 0) {
14545
14803
  let data2 = data.textFrames;
14546
14804
  if (Array.isArray(data2)) {
14547
14805
  let len0 = data2.length;
14548
14806
  for (let i0 = 0; i0 < len0; i0++)
14549
- validate480(data2[i0], { instancePath: instancePath + "/textFrames/" + i0, parentData: data2, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate480.errors : vErrors.concat(validate480.errors), errors = vErrors.length);
14807
+ validate482(data2[i0], { instancePath: instancePath + "/textFrames/" + i0, parentData: data2, parentDataProperty: i0, rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate482.errors : vErrors.concat(validate482.errors), errors = vErrors.length);
14550
14808
  } else {
14551
14809
  let err1 = { instancePath: instancePath + "/textFrames", schemaPath: "#/properties/textFrames/type", keyword: "type", params: { type: "array" }, message: "must be array" };
14552
14810
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
@@ -14591,7 +14849,7 @@ function validate473(data, { instancePath = "", parentData, parentDataProperty,
14591
14849
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
14592
14850
  }
14593
14851
  if (!(data7 === "system" || data7 === "page")) {
14594
- let err8 = { instancePath: instancePath + "/layoutBreaks/" + i1 + "/kind", schemaPath: "#/$defs/layout-break/properties/kind/enum", keyword: "enum", params: { allowedValues: schema490.properties.kind.enum }, message: "must be equal to one of the allowed values" };
14852
+ let err8 = { instancePath: instancePath + "/layoutBreaks/" + i1 + "/kind", schemaPath: "#/$defs/layout-break/properties/kind/enum", keyword: "enum", params: { allowedValues: schema492.properties.kind.enum }, message: "must be equal to one of the allowed values" };
14595
14853
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
14596
14854
  }
14597
14855
  }
@@ -14609,12 +14867,12 @@ function validate473(data, { instancePath = "", parentData, parentDataProperty,
14609
14867
  let err11 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14610
14868
  vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
14611
14869
  }
14612
- return validate473.errors = vErrors, errors === 0;
14870
+ return validate475.errors = vErrors, errors === 0;
14613
14871
  }
14614
- validate473.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14615
- var textFrame = validate485;
14616
- function validate485(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14617
- let vErrors = null, errors = 0, evaluated0 = validate485.evaluated;
14872
+ validate475.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14873
+ var textFrame = validate487;
14874
+ function validate487(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14875
+ let vErrors = null, errors = 0, evaluated0 = validate487.evaluated;
14618
14876
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14619
14877
  if (data.id === void 0) {
14620
14878
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -14637,7 +14895,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14637
14895
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
14638
14896
  }
14639
14897
  for (let key0 in data)
14640
- if (!func1.call(schema481.properties, key0)) {
14898
+ if (!func1.call(schema483.properties, key0)) {
14641
14899
  let err5 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14642
14900
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
14643
14901
  }
@@ -14817,7 +15075,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14817
15075
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
14818
15076
  }
14819
15077
  if (!(data10 === "top" || data10 === "right" || data10 === "bottom" || data10 === "left" || data10 === "top-left" || data10 === "top-right" || data10 === "bottom-right" || data10 === "bottom-left")) {
14820
- let err37 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema430.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
15078
+ let err37 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema432.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
14821
15079
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
14822
15080
  }
14823
15081
  }
@@ -14950,7 +15208,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14950
15208
  vErrors === null ? vErrors = [err61] : vErrors.push(err61), errors++;
14951
15209
  }
14952
15210
  if (!(data20 === "left" || data20 === "center" || data20 === "right")) {
14953
- let err62 = { instancePath: instancePath + "/horizontalAlignment", schemaPath: "#/properties/horizontalAlignment/enum", keyword: "enum", params: { allowedValues: schema481.properties.horizontalAlignment.enum }, message: "must be equal to one of the allowed values" };
15211
+ let err62 = { instancePath: instancePath + "/horizontalAlignment", schemaPath: "#/properties/horizontalAlignment/enum", keyword: "enum", params: { allowedValues: schema483.properties.horizontalAlignment.enum }, message: "must be equal to one of the allowed values" };
14954
15212
  vErrors === null ? vErrors = [err62] : vErrors.push(err62), errors++;
14955
15213
  }
14956
15214
  }
@@ -14961,7 +15219,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14961
15219
  vErrors === null ? vErrors = [err63] : vErrors.push(err63), errors++;
14962
15220
  }
14963
15221
  if (!(data21 === "left" || data21 === "center" || data21 === "right" || data21 === "justify")) {
14964
- let err64 = { instancePath: instancePath + "/paragraphJustification", schemaPath: "#/properties/paragraphJustification/enum", keyword: "enum", params: { allowedValues: schema481.properties.paragraphJustification.enum }, message: "must be equal to one of the allowed values" };
15222
+ let err64 = { instancePath: instancePath + "/paragraphJustification", schemaPath: "#/properties/paragraphJustification/enum", keyword: "enum", params: { allowedValues: schema483.properties.paragraphJustification.enum }, message: "must be equal to one of the allowed values" };
14965
15223
  vErrors === null ? vErrors = [err64] : vErrors.push(err64), errors++;
14966
15224
  }
14967
15225
  }
@@ -14984,7 +15242,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14984
15242
  vErrors === null ? vErrors = [err67] : vErrors.push(err67), errors++;
14985
15243
  }
14986
15244
  if (!(data23 === "none" || data23 === "solid")) {
14987
- let err68 = { instancePath: instancePath + "/border", schemaPath: "#/properties/border/enum", keyword: "enum", params: { allowedValues: schema481.properties.border.enum }, message: "must be equal to one of the allowed values" };
15245
+ let err68 = { instancePath: instancePath + "/border", schemaPath: "#/properties/border/enum", keyword: "enum", params: { allowedValues: schema483.properties.border.enum }, message: "must be equal to one of the allowed values" };
14988
15246
  vErrors === null ? vErrors = [err68] : vErrors.push(err68), errors++;
14989
15247
  }
14990
15248
  }
@@ -15033,17 +15291,17 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
15033
15291
  vErrors === null ? vErrors = [err76] : vErrors.push(err76), errors++;
15034
15292
  }
15035
15293
  }
15036
- data.staffAttachment !== void 0 && (validate482(data.staffAttachment, { instancePath: instancePath + "/staffAttachment", parentData: data, parentDataProperty: "staffAttachment", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate482.errors : vErrors.concat(validate482.errors), errors = vErrors.length));
15294
+ data.staffAttachment !== void 0 && (validate484(data.staffAttachment, { instancePath: instancePath + "/staffAttachment", parentData: data, parentDataProperty: "staffAttachment", rootData, dynamicAnchors }) || (vErrors = vErrors === null ? validate484.errors : vErrors.concat(validate484.errors), errors = vErrors.length));
15037
15295
  } else {
15038
15296
  let err77 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15039
15297
  vErrors === null ? vErrors = [err77] : vErrors.push(err77), errors++;
15040
15298
  }
15041
- return validate485.errors = vErrors, errors === 0;
15299
+ return validate487.errors = vErrors, errors === 0;
15042
15300
  }
15043
- validate485.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15044
- var systemText = validate488;
15045
- function validate488(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15046
- let vErrors = null, errors = 0, evaluated0 = validate488.evaluated;
15301
+ validate487.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15302
+ var systemText = validate490;
15303
+ function validate490(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15304
+ let vErrors = null, errors = 0, evaluated0 = validate490.evaluated;
15047
15305
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15048
15306
  if (data.id === void 0) {
15049
15307
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -15283,12 +15541,12 @@ function validate488(data, { instancePath = "", parentData, parentDataProperty,
15283
15541
  let err42 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15284
15542
  vErrors === null ? vErrors = [err42] : vErrors.push(err42), errors++;
15285
15543
  }
15286
- return validate488.errors = vErrors, errors === 0;
15544
+ return validate490.errors = vErrors, errors === 0;
15287
15545
  }
15288
- validate488.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15289
- var staffTextFramePresentation = validate490;
15290
- function validate490(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15291
- let vErrors = null, errors = 0, evaluated0 = validate490.evaluated;
15546
+ validate490.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15547
+ var staffTextFramePresentation = validate492;
15548
+ function validate492(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15549
+ let vErrors = null, errors = 0, evaluated0 = validate492.evaluated;
15292
15550
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15293
15551
  for (let key0 in data)
15294
15552
  if (!(key0 === "width" || key0 === "horizontalAlignment" || key0 === "paragraphJustification" || key0 === "padding" || key0 === "border" || key0 === "eraseBackground")) {
@@ -15385,12 +15643,12 @@ function validate490(data, { instancePath = "", parentData, parentDataProperty,
15385
15643
  let err17 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15386
15644
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
15387
15645
  }
15388
- return validate490.errors = vErrors, errors === 0;
15646
+ return validate492.errors = vErrors, errors === 0;
15389
15647
  }
15390
- validate490.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15391
- var textFramePagePosition = validate491;
15392
- function validate491(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15393
- let vErrors = null, errors = 0, evaluated0 = validate491.evaluated;
15648
+ validate492.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15649
+ var textFramePagePosition = validate493;
15650
+ function validate493(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15651
+ let vErrors = null, errors = 0, evaluated0 = validate493.evaluated;
15394
15652
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15395
15653
  if (data.id === void 0) {
15396
15654
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -15600,7 +15858,7 @@ function validate491(data, { instancePath = "", parentData, parentDataProperty,
15600
15858
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
15601
15859
  }
15602
15860
  if (!(data11 === "top" || data11 === "right" || data11 === "bottom" || data11 === "left" || data11 === "top-left" || data11 === "top-right" || data11 === "bottom-right" || data11 === "bottom-left")) {
15603
- let err38 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema430.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
15861
+ let err38 = { instancePath: instancePath + "/placement/anchor", schemaPath: "#/$defs/text-frame-placement/properties/anchor/enum", keyword: "enum", params: { allowedValues: schema432.properties.anchor.enum }, message: "must be equal to one of the allowed values" };
15604
15862
  vErrors === null ? vErrors = [err38] : vErrors.push(err38), errors++;
15605
15863
  }
15606
15864
  }
@@ -15771,9 +16029,9 @@ function validate491(data, { instancePath = "", parentData, parentDataProperty,
15771
16029
  let err69 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15772
16030
  vErrors === null ? vErrors = [err69] : vErrors.push(err69), errors++;
15773
16031
  }
15774
- return validate491.errors = vErrors, errors === 0;
16032
+ return validate493.errors = vErrors, errors === 0;
15775
16033
  }
15776
- validate491.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
16034
+ validate493.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15777
16035
 
15778
16036
  // packages/format/src/mnx/staffTextFrame.ts
15779
16037
  function parseTextFramePagePosition(raw) {
@@ -16081,12 +16339,14 @@ function rejectRetiredNavigationExtensions(raw) {
16081
16339
  );
16082
16340
  }
16083
16341
  function parseGradualTempo(raw) {
16342
+ if (!gradualTempo(raw))
16343
+ throw new Error("Invalid tempo ramp: provide positive tempo targets, one target mode, and a supported curve.");
16084
16344
  let gt = {
16085
16345
  position: parseRhythmicPosition(raw.position),
16086
16346
  end: parseMeasureRhythmicPosition(raw.end),
16087
- endBpm: raw.endBpm
16347
+ ...raw.endBpm !== void 0 ? { endBpm: raw.endBpm } : { endRatio: raw.endRatio }
16088
16348
  };
16089
- return raw.startBpm !== void 0 && (gt.startBpm = raw.startBpm), raw.kind && (gt.kind = raw.kind), gt;
16349
+ return raw.startBpm !== void 0 && (gt.startBpm = raw.startBpm), raw.kind && (gt.kind = raw.kind), raw.curve && (gt.curve = raw.curve), raw.systemTextId && (gt.systemTextId = raw.systemTextId), gt;
16090
16350
  }
16091
16351
  function parseTimeSignature(raw) {
16092
16352
  let ts = {
@@ -16261,17 +16521,17 @@ function parseSlur(raw) {
16261
16521
  raw.side && (slur.side = raw.side), raw.sideEnd && (slur.sideEnd = raw.sideEnd), raw.lineType && (slur.lineType = raw.lineType), raw.startNote && (slur.startNote = raw.startNote), raw.endNote && (slur.endNote = raw.endNote);
16262
16522
  let shapeObj = raw._x?.viritura?.shape;
16263
16523
  if (shapeObj) {
16264
- let shape = {}, readPair = (v) => {
16524
+ let shape2 = {}, readPair = (v) => {
16265
16525
  if (Array.isArray(v) && v.length === 2 && typeof v[0] == "number" && typeof v[1] == "number")
16266
16526
  return [v[0], v[1]];
16267
16527
  }, p0 = readPair(shapeObj.p0);
16268
- p0 && (shape.p0 = p0);
16528
+ p0 && (shape2.p0 = p0);
16269
16529
  let p1 = readPair(shapeObj.p1);
16270
- p1 && (shape.p1 = p1);
16530
+ p1 && (shape2.p1 = p1);
16271
16531
  let p2 = readPair(shapeObj.p2);
16272
- p2 && (shape.p2 = p2);
16532
+ p2 && (shape2.p2 = p2);
16273
16533
  let p3 = readPair(shapeObj.p3);
16274
- p3 && (shape.p3 = p3), (shape.p0 || shape.p1 || shape.p2 || shape.p3) && (slur.shape = shape);
16534
+ p3 && (shape2.p3 = p3), (shape2.p0 || shape2.p1 || shape2.p2 || shape2.p3) && (slur.shape = shape2);
16275
16535
  }
16276
16536
  return slur;
16277
16537
  }
@@ -17234,6 +17494,20 @@ var TempoModel = class _TempoModel {
17234
17494
  constructor(knots) {
17235
17495
  this.knots = knots;
17236
17496
  }
17497
+ /** Add holds without changing the already resolved BPM curves. */
17498
+ withInsertions(insertions) {
17499
+ if (insertions.length === 0) return this;
17500
+ let regions = this.knots.map((knot, index) => {
17501
+ let endBeat = this.knots[index + 1]?.beat ?? 1 / 0;
17502
+ return {
17503
+ startBeat: knot.beat,
17504
+ endBeat,
17505
+ startBpm: knot.bpm,
17506
+ endBpm: Number.isFinite(endBeat) ? knot.bpm + knot.slope * (endBeat - knot.beat) : knot.bpm
17507
+ };
17508
+ }), existing = this.knots.filter((knot) => knot.insertBefore > 0).map((knot) => ({ beat: knot.beat, seconds: knot.insertBefore }));
17509
+ return _TempoModel.build(regions, [...existing, ...insertions]);
17510
+ }
17237
17511
  /** Realize selected source-beat intervals on one continuous performance axis. */
17238
17512
  static concatenate(source, spans) {
17239
17513
  let regions = [], insertions = [], outputBeat = 0;
@@ -17274,11 +17548,9 @@ var TempoModel = class _TempoModel {
17274
17548
  let boundarySet = /* @__PURE__ */ new Set([0]);
17275
17549
  for (let r of sorted) boundarySet.add(r.startBeat);
17276
17550
  for (let ins of insByBeat.keys()) boundarySet.add(ins);
17277
- let boundaries = [...boundarySet].sort((a, b) => a - b), tempoAt = (beat) => {
17278
- let active;
17279
- for (let r of sorted)
17280
- if (r.startBeat <= beat + 1e-9) active = r;
17281
- else break;
17551
+ let boundaries = [...boundarySet].sort((a, b) => a - b), activeIndex = -1, tempoAt = (beat) => {
17552
+ for (; activeIndex + 1 < sorted.length && sorted[activeIndex + 1].startBeat <= beat + 1e-9; ) activeIndex++;
17553
+ let active = sorted[activeIndex];
17282
17554
  if (!active) {
17283
17555
  let first = sorted[0];
17284
17556
  return { bpm: first ? first.startBpm : 120, slope: 0 };
@@ -17370,6 +17642,68 @@ var TempoModel = class _TempoModel {
17370
17642
  }
17371
17643
  };
17372
17644
 
17645
+ // packages/midi/src/tempoRamps/index.ts
17646
+ init_define_import_meta_env();
17647
+ function shape(curve, u) {
17648
+ switch (curve) {
17649
+ case "linear":
17650
+ return u;
17651
+ case "early":
17652
+ return 1 - (1 - u) ** 2;
17653
+ case "late":
17654
+ return u * u;
17655
+ case "smooth":
17656
+ return u * u * (3 - 2 * u);
17657
+ }
17658
+ }
17659
+ function positive(value, label) {
17660
+ if (!Number.isFinite(value) || value <= 0) throw new RangeError(`${label} must be finite and greater than zero.`);
17661
+ return value;
17662
+ }
17663
+ function rampEnd({ declIdx, gt }, measures, starts, totalBeats) {
17664
+ let index = measures.findIndex((measure, i) => i >= declIdx && measure.id === gt.end.measure);
17665
+ index < 0 && /^\d+$/.test(gt.end.measure) && (index = Number(gt.end.measure));
17666
+ let start = starts[index];
17667
+ if (start === void 0) throw new RangeError(`Tempo ramp endpoint measure not found: ${gt.end.measure}`);
17668
+ let [numerator, denominator] = gt.end.position.fraction;
17669
+ positive(denominator, "Tempo ramp endpoint denominator");
17670
+ let end = start + numerator / denominator * 4, measureEnd = starts[index + 1] ?? totalBeats;
17671
+ if (end < start || end > measureEnd + 1e-9)
17672
+ throw new RangeError("Tempo ramp endpoint must be within its bar.");
17673
+ return end;
17674
+ }
17675
+ function curveRegions(start, end, stop, from, to, curve) {
17676
+ let regions = [], span = end - start, bpmAt = (beat) => from + (to - from) * shape(curve, (beat - start) / span), append = (a, b, depth) => {
17677
+ let startBpm = bpmAt(a), endBpm = bpmAt(b), minBpm = Math.min(startBpm, endBpm), du = (b - a) / span, bpmError = (curve === "linear" ? 0 : Math.abs(to - from) * (curve === "smooth" ? 6 : 2)) * du * du / 8, timeError = 60 * (b - a) * bpmError / (minBpm * minBpm);
17678
+ if (bpmError > 1e-3 || timeError > 1e-4 * (b - a) / span) {
17679
+ if (depth >= 20) throw new RangeError("Tempo ramp exceeds supported curve precision.");
17680
+ let mid = (a + b) / 2;
17681
+ append(a, mid, depth + 1), append(mid, b, depth + 1);
17682
+ } else {
17683
+ if (regions.length >= 8192) throw new RangeError("Tempo ramp exceeds supported curve precision.");
17684
+ regions.push({ startBeat: a, endBeat: b, startBpm, endBpm });
17685
+ }
17686
+ };
17687
+ return append(start, stop, 0), regions;
17688
+ }
17689
+ function compileTempoRamps(anchors, declarations, measures, starts, totalBeats) {
17690
+ let regions = [...anchors], previousEnd = -1 / 0;
17691
+ for (let declaration of [...declarations].sort((a, b) => a.startBeat - b.startBeat)) {
17692
+ let { gt, startBeat } = declaration, end = rampEnd(declaration, measures, starts, totalBeats);
17693
+ positive(gt.position.fraction[1], "Tempo ramp start denominator");
17694
+ let barStart = starts[declaration.declIdx], barEnd = starts[declaration.declIdx + 1] ?? totalBeats;
17695
+ if (startBeat < barStart || startBeat > barEnd) throw new RangeError("Tempo ramp start must be within its bar.");
17696
+ if (!Number.isFinite(startBeat) || startBeat < 0 || !Number.isFinite(end) || end <= startBeat || end > totalBeats)
17697
+ throw new RangeError("Tempo ramp must have a positive span within the score.");
17698
+ if (startBeat < previousEnd - 1e-9) throw new RangeError("Tempo ramps must not overlap.");
17699
+ if (previousEnd = end, gt.endBpm === void 0 == (gt.endRatio === void 0))
17700
+ throw new RangeError("Tempo ramp requires exactly one BPM or ratio target.");
17701
+ let from = positive(gt.startBpm ?? TempoModel.build(regions).bpmAtBeat(startBeat), "Tempo ramp start BPM"), to = positive(gt.endBpm ?? from * positive(gt.endRatio, "Tempo ramp target ratio"), "Tempo ramp target BPM"), stop = anchors.filter((anchor) => anchor.startBeat > startBeat + 1e-9 && anchor.startBeat < end).sort((a, b) => a.startBeat - b.startBeat)[0]?.startBeat ?? end;
17702
+ regions.push(...curveRegions(startBeat, end, stop, from, to, gt.curve ?? "linear")), anchors.some((anchor) => Math.abs(anchor.startBeat - stop) < 1e-9) || regions.push({ startBeat: stop, endBeat: 1 / 0, startBpm: to, endBpm: to });
17703
+ }
17704
+ return regions;
17705
+ }
17706
+
17373
17707
  // packages/midi/src/tempoMap.ts
17374
17708
  function playbackNominalTime(gm) {
17375
17709
  return gm.__playbackNominalTime;
@@ -17385,42 +17719,25 @@ function tempoNoteBeats(base, dots) {
17385
17719
  function effectiveQpm(bpm, tempoBase, tempoDots) {
17386
17720
  return bpm * tempoNoteBeats(tempoBase, tempoDots);
17387
17721
  }
17388
- function buildTempoMap(globalMeasures, holds) {
17389
- let tempoMap = [], measureStartTimes = [], currentQpm = DEFAULT_BPM, currentSpq = 60 / currentQpm, currentTime = { count: DEFAULT_TIME.count, unit: DEFAULT_TIME.unit }, absoluteTime = 0, hasInitialTempo = !1;
17390
- for (let m = 0; m < globalMeasures.length; m++) {
17391
- let gm = globalMeasures[m], nominalTime = playbackNominalTime(gm) ?? gm.time;
17392
- nominalTime && (currentTime = { count: nominalTime.count, unit: nominalTime.unit });
17393
- let mBeats = measureBeatsFromTime(gm.time ?? currentTime);
17394
- measureStartTimes.push(absoluteTime);
17395
- let measureStartSpq = currentSpq, changes = [];
17396
- if (gm.tempos && gm.tempos.length > 0) {
17397
- for (let tempo of gm.tempos) {
17398
- if (tempo.bpm === void 0) continue;
17399
- let beatOffset = tempo.location ? posBeats(tempo.location.fraction) : 0, qpm = effectiveQpm(tempo.bpm, tempo.value.base, tempo.value.dots);
17400
- changes.push({ beatOffset, qpm });
17401
- }
17402
- changes.sort((a, b) => a.beatOffset - b.beatOffset);
17403
- }
17404
- let beatCursor = 0;
17405
- for (let change of changes)
17406
- change.beatOffset > beatCursor && (absoluteTime += (change.beatOffset - beatCursor) * currentSpq, beatCursor = change.beatOffset), tempoMap.push({
17407
- measureIndex: m,
17408
- beatInMeasure: change.beatOffset,
17409
- timeSeconds: absoluteTime,
17410
- bpm: change.qpm
17411
- }), m === 0 && change.beatOffset === 0 && (hasInitialTempo = !0), currentQpm = change.qpm, currentSpq = 60 / currentQpm;
17412
- mBeats > beatCursor && (absoluteTime += (mBeats - beatCursor) * currentSpq);
17413
- let measureHolds = holds?.[m];
17414
- if (measureHolds)
17415
- for (let hold of measureHolds)
17416
- absoluteTime += hold.extraBeats * measureStartSpq;
17417
- }
17418
- return hasInitialTempo || tempoMap.unshift({
17722
+ function tempoMapEntries(globalMeasures, timing) {
17723
+ let { model, measureStartBeats } = timing, tempoMap = [];
17724
+ return globalMeasures.forEach((measure, measureIndex) => {
17725
+ for (let tempo of [...measure.tempos ?? []].sort((a, b) => tempoBeat(a) - tempoBeat(b))) {
17726
+ if (tempo.bpm === void 0) continue;
17727
+ let beatInMeasure = tempoBeat(tempo), beat = measureStartBeats[measureIndex] + beatInMeasure;
17728
+ tempoMap.push({
17729
+ measureIndex,
17730
+ beatInMeasure,
17731
+ timeSeconds: beat === 0 ? 0 : model.timeAtBeat(beat),
17732
+ bpm: model.bpmAtBeat(beat)
17733
+ });
17734
+ }
17735
+ }), tempoMap.some((entry) => entry.measureIndex === 0 && entry.beatInMeasure === 0) || tempoMap.unshift({
17419
17736
  measureIndex: 0,
17420
17737
  beatInMeasure: 0,
17421
17738
  timeSeconds: 0,
17422
- bpm: DEFAULT_BPM
17423
- }), { tempoMap, measureStartTimes };
17739
+ bpm: model.bpmAtBeat(0)
17740
+ }), tempoMap;
17424
17741
  }
17425
17742
  function buildTempoModel(globalMeasures, holds) {
17426
17743
  let regions = [], measureStartBeats = [], cumBeats = 0, currentTime = { count: DEFAULT_TIME.count, unit: DEFAULT_TIME.unit }, gradualDecls = [];
@@ -17442,18 +17759,7 @@ function buildTempoModel(globalMeasures, holds) {
17442
17759
  startBeat: cumBeats + posBeats(gm.gradualTempo.position.fraction)
17443
17760
  }), cumBeats += mBeats;
17444
17761
  }
17445
- if ((regions.length === 0 || regions.every((r) => r.startBeat > 1e-9)) && regions.unshift({ startBeat: 0, endBeat: 1 / 0, startBpm: DEFAULT_BPM, endBpm: DEFAULT_BPM }), gradualDecls.length > 0) {
17446
- let idToIdx = buildMeasureIdToIndex(globalMeasures), constModel = TempoModel.build(regions);
17447
- for (let { declIdx, gt, startBeat } of gradualDecls) {
17448
- let endBeat = resolveGradualEndBeat(gt.end, declIdx, globalMeasures, measureStartBeats, idToIdx);
17449
- if (endBeat === void 0 || endBeat <= startBeat + 1e-9) continue;
17450
- let startBpm = gt.startBpm ?? constModel.bpmAtBeat(startBeat);
17451
- regions.push({ startBeat, endBeat, startBpm, endBpm: gt.endBpm }), regions.some((r) => Math.abs(r.startBeat - endBeat) < 1e-9) || regions.push({ startBeat: endBeat, endBeat: 1 / 0, startBpm: gt.endBpm, endBpm: gt.endBpm });
17452
- }
17453
- }
17454
- regions.sort((a, b) => a.startBeat - b.startBeat);
17455
- for (let i = 0; i < regions.length - 1; i++)
17456
- regions[i].endBeat = regions[i + 1].startBeat;
17762
+ (regions.length === 0 || regions.every((r) => r.startBeat > 1e-9)) && regions.unshift({ startBeat: 0, endBeat: 1 / 0, startBpm: DEFAULT_BPM, endBpm: DEFAULT_BPM }), regions = compileTempoRamps(regions, gradualDecls, globalMeasures, measureStartBeats, cumBeats);
17457
17763
  let regionsModel = TempoModel.build(regions), insertions = [];
17458
17764
  if (holds)
17459
17765
  for (let m = 0; m < holds.length; m++) {
@@ -17469,23 +17775,6 @@ function buildTempoModel(globalMeasures, holds) {
17469
17775
  function posBeats(frac) {
17470
17776
  return !frac || frac[1] === 0 ? 0 : frac[0] / frac[1] * 4;
17471
17777
  }
17472
- function buildMeasureIdToIndex(globalMeasures) {
17473
- let m = /* @__PURE__ */ new Map();
17474
- return globalMeasures.forEach((gm, i) => {
17475
- gm.id && !m.has(gm.id) && m.set(gm.id, i);
17476
- }), m;
17477
- }
17478
- function resolveGradualEndBeat(end, fromIdx, globalMeasures, measureStartBeats, idToIdx) {
17479
- let idx = idToIdx.get(end.measure);
17480
- if (idx === void 0) {
17481
- let parsed = Number.parseInt(end.measure, 10);
17482
- !Number.isNaN(parsed) && parsed >= 0 && parsed < globalMeasures.length && (idx = parsed);
17483
- }
17484
- idx === void 0 && (idx = fromIdx);
17485
- let start = measureStartBeats[idx];
17486
- if (start !== void 0)
17487
- return start + posBeats(end.position.fraction);
17488
- }
17489
17778
  function tempoBeat(tempo) {
17490
17779
  return tempo.location ? posBeats(tempo.location.fraction) : 0;
17491
17780
  }
@@ -18079,16 +18368,13 @@ function compileChordPlayback(score, includeGlobalChords = !0) {
18079
18368
  if (!includeGlobalChords) return;
18080
18369
  let part = getChordPlaybackPart(score);
18081
18370
  if (!part) return;
18082
- let carry = [], measures = score.global.measures.map((measure) => {
18083
- let changes = (measure.chordSymbols ?? []).map((chord) => {
18084
- let voicing = voiceChordSymbol(chord);
18085
- return {
18086
- beat: chord.position.fraction[0] / chord.position.fraction[1] * 4,
18087
- pitches: [...voicing.leftHand, ...voicing.rightHand]
18088
- };
18089
- }).sort((a, b) => a.beat - b.beat), result = { carry, changes };
18090
- return changes.length > 0 && (carry = changes[changes.length - 1].pitches), result;
18091
- });
18371
+ let measures = score.global.measures.map((measure) => ({ changes: (measure.chordSymbols ?? []).map((chord) => {
18372
+ let voicing = voiceChordSymbol(chord);
18373
+ return {
18374
+ beat: chord.position.fraction[0] / chord.position.fraction[1] * 4,
18375
+ pitches: [...voicing.leftHand, ...voicing.rightHand]
18376
+ };
18377
+ }).sort((a, b) => a.beat - b.beat) }));
18092
18378
  return { part, measures };
18093
18379
  }
18094
18380
  function realizeChordPlayback(program, measureOrder, timing) {
@@ -18101,13 +18387,14 @@ function realizeChordPlayback(program, measureOrder, timing) {
18101
18387
  };
18102
18388
  for (let expandedIndex = 0; expandedIndex < measureOrder.length; expandedIndex++) {
18103
18389
  let originalIndex = measureOrder[expandedIndex], measure = program.measures[originalIndex], measureStart = timing.measureStartBeats[expandedIndex];
18104
- (expandedIndex === 0 || originalIndex !== measureOrder[expandedIndex - 1] + 1) && (finish(measureStart), pitches = measure.carry, startBeat = measureStart);
18390
+ pitches = [], startBeat = measureStart;
18105
18391
  for (let change of measure.changes) {
18106
18392
  let beat = measureStart + change.beat;
18107
18393
  finish(beat), pitches = change.pitches, startBeat = beat;
18108
18394
  }
18395
+ finish(timing.measureStartBeats[expandedIndex + 1] ?? timing.totalBeats);
18109
18396
  }
18110
- return finish(timing.totalBeats), notes;
18397
+ return notes;
18111
18398
  }
18112
18399
  function chordMidiEvents(program, measureOrder, timing) {
18113
18400
  return realizeChordPlayback(program, measureOrder, timing).flatMap((note) => {
@@ -18763,6 +19050,34 @@ function applyInstrumentPlayback(score, events, timing, programs, initialProgram
18763
19050
  }), diagnostics;
18764
19051
  }
18765
19052
 
19053
+ // packages/midi/src/playbackTempo/index.ts
19054
+ init_define_import_meta_env();
19055
+ function buildPlaybackTempoModel(score, measureOrder, holds) {
19056
+ let source = buildTempoModel(
19057
+ playbackGlobalMeasures(
19058
+ score,
19059
+ score.global.measures.map((_, index) => index)
19060
+ )
19061
+ ), intervals = measureOrder.map((index) => ({
19062
+ startBeat: source.measureStartBeats[index],
19063
+ endBeat: source.measureStartBeats[index + 1] ?? source.totalBeats
19064
+ })), realized = TempoModel.concatenate(source.model, intervals), measureStartBeats = [], insertions = [], totalBeats = 0;
19065
+ intervals.forEach((interval, index) => {
19066
+ measureStartBeats.push(totalBeats);
19067
+ let spb = realized.spbAtBeat(totalBeats);
19068
+ for (let hold of holds[index] ?? [])
19069
+ insertions.push({ beat: totalBeats + hold.atBeat, seconds: hold.extraBeats * spb });
19070
+ totalBeats += interval.endBeat - interval.startBeat;
19071
+ });
19072
+ let model = realized.withInsertions(insertions);
19073
+ return {
19074
+ model,
19075
+ measureStartBeats,
19076
+ measureStartTimes: measureStartBeats.map((beat) => model.timeAtBeat(beat)),
19077
+ totalBeats
19078
+ };
19079
+ }
19080
+
18766
19081
  // packages/midi/src/dynamicsEnvelope.ts
18767
19082
  init_define_import_meta_env();
18768
19083
  var CC_EXPRESSION = 11, EPS2 = 1e-6, DEFAULT_DYNAMIC = { velocity: 84, cc11: 100 }, DYNAMIC_AXES = {
@@ -19394,7 +19709,7 @@ function generateTimeline(inputScore, options) {
19394
19709
  let expandedGlobal = playbackGlobalMeasures(score, measureOrder), holdSchedule = suppressCadenzaFermataHolds(
19395
19710
  expandedGlobal,
19396
19711
  buildHoldSchedule(score, measureOrder, globalMeasures)
19397
- ), { tempoMap } = buildTempoMap(expandedGlobal, holdSchedule), tempoBuild = buildTempoModel(expandedGlobal, holdSchedule), { model, measureStartTimes, measureStartBeats } = tempoBuild, rhythm = compileRhythmProgram(score), crossJumpContinuations = /* @__PURE__ */ new Map(), timing = {
19712
+ ), tempoBuild = buildPlaybackTempoModel(score, measureOrder, holdSchedule), tempoMap = tempoMapEntries(expandedGlobal, tempoBuild), { model, measureStartTimes, measureStartBeats } = tempoBuild, rhythm = compileRhythmProgram(score), crossJumpContinuations = /* @__PURE__ */ new Map(), timing = {
19398
19713
  tempoMap,
19399
19714
  measureStartTimes,
19400
19715
  model,