@viritura/score-engine 0.2.1-next.46 → 0.2.1-next.48

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.46", BUNDLE_WORKER_FILE = "score-engine.worker.js";
2268
+ var PACKAGE_VERSION = "0.2.1-next.48", BUNDLE_WORKER_FILE = "score-engine.worker.js";
2269
2269
  function buildCommit() {
2270
- return "5ece36d90f6f6c1dddd8d55dca5dedb4c5a165a3";
2270
+ return "d1e7ed69e15b4fdf82971bccf1ea9b980402da33";
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,19 +13313,19 @@ 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 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'" };
13067
13325
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
13068
13326
  }
13069
13327
  for (let key0 in data)
13070
- if (!(key0 === "target" || key0 === "kind" || key0 === "style" || key0 === "text" || key0 === "showText")) {
13328
+ if (!(key0 === "target" || key0 === "kind" || key0 === "style" || key0 === "playbackType" || key0 === "text" || key0 === "showText")) {
13071
13329
  let err1 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
13072
13330
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13073
13331
  }
@@ -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,27 +13351,38 @@ 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
  }
13358
+ if (data.playbackType !== void 0) {
13359
+ let data3 = data.playbackType;
13360
+ if (typeof data3 != "string") {
13361
+ let err7 = { instancePath: instancePath + "/playbackType", schemaPath: "#/properties/playbackType/type", keyword: "type", params: { type: "string" }, message: "must be string" };
13362
+ vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13363
+ }
13364
+ if (!(data3 === "chromatic" || data3 === "diatonic" || data3 === "pitch-bend")) {
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" };
13366
+ vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
13367
+ }
13368
+ }
13100
13369
  if (data.text !== void 0 && typeof data.text != "string") {
13101
- let err7 = { instancePath: instancePath + "/text", schemaPath: "#/properties/text/type", keyword: "type", params: { type: "string" }, message: "must be string" };
13102
- vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13370
+ let err9 = { instancePath: instancePath + "/text", schemaPath: "#/properties/text/type", keyword: "type", params: { type: "string" }, message: "must be string" };
13371
+ vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
13103
13372
  }
13104
13373
  if (data.showText !== void 0 && typeof data.showText != "boolean") {
13105
- let err8 = { instancePath: instancePath + "/showText", schemaPath: "#/properties/showText/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" };
13106
- vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
13374
+ let err10 = { instancePath: instancePath + "/showText", schemaPath: "#/properties/showText/type", keyword: "type", params: { type: "boolean" }, message: "must be boolean" };
13375
+ vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
13107
13376
  }
13108
13377
  } else {
13109
- let err9 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13110
- vErrors === null ? vErrors = [err9] : vErrors.push(err9), errors++;
13378
+ let err11 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13379
+ vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
13111
13380
  }
13112
- return validate462.errors = vErrors, errors === 0;
13381
+ return validate464.errors = vErrors, errors === 0;
13113
13382
  }
13114
- validate462.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13115
- function validate461(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13116
- 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;
13117
13386
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13118
13387
  for (let key0 in data)
13119
13388
  if (key0 !== "glissandos") {
@@ -13125,7 +13394,7 @@ function validate461(data, { instancePath = "", parentData, parentDataProperty,
13125
13394
  if (Array.isArray(data0)) {
13126
13395
  let len0 = data0.length;
13127
13396
  for (let i0 = 0; i0 < len0; i0++)
13128
- 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);
13129
13398
  } else {
13130
13399
  let err1 = { instancePath: instancePath + "/glissandos", schemaPath: "#/properties/glissandos/type", keyword: "type", params: { type: "array" }, message: "must be array" };
13131
13400
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
@@ -13135,13 +13404,13 @@ function validate461(data, { instancePath = "", parentData, parentDataProperty,
13135
13404
  let err2 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13136
13405
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13137
13406
  }
13138
- return validate461.errors = vErrors, errors === 0;
13407
+ return validate463.errors = vErrors, errors === 0;
13139
13408
  }
13140
- validate461.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13141
- 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." };
13142
- 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 };
13143
- function validate465(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13144
- 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;
13145
13414
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13146
13415
  for (let key0 in data)
13147
13416
  if (!(key0 === "accidental" || key0 === "showSymbol" || key0 === "extension")) {
@@ -13155,7 +13424,7 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13155
13424
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13156
13425
  }
13157
13426
  if (!(data0 === -1 || data0 === 0 || data0 === 1)) {
13158
- 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" };
13159
13428
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13160
13429
  }
13161
13430
  }
@@ -13186,7 +13455,7 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13186
13455
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13187
13456
  }
13188
13457
  if (!(data4 === "start" || data4 === "end")) {
13189
- 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" };
13190
13459
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
13191
13460
  }
13192
13461
  }
@@ -13199,11 +13468,11 @@ function validate465(data, { instancePath = "", parentData, parentDataProperty,
13199
13468
  let err10 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13200
13469
  vErrors === null ? vErrors = [err10] : vErrors.push(err10), errors++;
13201
13470
  }
13202
- return validate465.errors = vErrors, errors === 0;
13471
+ return validate467.errors = vErrors, errors === 0;
13203
13472
  }
13204
- validate465.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13205
- function validate464(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13206
- 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;
13207
13476
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13208
13477
  for (let key0 in data)
13209
13478
  if (!(key0 === "staccatissimoWedge" || key0 === "trill" || key0 === "ornaments" || key0 === "fingerings" || key0 === "arpeggio")) {
@@ -13225,7 +13494,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13225
13494
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13226
13495
  }
13227
13496
  if (!(data1 === "above" || data1 === "below" || data1 === "auto")) {
13228
- 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" };
13229
13498
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13230
13499
  }
13231
13500
  }
@@ -13234,7 +13503,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13234
13503
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13235
13504
  }
13236
13505
  }
13237
- 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) {
13238
13507
  let data3 = data.ornaments;
13239
13508
  if (Array.isArray(data3)) {
13240
13509
  let len0 = data3.length;
@@ -13245,7 +13514,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13245
13514
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13246
13515
  }
13247
13516
  if (!(data4 === "turn" || data4 === "invertedTurn" || data4 === "mordent" || data4 === "invertedMordent" || data4 === "shortTrill" || data4 === "trillMordent" || data4 === "delayedTurn" || data4 === "schleifer")) {
13248
- 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" };
13249
13518
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13250
13519
  }
13251
13520
  }
@@ -13312,7 +13581,7 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13312
13581
  vErrors === null ? vErrors = [err16] : vErrors.push(err16), errors++;
13313
13582
  }
