@stringsync/vexml
Version:
MusicXML to Vexflow
50 lines (49 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Part = void 0;
const stave_1 = require("./stave");
const util_1 = require("../util");
class Part {
config;
log;
document;
partRender;
staves;
constructor(config, log, document, partRender, staves) {
this.config = config;
this.log = log;
this.document = document;
this.partRender = partRender;
this.staves = staves;
}
static create(config, log, document, partRender) {
const staves = partRender.staveRenders.map((staveRender) => stave_1.Stave.create(config, log, document, staveRender));
return new Part(config, log, document, partRender, staves);
}
/** The name of the element, which can be used as a type discriminant. */
name = 'part';
/** Returns the bounding box of the element. */
rect() {
return this.partRender.rect;
}
/** Returns the staves of the part. */
getStaves() {
return this.staves;
}
/** Returns the part index. */
getIndex() {
return this.partRender.key.partIndex;
}
/** Returns the system index. */
getSystemIndex() {
return this.partRender.key.systemIndex;
}
/** Returns the start measure beat for the part. */
getStartMeasureBeat() {
return (this.staves
.map((stave) => stave.getStartMeasureBeat())
.sort((a, b) => a.toDecimal() - b.toDecimal())
.at(0) ?? util_1.Fraction.zero());
}
}
exports.Part = Part;