13314
13583
  if (!(data9 === "up" || data9 === "down" || data9 === "auto")) {
13315
- 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" };
13316
13585
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
13317
13586
  }
13318
13587
  }
@@ -13325,11 +13594,11 @@ function validate464(data, { instancePath = "", parentData, parentDataProperty,
13325
13594
  let err19 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13326
13595
  vErrors === null ? vErrors = [err19] : vErrors.push(err19), errors++;
13327
13596
  }
13328
- return validate464.errors = vErrors, errors === 0;
13597
+ return validate466.errors = vErrors, errors === 0;
13329
13598
  }
13330
- validate464.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13331
- function validate467(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13332
- 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;
13333
13602
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13334
13603
  for (let key0 in data)
13335
13604
  if (key0 !== "notehead") {
@@ -13343,7 +13612,7 @@ function validate467(data, { instancePath = "", parentData, parentDataProperty,
13343
13612
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13344
13613
  }
13345
13614
  if (!(data0 === "normal" || data0 === "x" || data0 === "circleX" || data0 === "diamond" || data0 === "slash" || data0 === "triangleUp" || data0 === "triangleDown")) {
13346
- 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" };
13347
13616
  vErrors === null ? vErrors = [err2] : vErrors.push(err2), errors++;
13348
13617
  }
13349
13618
  }
@@ -13351,11 +13620,11 @@ function validate467(data, { instancePath = "", parentData, parentDataProperty,
13351
13620
  let err3 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13352
13621
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13353
13622
  }
13354
- return validate467.errors = vErrors, errors === 0;
13623
+ return validate469.errors = vErrors, errors === 0;
13355
13624
  }
13356
- validate467.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13357
- function validate469(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13358
- 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;
13359
13628
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13360
13629
  for (let key0 in data)
13361
13630
  if (!(key0 === "p0" || key0 === "p1" || key0 === "p2" || key0 === "p3")) {
@@ -13454,27 +13723,27 @@ function validate469(data, { instancePath = "", parentData, parentDataProperty,
13454
13723
  let err17 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13455
13724
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
13456
13725
  }
13457
- return validate469.errors = vErrors, errors === 0;
13726
+ return validate471.errors = vErrors, errors === 0;
13458
13727
  }
13459
- validate469.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13460
- function validate468(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13461
- 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;
13462
13731
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13463
13732
  for (let key0 in data)
13464
13733
  if (key0 !== "shape") {
13465
13734
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
13466
13735
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
13467
13736
  }
13468
- 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));
13469
13738
  } else {
13470
13739
  let err1 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13471
13740
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13472
13741
  }
13473
- return validate468.errors = vErrors, errors === 0;
13742
+ return validate470.errors = vErrors, errors === 0;
13474
13743
  }
13475
- validate468.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13476
- function validate471(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13477
- 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;
13478
13747
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13479
13748
  for (let key0 in data)
13480
13749
  if (key0 !== "derived") {
@@ -13496,11 +13765,11 @@ function validate471(data, { instancePath = "", parentData, parentDataProperty,
13496
13765
  let err3 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13497
13766
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13498
13767
  }
13499
- return validate471.errors = vErrors, errors === 0;
13768
+ return validate473.errors = vErrors, errors === 0;
13500
13769
  }
13501
- validate471.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13502
- function validate472(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13503
- 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;
13504
13773
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data))
13505
13774
  for (let key0 in data) {
13506
13775
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
@@ -13510,20 +13779,20 @@ function validate472(data, { instancePath = "", parentData, parentDataProperty,
13510
13779
  let err1 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13511
13780
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13512
13781
  }
13513
- return validate472.errors = vErrors, errors === 0;
13782
+ return validate474.errors = vErrors, errors === 0;
13514
13783
  }
13515
- validate472.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13516
- 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 };
13517
- 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 };
13518
- function validate475(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13519
- 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;
13520
13789
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13521
13790
  if (data.enabled === void 0) {
13522
13791
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "enabled" }, message: "must have required property 'enabled'" };
13523
13792
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
13524
13793
  }
13525
13794
  for (let key0 in data)
13526
- if (!func1.call(schema476.properties, key0)) {
13795
+ if (!func1.call(schema478.properties, key0)) {
13527
13796
  let err1 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
13528
13797
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
13529
13798
  }
@@ -13538,7 +13807,7 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13538
13807
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13539
13808
  }
13540
13809
  if (!(data1 === "relaxed" || data1 === "professional")) {
13541
- 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" };
13542
13811
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13543
13812
  }
13544
13813
  }
@@ -13641,7 +13910,7 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13641
13910
  vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
13642
13911
  }
13643
13912
  if (!(data10 === "auto" || data10 === "always" || data10 === "never")) {
13644
- 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" };
13645
13914
  vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
13646
13915
  }
13647
13916
  }
@@ -13706,11 +13975,11 @@ function validate475(data, { instancePath = "", parentData, parentDataProperty,
13706
13975
  let err36 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13707
13976
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
13708
13977
  }
13709
- return validate475.errors = vErrors, errors === 0;
13978
+ return validate477.errors = vErrors, errors === 0;
13710
13979
  }
13711
- validate475.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13712
- function validate474(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13713
- 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;
13714
13983
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13715
13984
  for (let key0 in data)
13716
13985
  if (!(key0 === "width" || key0 === "height" || key0 === "orientation" || key0 === "margins" || key0 === "spatiumMm" || key0 === "pageTurns")) {
@@ -13748,7 +14017,7 @@ function validate474(data, { instancePath = "", parentData, parentDataProperty,
13748
14017
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13749
14018
  }
13750
14019
  if (!(data2 === "portrait" || data2 === "landscape")) {
13751
- 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" };
13752
14021
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13753
14022
  }
13754
14023
  }
@@ -13841,17 +14110,17 @@ function validate474(data, { instancePath = "", parentData, parentDataProperty,
13841
14110
  vErrors === null ? vErrors = [err22] : vErrors.push(err22), errors++;
13842
14111
  }
13843
14112
  }
13844
- 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));
13845
14114
  } else {
13846
14115
  let err23 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13847
14116
  vErrors === null ? vErrors = [err23] : vErrors.push(err23), errors++;
13848
14117
  }
13849
- return validate474.errors = vErrors, errors === 0;
14118
+ return validate476.errors = vErrors, errors === 0;
13850
14119
  }
13851
- validate474.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13852
- var schema479 = { type: "string", enum: ["full", "short", "hidden"] };
13853
- function validate478(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13854
- 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;
13855
14124
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13856
14125
  if (data.firstSystem === void 0) {
13857
14126
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "firstSystem" }, message: "must have required property 'firstSystem'" };
@@ -13873,7 +14142,7 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13873
14142
  vErrors === null ? vErrors = [err3] : vErrors.push(err3), errors++;
13874
14143
  }
13875
14144
  if (!(data0 === "full" || data0 === "short" || data0 === "hidden")) {
13876
- 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" };
13877
14146
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
13878
14147
  }
13879
14148
  }
@@ -13884,7 +14153,7 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13884
14153
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
13885
14154
  }
13886
14155
  if (!(data1 === "full" || data1 === "short" || data1 === "hidden")) {
13887
- 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" };
13888
14157
  vErrors === null ? vErrors = [err6] : vErrors.push(err6), errors++;
13889
14158
  }
13890
14159
  }
@@ -13892,12 +14161,12 @@ function validate478(data, { instancePath = "", parentData, parentDataProperty,
13892
14161
  let err7 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
13893
14162
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
13894
14163
  }
13895
- return validate478.errors = vErrors, errors === 0;
14164
+ return validate480.errors = vErrors, errors === 0;
13896
14165
  }
13897
- validate478.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
13898
- 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 };
13899
- function validate482(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
13900
- 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;
13901
14170
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
13902
14171
  if (data.partId === void 0) {
13903
14172
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "partId" }, message: "must have required property 'partId'" };
@@ -14091,11 +14360,11 @@ function validate482(data, { instancePath = "", parentData, parentDataProperty,
14091
14360
  let err35 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14092
14361
  vErrors === null ? vErrors = [err35] : vErrors.push(err35), errors++;
14093
14362
  }
14094
- return validate482.errors = vErrors, errors === 0;
14363
+ return validate484.errors = vErrors, errors === 0;
14095
14364
  }
14096
- validate482.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14097
- function validate480(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14098
- 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;
14099
14368
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14100
14369
  if (data.id === void 0) {
14101
14370
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -14118,7 +14387,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14118
14387
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
14119
14388
  }
14120
14389
  for (let key0 in data)
14121
- if (!func1.call(schema481.properties, key0)) {
14390
+ if (!func1.call(schema483.properties, key0)) {
14122
14391
  let err5 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14123
14392
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
14124
14393
  }
@@ -14298,7 +14567,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14298
14567
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
14299
14568
  }
14300
14569
  if (!(data10 === "top" || data10 === "right" || data10 === "bottom" || data10 === "left" || data10 === "top-left" || data10 === "top-right" || data10 === "bottom-right" || data10 === "bottom-left")) {
14301
- 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" };
14302
14571
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
14303
14572
  }
14304
14573
  }
@@ -14431,7 +14700,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14431
14700
  vErrors === null ? vErrors = [err61] : vErrors.push(err61), errors++;
14432
14701
  }
14433
14702
  if (!(data20 === "left" || data20 === "center" || data20 === "right")) {
14434
- 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" };
14435
14704
  vErrors === null ? vErrors = [err62] : vErrors.push(err62), errors++;
14436
14705
  }
14437
14706
  }
@@ -14442,7 +14711,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14442
14711
  vErrors === null ? vErrors = [err63] : vErrors.push(err63), errors++;
14443
14712
  }
14444
14713
  if (!(data21 === "left" || data21 === "center" || data21 === "right" || data21 === "justify")) {
14445
- 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" };
14446
14715
  vErrors === null ? vErrors = [err64] : vErrors.push(err64), errors++;
14447
14716
  }
14448
14717
  }
@@ -14465,7 +14734,7 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14465
14734
  vErrors === null ? vErrors = [err67] : vErrors.push(err67), errors++;
14466
14735
  }
14467
14736
  if (!(data23 === "none" || data23 === "solid")) {
14468
- 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" };
14469
14738
  vErrors === null ? vErrors = [err68] : vErrors.push(err68), errors++;
14470
14739
  }
14471
14740
  }
@@ -14514,28 +14783,28 @@ function validate480(data, { instancePath = "", parentData, parentDataProperty,
14514
14783
  vErrors === null ? vErrors = [err76] : vErrors.push(err76), errors++;
14515
14784
  }
14516
14785
  }
14517
- 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));
14518
14787
  } else {
14519
14788
  let err77 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14520
14789
  vErrors === null ? vErrors = [err77] : vErrors.push(err77), errors++;
14521
14790
  }
14522
- return validate480.errors = vErrors, errors === 0;
14791
+ return validate482.errors = vErrors, errors === 0;
14523
14792
  }
14524
- validate480.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14525
- function validate473(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14526
- 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;
14527
14796
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14528
14797
  for (let key0 in data)
14529
14798
  if (!(key0 === "pageSetup" || key0 === "instrumentNameDisplay" || key0 === "textFrames" || key0 === "layoutBreaks")) {
14530
14799
  let err0 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14531
14800
  vErrors === null ? vErrors = [err0] : vErrors.push(err0), errors++;
14532
14801
  }
14533
- 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) {
14534
14803
  let data2 = data.textFrames;
14535
14804
  if (Array.isArray(data2)) {
14536
14805
  let len0 = data2.length;
14537
14806
  for (let i0 = 0; i0 < len0; i0++)
14538
- 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);
14539
14808
  } else {
14540
14809
  let err1 = { instancePath: instancePath + "/textFrames", schemaPath: "#/properties/textFrames/type", keyword: "type", params: { type: "array" }, message: "must be array" };
14541
14810
  vErrors === null ? vErrors = [err1] : vErrors.push(err1), errors++;
@@ -14580,7 +14849,7 @@ function validate473(data, { instancePath = "", parentData, parentDataProperty,
14580
14849
  vErrors === null ? vErrors = [err7] : vErrors.push(err7), errors++;
14581
14850
  }
14582
14851
  if (!(data7 === "system" || data7 === "page")) {
14583
- 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" };
14584
14853
  vErrors === null ? vErrors = [err8] : vErrors.push(err8), errors++;
14585
14854
  }
14586
14855
  }
@@ -14598,12 +14867,12 @@ function validate473(data, { instancePath = "", parentData, parentDataProperty,
14598
14867
  let err11 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
14599
14868
  vErrors === null ? vErrors = [err11] : vErrors.push(err11), errors++;
14600
14869
  }
14601
- return validate473.errors = vErrors, errors === 0;
14870
+ return validate475.errors = vErrors, errors === 0;
14602
14871
  }
14603
- validate473.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
14604
- var textFrame = validate485;
14605
- function validate485(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
14606
- 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;
14607
14876
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
14608
14877
  if (data.id === void 0) {
14609
14878
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -14626,7 +14895,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14626
14895
  vErrors === null ? vErrors = [err4] : vErrors.push(err4), errors++;
14627
14896
  }
14628
14897
  for (let key0 in data)
14629
- if (!func1.call(schema481.properties, key0)) {
14898
+ if (!func1.call(schema483.properties, key0)) {
14630
14899
  let err5 = { instancePath, schemaPath: "#/additionalProperties", keyword: "additionalProperties", params: { additionalProperty: key0 }, message: "must NOT have additional properties" };
14631
14900
  vErrors === null ? vErrors = [err5] : vErrors.push(err5), errors++;
14632
14901
  }
@@ -14806,7 +15075,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14806
15075
  vErrors === null ? vErrors = [err36] : vErrors.push(err36), errors++;
14807
15076
  }
14808
15077
  if (!(data10 === "top" || data10 === "right" || data10 === "bottom" || data10 === "left" || data10 === "top-left" || data10 === "top-right" || data10 === "bottom-right" || data10 === "bottom-left")) {
14809
- 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" };
14810
15079
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
14811
15080
  }
14812
15081
  }
@@ -14939,7 +15208,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14939
15208
  vErrors === null ? vErrors = [err61] : vErrors.push(err61), errors++;
14940
15209
  }
14941
15210
  if (!(data20 === "left" || data20 === "center" || data20 === "right")) {
14942
- 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" };
14943
15212
  vErrors === null ? vErrors = [err62] : vErrors.push(err62), errors++;
14944
15213
  }
14945
15214
  }
@@ -14950,7 +15219,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14950
15219
  vErrors === null ? vErrors = [err63] : vErrors.push(err63), errors++;
14951
15220
  }
14952
15221
  if (!(data21 === "left" || data21 === "center" || data21 === "right" || data21 === "justify")) {
14953
- 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" };
14954
15223
  vErrors === null ? vErrors = [err64] : vErrors.push(err64), errors++;
14955
15224
  }
14956
15225
  }
@@ -14973,7 +15242,7 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
14973
15242
  vErrors === null ? vErrors = [err67] : vErrors.push(err67), errors++;
14974
15243
  }
14975
15244
  if (!(data23 === "none" || data23 === "solid")) {
14976
- 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" };
14977
15246
  vErrors === null ? vErrors = [err68] : vErrors.push(err68), errors++;
14978
15247
  }
14979
15248
  }
@@ -15022,17 +15291,17 @@ function validate485(data, { instancePath = "", parentData, parentDataProperty,
15022
15291
  vErrors === null ? vErrors = [err76] : vErrors.push(err76), errors++;
15023
15292
  }
15024
15293
  }
15025
- 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));
15026
15295
  } else {
15027
15296
  let err77 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15028
15297
  vErrors === null ? vErrors = [err77] : vErrors.push(err77), errors++;
15029
15298
  }
15030
- return validate485.errors = vErrors, errors === 0;
15299
+ return validate487.errors = vErrors, errors === 0;
15031
15300
  }
15032
- validate485.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15033
- var systemText = validate488;
15034
- function validate488(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15035
- 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;
15036
15305
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15037
15306
  if (data.id === void 0) {
15038
15307
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -15272,12 +15541,12 @@ function validate488(data, { instancePath = "", parentData, parentDataProperty,
15272
15541
  let err42 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15273
15542
  vErrors === null ? vErrors = [err42] : vErrors.push(err42), errors++;
15274
15543
  }
15275
- return validate488.errors = vErrors, errors === 0;
15544
+ return validate490.errors = vErrors, errors === 0;
15276
15545
  }
15277
- validate488.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15278
- var staffTextFramePresentation = validate490;
15279
- function validate490(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15280
- 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;
15281
15550
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15282
15551
  for (let key0 in data)
15283
15552
  if (!(key0 === "width" || key0 === "horizontalAlignment" || key0 === "paragraphJustification" || key0 === "padding" || key0 === "border" || key0 === "eraseBackground")) {
@@ -15374,12 +15643,12 @@ function validate490(data, { instancePath = "", parentData, parentDataProperty,
15374
15643
  let err17 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15375
15644
  vErrors === null ? vErrors = [err17] : vErrors.push(err17), errors++;
15376
15645
  }
15377
- return validate490.errors = vErrors, errors === 0;
15646
+ return validate492.errors = vErrors, errors === 0;
15378
15647
  }
15379
- validate490.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15380
- var textFramePagePosition = validate491;
15381
- function validate491(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
15382
- 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;
15383
15652
  if (evaluated0.dynamicProps && (evaluated0.props = void 0), evaluated0.dynamicItems && (evaluated0.items = void 0), data && typeof data == "object" && !Array.isArray(data)) {
15384
15653
  if (data.id === void 0) {
15385
15654
  let err0 = { instancePath, schemaPath: "#/required", keyword: "required", params: { missingProperty: "id" }, message: "must have required property 'id'" };
@@ -15589,7 +15858,7 @@ function validate491(data, { instancePath = "", parentData, parentDataProperty,
15589
15858
  vErrors === null ? vErrors = [err37] : vErrors.push(err37), errors++;
15590
15859
  }
15591
15860
  if (!(data11 === "top" || data11 === "right" || data11 === "bottom" || data11 === "left" || data11 === "top-left" || data11 === "top-right" || data11 === "bottom-right" || data11 === "bottom-left")) {
15592
- 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" };
15593
15862
  vErrors === null ? vErrors = [err38] : vErrors.push(err38), errors++;
15594
15863
  }
15595
15864
  }
@@ -15760,9 +16029,9 @@ function validate491(data, { instancePath = "", parentData, parentDataProperty,
15760
16029
  let err69 = { instancePath, schemaPath: "#/type", keyword: "type", params: { type: "object" }, message: "must be object" };
15761
16030
  vErrors === null ? vErrors = [err69] : vErrors.push(err69), errors++;
15762
16031
  }
15763
- return validate491.errors = vErrors, errors === 0;
16032
+ return validate493.errors = vErrors, errors === 0;
15764
16033
  }
15765
- validate491.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
16034
+ validate493.evaluated = { props: !0, dynamicProps: !1, dynamicItems: !1 };
15766
16035
 
15767
16036
  // packages/format/src/mnx/staffTextFrame.ts
15768
16037
  function parseTextFramePagePosition(raw) {
@@ -16070,12 +16339,14 @@ function rejectRetiredNavigationExtensions(raw) {
16070
16339
  );
16071
16340
  }
16072
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.");
16073
16344
  let gt = {
16074
16345
  position: parseRhythmicPosition(raw.position),
16075
16346
  end: parseMeasureRhythmicPosition(raw.end),
16076
- endBpm: raw.endBpm
16347
+ ...raw.endBpm !== void 0 ? { endBpm: raw.endBpm } : { endRatio: raw.endRatio }
16077
16348
  };
16078
- 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;
16079
16350
  }
16080
16351
  function parseTimeSignature(raw) {
16081
16352
  let ts = {
@@ -16250,23 +16521,23 @@ function parseSlur(raw) {
16250
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);
16251
16522
  let shapeObj = raw._x?.viritura?.shape;
16252
16523
  if (shapeObj) {
16253
- let shape = {}, readPair = (v) => {
16524
+ let shape2 = {}, readPair = (v) => {
16254
16525
  if (Array.isArray(v) && v.length === 2 && typeof v[0] == "number" && typeof v[1] == "number")
16255
16526
  return [v[0], v[1]];
16256
16527
  }, p0 = readPair(shapeObj.p0);
16257
- p0 && (shape.p0 = p0);
16528
+ p0 && (shape2.p0 = p0);
16258
16529
  let p1 = readPair(shapeObj.p1);
16259
- p1 && (shape.p1 = p1);
16530
+ p1 && (shape2.p1 = p1);
16260
16531
  let p2 = readPair(shapeObj.p2);
16261
- p2 && (shape.p2 = p2);
16532
+ p2 && (shape2.p2 = p2);
16262
16533
  let p3 = readPair(shapeObj.p3);
16263
- 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);
16264
16535
  }
16265
16536
  return slur;
16266
16537
  }
16267
16538
  function parseGlissando(raw) {
16268
16539
  let gliss = { target: raw.target };
16269
- return raw.kind && (gliss.kind = raw.kind), raw.style && (gliss.style = raw.style), raw.text && (gliss.text = raw.text), raw.showText !== void 0 && (gliss.showText = raw.showText), gliss;
16540
+ return raw.kind && (gliss.kind = raw.kind), raw.style && (gliss.style = raw.style), raw.playbackType && (gliss.playbackType = raw.playbackType), raw.text && (gliss.text = raw.text), raw.showText !== void 0 && (gliss.showText = raw.showText), gliss;
16270
16541
  }
16271
16542
  function parseNotes(arr) {
16272
16543
  return arr.map(parseNote);
@@ -17223,6 +17494,20 @@ var TempoModel = class _TempoModel {
17223
17494
  constructor(knots) {
17224
17495
  this.knots = knots;
17225
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
+ }
17226
17511
  /** Realize selected source-beat intervals on one continuous performance axis. */
17227
17512
  static concatenate(source, spans) {
17228
17513
  let regions = [], insertions = [], outputBeat = 0;
@@ -17263,11 +17548,9 @@ var TempoModel = class _TempoModel {
17263
17548
  let boundarySet = /* @__PURE__ */ new Set([0]);
17264
17549
  for (let r of sorted) boundarySet.add(r.startBeat);
17265
17550
  for (let ins of insByBeat.keys()) boundarySet.add(ins);
17266
- let boundaries = [...boundarySet].sort((a, b) => a - b), tempoAt = (beat) => {
17267
- let active;
17268
- for (let r of sorted)
17269
- if (r.startBeat <= beat + 1e-9) active = r;
17270
- 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];
17271
17554
  if (!active) {
17272
17555
  let first = sorted[0];
17273
17556
  return { bpm: first ? first.startBpm : 120, slope: 0 };
@@ -17359,6 +17642,68 @@ var TempoModel = class _TempoModel {
17359
17642
  }
17360
17643
  };
17361
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
+
17362
17707
  // packages/midi/src/tempoMap.ts
17363
17708
  function playbackNominalTime(gm) {
17364
17709
  return gm.__playbackNominalTime;
@@ -17374,42 +17719,25 @@ function tempoNoteBeats(base, dots) {
17374
17719
  function effectiveQpm(bpm, tempoBase, tempoDots) {
17375
17720
  return bpm * tempoNoteBeats(tempoBase, tempoDots);
17376
17721
  }
17377
- function buildTempoMap(globalMeasures, holds) {
17378
- let tempoMap = [], measureStartTimes = [], currentQpm = DEFAULT_BPM, currentSpq = 60 / currentQpm, currentTime = { count: DEFAULT_TIME.count, unit: DEFAULT_TIME.unit }, absoluteTime = 0, hasInitialTempo = !1;
17379
- for (let m = 0; m < globalMeasures.length; m++) {
17380
- let gm = globalMeasures[m], nominalTime = playbackNominalTime(gm) ?? gm.time;
17381
- nominalTime && (currentTime = { count: nominalTime.count, unit: nominalTime.unit });
17382
- let mBeats = measureBeatsFromTime(gm.time ?? currentTime);
17383
- measureStartTimes.push(absoluteTime);
17384
- let measureStartSpq = currentSpq, changes = [];
17385
- if (gm.tempos && gm.tempos.length > 0) {
17386
- for (let tempo of gm.tempos) {
17387
- if (tempo.bpm === void 0) continue;
17388
- let beatOffset = tempo.location ? posBeats(tempo.location.fraction) : 0, qpm = effectiveQpm(tempo.bpm, tempo.value.base, tempo.value.dots);
17389
- changes.push({ beatOffset, qpm });
17390
- }
17391
- changes.sort((a, b) => a.beatOffset - b.beatOffset);
17392
- }
17393
- let beatCursor = 0;
17394
- for (let change of changes)
17395
- change.beatOffset > beatCursor && (absoluteTime += (change.beatOffset - beatCursor) * currentSpq, beatCursor = change.beatOffset), tempoMap.push({
17396
- measureIndex: m,
17397
- beatInMeasure: change.beatOffset,
17398
- timeSeconds: absoluteTime,
17399
- bpm: change.qpm
17400
- }), m === 0 && change.beatOffset === 0 && (hasInitialTempo = !0), currentQpm = change.qpm, currentSpq = 60 / currentQpm;
17401
- mBeats > beatCursor && (absoluteTime += (mBeats - beatCursor) * currentSpq);
17402
- let measureHolds = holds?.[m];
17403
- if (measureHolds)
17404
- for (let hold of measureHolds)
17405
- absoluteTime += hold.extraBeats * measureStartSpq;
17406
- }
17407
- 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({
17408
17736
  measureIndex: 0,
17409
17737
  beatInMeasure: 0,
17410
17738
  timeSeconds: 0,
17411
- bpm: DEFAULT_BPM
17412
- }), { tempoMap, measureStartTimes };
17739
+ bpm: model.bpmAtBeat(0)
17740
+ }), tempoMap;
17413
17741
  }
17414
17742
  function buildTempoModel(globalMeasures, holds) {
17415
17743
  let regions = [], measureStartBeats = [], cumBeats = 0, currentTime = { count: DEFAULT_TIME.count, unit: DEFAULT_TIME.unit }, gradualDecls = [];
@@ -17431,18 +17759,7 @@ function buildTempoModel(globalMeasures, holds) {
17431
17759
  startBeat: cumBeats + posBeats(gm.gradualTempo.position.fraction)
17432
17760
  }), cumBeats += mBeats;
17433
17761
  }
17434
- 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) {
17435
- let idToIdx = buildMeasureIdToIndex(globalMeasures), constModel = TempoModel.build(regions);
17436
- for (let { declIdx, gt, startBeat } of gradualDecls) {
17437
- let endBeat = resolveGradualEndBeat(gt.end, declIdx, globalMeasures, measureStartBeats, idToIdx);
17438
- if (endBeat === void 0 || endBeat <= startBeat + 1e-9) continue;
17439
- let startBpm = gt.startBpm ?? constModel.bpmAtBeat(startBeat);
17440
- 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 });
17441
- }
17442
- }
17443
- regions.sort((a, b) => a.startBeat - b.startBeat);
17444
- for (let i = 0; i < regions.length - 1; i++)
17445
- 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);
17446
17763
  let regionsModel = TempoModel.build(regions), insertions = [];
17447
17764
  if (holds)
17448
17765
  for (let m = 0; m < holds.length; m++) {
@@ -17458,23 +17775,6 @@ function buildTempoModel(globalMeasures, holds) {
17458
17775
  function posBeats(frac) {
17459
17776
  return !frac || frac[1] === 0 ? 0 : frac[0] / frac[1] * 4;
17460
17777
  }
17461
- function buildMeasureIdToIndex(globalMeasures) {
17462
- let m = /* @__PURE__ */ new Map();
17463
- return globalMeasures.forEach((gm, i) => {
17464
- gm.id && !m.has(gm.id) && m.set(gm.id, i);
17465
- }), m;
17466
- }
17467
- function resolveGradualEndBeat(end, fromIdx, globalMeasures, measureStartBeats, idToIdx) {
17468
- let idx = idToIdx.get(end.measure);
17469
- if (idx === void 0) {
17470
- let parsed = Number.parseInt(end.measure, 10);
17471
- !Number.isNaN(parsed) && parsed >= 0 && parsed < globalMeasures.length && (idx = parsed);
17472
- }
17473
- idx === void 0 && (idx = fromIdx);
17474
- let start = measureStartBeats[idx];
17475
- if (start !== void 0)
17476
- return start + posBeats(end.position.fraction);
17477
- }
17478
17778
  function tempoBeat(tempo) {
17479
17779
  return tempo.location ? posBeats(tempo.location.fraction) : 0;
17480
17780
  }
@@ -17765,7 +18065,7 @@ function realizeNavigation(timeline, spans, crossJumpContinuations = /* @__PURE_
17765
18065
  events
17766
18066
  ), outputBeat += span.endBeat - span.startBeat;
17767
18067
  }
17768
- let rank = { noteOff: 0, programChange: 1, controlChange: 2, noteOn: 3 };
18068
+ let rank = { noteOff: 0, programChange: 1, controlChange: 2, pitchBend: 2, noteOn: 3 };
17769
18069
  return events.sort((a, b) => a.time - b.time || rank[a.type] - rank[b.type]), {
17770
18070
  ...timeline,
17771
18071
  events,
@@ -17906,6 +18206,159 @@ function expandScoreMeasureRepeats(score) {
17906
18206
  return parts.every((part, index) => part === score.parts[index]) ? score : { ...score, parts };
17907
18207
  }
17908
18208
 
18209
+ // packages/midi/src/glissandoPlayback/index.ts
18210
+ init_define_import_meta_env();
18211
+ function linesForPart(score, partIndex) {
18212
+ let lines = [];
18213
+ for (let measure of score.parts[partIndex]?.measures ?? [])
18214
+ for (let sequence of measure.sequences)
18215
+ for (let { event } of walkSequenceEvents(sequence.content))
18216
+ if (event.glissandos?.length) {
18217
+ if (!event.id) throw new Error("Glissando source event requires an ID.");
18218
+ for (let glissando of event.glissandos) lines.push({ source: event.id, glissando });
18219
+ }
18220
+ return lines;
18221
+ }
18222
+ function noteKey(event) {
18223
+ return JSON.stringify([event.partIndex, event.playbackLaneId, event.playbackInstrumentKey, event.midiNote]);
18224
+ }
18225
+ function releasesFor(events) {
18226
+ let held = /* @__PURE__ */ new Map(), releases = /* @__PURE__ */ new Map();
18227
+ for (let event of events) {
18228
+ let key = noteKey(event);
18229
+ if (event.type === "noteOn") {
18230
+ let queue = held.get(key) ?? [];
18231
+ queue.push(event), held.set(key, queue);
18232
+ } else if (event.type === "noteOff") {
18233
+ let onset = held.get(key)?.shift();
18234
+ onset && releases.set(onset, event);
18235
+ }
18236
+ }
18237
+ return releases;
18238
+ }
18239
+ function measureAt(timeline, beat) {
18240
+ let index = 0;
18241
+ for (; index + 1 < timeline.measureStartBeats.length && timeline.measureStartBeats[index + 1] <= beat + 1e-9; )
18242
+ index++;
18243
+ return index;
18244
+ }
18245
+ function continuousTo(timeline, start, end) {
18246
+ let startBeat = start.scoreBeat ?? timeline.model.beatAtTime(start.time), endBeat = end.scoreBeat ?? timeline.model.beatAtTime(end.time);
18247
+ for (let index = measureAt(timeline, startBeat); index < measureAt(timeline, endBeat); index++)
18248
+ if (timeline.playedSpans) {
18249
+ if (!playedSpansContinue(timeline.playedSpans[index], timeline.playedSpans[index + 1])) return !1;
18250
+ } else if (timeline.expandedMeasureToOriginal[index + 1] !== timeline.expandedMeasureToOriginal[index] + 1)
18251
+ return !1;
18252
+ return !0;
18253
+ }
18254
+ function keyPitches(score, timeline, onset) {
18255
+ let beat = onset.scoreBeat ?? timeline.model.beatAtTime(onset.time), measureIndex = timeline.expandedMeasureToOriginal[measureAt(timeline, beat)], fifths = 0;
18256
+ for (let index = 0; index <= measureIndex; index++)
18257
+ fifths = score.global.measures[index]?.key?.fifths ?? fifths;
18258
+ let steps = ["C", "D", "E", "F", "G", "A", "B"], pitches = [0, 2, 4, 5, 7, 9, 11], order = fifths >= 0 ? SHARP_ORDER : FLAT_ORDER;
18259
+ for (let index = 0; index < Math.abs(fifths); index++) {
18260
+ let position = steps.indexOf(order[index % order.length]);
18261
+ pitches[position] = pitches[position] + Math.sign(fifths);
18262
+ }
18263
+ return new Set(pitches.map((pitch) => (pitch % 12 + 12) % 12));
18264
+ }
18265
+ function steppedPitches(start, end, key) {
18266
+ let direction = Math.sign(end - start), pitches = [start];
18267
+ for (let pitch = start + direction; direction && direction * (end - pitch) > 0; pitch += direction)
18268
+ (!key || key.has(pitch % 12)) && pitches.push(pitch);
18269
+ return pitches;
18270
+ }
18271
+ function renderSteps(on, off, target, pitches, timeline) {
18272
+ let events = [], duration2 = target.time - on.time;
18273
+ return pitches.forEach((midiNote, index) => {
18274
+ let time = on.time + duration2 * index / pitches.length, end = on.time + duration2 * (index + 1) / pitches.length;
18275
+ events.push({
18276
+ ...on,
18277
+ midiNote,
18278
+ time,
18279
+ scoreBeat: timeline.model.beatAtTime(time),
18280
+ scoreDurationBeats: timeline.model.beatAtTime(end) - timeline.model.beatAtTime(time)
18281
+ }), events.push({ ...off, midiNote, time: end });
18282
+ }), events;
18283
+ }
18284
+ function renderBend(on, off, target, lane) {
18285
+ let base = { ...on, playbackLaneId: lane }, end = target.time, range = Math.max(2, Math.abs(target.midiNote - on.midiNote)), control = (cc, value) => ({
18286
+ ...base,
18287
+ type: "controlChange",
18288
+ time: on.time,
18289
+ cc,
18290
+ value
18291
+ }), events = [
18292
+ control(101, 0),
18293
+ control(100, 0),
18294
+ control(6, range),
18295
+ control(38, 0),
18296
+ control(101, 127),
18297
+ control(100, 127),
18298
+ base,
18299
+ { ...off, time: end, playbackLaneId: lane }
18300
+ ], samples = Math.max(1, Math.ceil((end - on.time) * 200));
18301
+ for (let index = 0; index < samples; index++) {
18302
+ let fraction = index / samples, delta = (target.midiNote - on.midiNote) * fraction;
18303
+ events.push({
18304
+ ...base,
18305
+ type: "pitchBend",
18306
+ time: on.time + (end - on.time) * fraction,
18307
+ bendRange: range,
18308
+ value: Math.max(0, Math.min(16383, Math.round(8192 + delta * 8192 / range)))
18309
+ });
18310
+ }
18311
+ return events.push({ ...base, type: "controlChange", time: end, cc: 120, value: 0 }), events.push({ ...base, type: "pitchBend", time: end, value: 8192, bendRange: range }), events;
18312
+ }
18313
+ function applyGlissandoPlayback(score, timeline) {
18314
+ let partLines = score.parts.map((_part, partIndex) => linesForPart(score, partIndex));
18315
+ if (partLines.every((lines) => lines.length === 0)) return [];
18316
+ let diagnostics = [], original = [...timeline.events], releases = releasesFor(original), removed = /* @__PURE__ */ new Set(), added = [], mirroredLanes = /* @__PURE__ */ new Set();
18317
+ return partLines.forEach((lines, partIndex) => {
18318
+ for (let { source, glissando } of lines) {
18319
+ let onsets = original.filter((event) => event.partIndex === partIndex && event.type === "noteOn"), sources = onsets.filter((event) => event.scoreEventId === source), exactTargets = onsets.filter((event) => event.scoreEventId === glissando.target), targets = exactTargets.length > 0 ? exactTargets : onsets.filter((event) => event.scoreEventId?.replaceAll("/", "_") === glissando.target), realized = !1;
18320
+ for (let onset of sources) {
18321
+ if (removed.has(onset)) continue;
18322
+ let time = targets.find(
18323
+ (target2) => target2.time > onset.time + 1e-9 && continuousTo(timeline, onset, target2)
18324
+ )?.time;
18325
+ if (time === void 0) continue;
18326
+ let sourceChord = sources.filter((event) => Math.abs(event.time - onset.time) < 1e-9).sort((a, b) => a.midiNote - b.midiNote), targetChord = targets.filter((event) => Math.abs(event.time - time) < 1e-9).sort((a, b) => a.midiNote - b.midiNote), target = targetChord[Math.min(sourceChord.indexOf(onset), targetChord.length - 1)], off = releases.get(onset);
18327
+ if (!off || onset.channel === 9) continue;
18328
+ realized = !0;
18329
+ let type = glissando.playbackType ?? (glissando.kind === "portamento" ? "pitch-bend" : "diatonic");
18330
+ removed.add(onset), removed.add(off);
18331
+ let lane = `${onset.playbackLaneId ?? `part:${partIndex}`}:gliss:${source}:${sourceChord.indexOf(onset)}`;
18332
+ if (type === "pitch-bend") {
18333
+ let bendEvents = renderBend(onset, off, target, lane), bendOnset = bendEvents.find((event) => event.type === "noteOn");
18334
+ bendOnset.scoreDurationBeats = timeline.model.beatAtTime(target.time) - (onset.scoreBeat ?? timeline.model.beatAtTime(onset.time)), added.push(...bendEvents);
18335
+ } else {
18336
+ let key = type === "diatonic" ? keyPitches(score, timeline, onset) : void 0;
18337
+ added.push(
18338
+ ...renderSteps(
18339
+ { ...onset, playbackLaneId: lane },
18340
+ { ...off, playbackLaneId: lane },
18341
+ target,
18342
+ steppedPitches(onset.midiNote, target.midiNote, key),
18343
+ timeline
18344
+ )
18345
+ );
18346
+ }
18347
+ if (!mirroredLanes.has(lane)) {
18348
+ mirroredLanes.add(lane);
18349
+ for (let event of original)
18350
+ event.partIndex === partIndex && event.playbackLaneId === onset.playbackLaneId && (event.type === "programChange" || event.type === "controlChange") && added.push({ ...event, playbackLaneId: lane });
18351
+ }
18352
+ }
18353
+ realized || diagnostics.push({
18354
+ code: "glissando-playback-unsupported",
18355
+ message: `Glissando from "${source}" to "${glissando.target}" has no forward pitched endpoints on a continuous playback route.`,
18356
+ playbackLaneIds: sources.flatMap((event) => event.playbackLaneId ? [event.playbackLaneId] : [])
18357
+ });
18358
+ }
18359
+ }), timeline.events = original.filter((event) => !removed.has(event)).concat(added), diagnostics;
18360
+ }
18361
+
17909
18362
  // packages/midi/src/chordPlayback/index.ts
17910
18363
  init_define_import_meta_env();
17911
18364
  function getChordPlaybackPart(score) {
@@ -18599,6 +19052,34 @@ function applyInstrumentPlayback(score, events, timing, programs, initialProgram
18599
19052
  }), diagnostics;
18600
19053
  }
18601
19054
 
19055
+ // packages/midi/src/playbackTempo/index.ts
19056
+ init_define_import_meta_env();
19057
+ function buildPlaybackTempoModel(score, measureOrder, holds) {
19058
+ let source = buildTempoModel(
19059
+ playbackGlobalMeasures(
19060
+ score,
19061
+ score.global.measures.map((_, index) => index)
19062
+ )
19063
+ ), intervals = measureOrder.map((index) => ({
19064
+ startBeat: source.measureStartBeats[index],
19065
+ endBeat: source.measureStartBeats[index + 1] ?? source.totalBeats
19066
+ })), realized = TempoModel.concatenate(source.model, intervals), measureStartBeats = [], insertions = [], totalBeats = 0;
19067
+ intervals.forEach((interval, index) => {
19068
+ measureStartBeats.push(totalBeats);
19069
+ let spb = realized.spbAtBeat(totalBeats);
19070
+ for (let hold of holds[index] ?? [])
19071
+ insertions.push({ beat: totalBeats + hold.atBeat, seconds: hold.extraBeats * spb });
19072
+ totalBeats += interval.endBeat - interval.startBeat;
19073
+ });
19074
+ let model = realized.withInsertions(insertions);
19075
+ return {
19076
+ model,
19077
+ measureStartBeats,
19078
+ measureStartTimes: measureStartBeats.map((beat) => model.timeAtBeat(beat)),
19079
+ totalBeats
19080
+ };
19081
+ }
19082
+
18602
19083
  // packages/midi/src/dynamicsEnvelope.ts
18603
19084
  init_define_import_meta_env();
18604
19085
  var CC_EXPRESSION = 11, EPS2 = 1e-6, DEFAULT_DYNAMIC = { velocity: 84, cc11: 100 }, DYNAMIC_AXES = {
@@ -19230,7 +19711,7 @@ function generateTimeline(inputScore, options) {
19230
19711
  let expandedGlobal = playbackGlobalMeasures(score, measureOrder), holdSchedule = suppressCadenzaFermataHolds(
19231
19712
  expandedGlobal,
19232
19713
  buildHoldSchedule(score, measureOrder, globalMeasures)
19233
- ), { tempoMap } = buildTempoMap(expandedGlobal, holdSchedule), tempoBuild = buildTempoModel(expandedGlobal, holdSchedule), { model, measureStartTimes, measureStartBeats } = tempoBuild, rhythm = compileRhythmProgram(score), crossJumpContinuations = /* @__PURE__ */ new Map(), timing = {
19714
+ ), tempoBuild = buildPlaybackTempoModel(score, measureOrder, holdSchedule), tempoMap = tempoMapEntries(expandedGlobal, tempoBuild), { model, measureStartTimes, measureStartBeats } = tempoBuild, rhythm = compileRhythmProgram(score), crossJumpContinuations = /* @__PURE__ */ new Map(), timing = {
19234
19715
  tempoMap,
19235
19716
  measureStartTimes,
19236
19717
  model,
@@ -19260,18 +19741,13 @@ function generateTimeline(inputScore, options) {
19260
19741
  return aOrder !== bOrder ? aOrder - bOrder : a.instrumentChange !== b.instrumentChange ? a.instrumentChange ? -1 : 1 : a.midiNote - b.midiNote;
19261
19742
  };
19262
19743
  allEvents.sort(compareEvents);
19263
- let instrumentDiagnostics = applyInstrumentPlayback(
19744
+ let diagnostics = [...applyInstrumentPlayback(
19264
19745
  score,
19265
19746
  allEvents,
19266
19747
  { model, measureStartBeats, measureOrder },
19267
19748
  options?.instrumentPrograms,
19268
19749
  options?.partPrograms
19269
- ), diagnostics = [
19270
- ...assignPhysicalMidiChannels(allEvents, score),
19271
- ...instrumentDiagnostics,
19272
- ...rhythm.diagnostics
19273
- ];
19274
- for (let diagnostic of diagnostics) options?.onDiagnostic?.(diagnostic);
19750
+ ), ...rhythm.diagnostics];
19275
19751
  allEvents.sort(compareEvents);
19276
19752
  let duration2 = model.timeAtBeat(tempoBuild.totalBeats), measureTimeSignatures = measureOrder.map((origIdx) => {
19277
19753
  let ts = resolveActiveTime(globalMeasures, origIdx);
@@ -19287,8 +19763,10 @@ function generateTimeline(inputScore, options) {
19287
19763
  expandedMeasureToOriginal: measureOrder,
19288
19764
  measureTimeSignatures,
19289
19765
  diagnostics
19290
- };
19291
- return spans && (globalMeasures.some((measure) => measure.jump !== void 0) || spans.some((span) => span.startBeat > 0 || span.endBeat < span.measureBeats)) ? realizeNavigation(result, spans, crossJumpContinuations) : { ...result, playedSpans: spans };
19766
+ }, realized = spans && (globalMeasures.some((measure) => measure.jump !== void 0) || spans.some((span) => span.startBeat > 0 || span.endBeat < span.measureBeats)) ? realizeNavigation(result, spans, crossJumpContinuations) : { ...result, playedSpans: spans };
19767
+ diagnostics.push(...applyGlissandoPlayback(score, realized), ...assignPhysicalMidiChannels(realized.events, score));
19768
+ for (let diagnostic of diagnostics) options?.onDiagnostic?.(diagnostic);
19769
+ return realized.events.sort(compareEvents), realized;
19292
19770
  }
19293
19771
  function assignPhysicalMidiChannels(events, score) {
19294
19772
  let melodicChannels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15], lanesByPart = /* @__PURE__ */ new Map();